Menyambungkan dari Linux atau macOS
Artikel ini membahas cara membuat koneksi ke database SQL Server.
Properti Koneksi
Lihat Kata Kunci dan Atribut DSN dan String Koneksi untuk semua kata kunci dan atribut string koneksi yang didukung di Linux dan macOS.
Penting
Saat menyambungkan ke database yang menggunakan pencerminan database (memiliki mitra failover), jangan tentukan nama database di string koneksi. Sebagai gantinya, kirim perintah gunakan database_name untuk menyambungkan ke database sebelum menjalankan kueri Anda.
Nilai yang diteruskan ke kata kunci Driver bisa menjadi salah satu dari yang berikut ini:
Nama yang Anda gunakan saat menginstal driver.
Jalur ke pustaka driver, yang ditentukan dalam file .ini templat yang digunakan untuk menginstal driver.
DSN bersifat opsional. Anda dapat menggunakan DSN untuk menentukan kata kunci string koneksi dengan DSN
nama yang kemudian dapat Anda referensikan di string koneksi. Untuk membuat DSN, buat (jika perlu) dan edit file ~/.odbc.ini (.odbc.ini
di direktori beranda Anda) untuk DSN Pengguna hanya dapat diakses oleh pengguna saat ini, atau /etc/odbc.ini
untuk DSN Sistem (hak istimewa administratif diperlukan.) Odbc.ini berikut adalah sampel yang menunjukkan entri minimal yang diperlukan untuk DSN:
# [DSN name]
[MSSQLTest]
Driver = ODBC Driver 18 for SQL Server
# Server = [protocol:]server[,port]
Server = tcp:localhost,1433
Encrypt = yes
#
# Note:
# Port isn't a valid keyword in the odbc.ini file
# for the Microsoft ODBC driver on Linux or macOS
#
Untuk menyambungkan menggunakan DSN di atas dalam string koneksi, Anda akan menentukan DSN
kata kunci seperti:DSN=MSSQLTest;UID=my_username;PWD=my_password
string koneksi di atas akan setara dengan menentukan string koneksi tanpa DSN
kata kunci seperti:Driver=ODBC Driver 18 for SQL Server;Server=tcp:localhost,1433;Encrypt=yes;UID=my_username;PWD=my_password
Anda dapat secara opsional menentukan protokol dan port untuk tersambung ke server. Misalnya, Server=tcp:servername,12345. Satu-satunya protokol yang didukung oleh driver Linux dan macOS adalah tcp
.
Untuk menyambungkan ke instans bernama pada port statis, gunakan Server=servername,port_number. Menyambungkan ke port dinamis tidak didukung sebelum versi 17.4.
Atau, Anda dapat menambahkan informasi DSN ke file templat, dan menjalankan perintah berikut untuk menambahkannya ke ~/.odbc.ini
:
odbcinst -i -s -f <template_file>
Untuk dokumentasi lengkap tentang file ini dan odbcinst
, lihat dokumentasi unixODBC. Untuk entri dalam odbc.ini
file khusus untuk Driver ODBC untuk SQL Server, lihat Kata Kunci dan Atribut String DSN dan Koneksi untuk yang didukung di Linux dan macOS.
Anda dapat memverifikasi bahwa driver Anda bekerja dengan menggunakan isql
untuk menguji koneksi, atau Anda dapat menggunakan perintah ini:
bcp master.INFORMATION_SCHEMA.TABLES out OutFile.dat -S <server> -U <name> -P <password>
Menggunakan TLS/SSL
Anda dapat menggunakan Keamanan Lapisan Transportasi (TLS), yang sebelumnya dikenal sebagai Secure Sockets Layer (SSL), untuk mengenkripsi koneksi ke SQL Server. TLS melindungi nama pengguna dan kata sandi SQL Server melalui jaringan. TLS juga memverifikasi identitas server untuk melindungi dari serangan man-in-the-middle (MITM).
Mengaktifkan enkripsi meningkatkan keamanan dengan mengorbankan performa.
Untuk informasi selengkapnya, lihat Mengenkripsi Koneksi ke SQL Server dan Menggunakan Enkripsi Tanpa Validasi.
Terlepas dari pengaturan untuk Encrypt and TrustServerCertificate, kredensial login server (nama pengguna dan kata sandi) selalu dienkripsi. Tabel berikut ini memperlihatkan efek pengaturan Enkripsi dan TrustServerCertificate .
Driver ODBC 18 dan yang lebih baru
Pengaturan Enkripsi | Sertifikat Server Kepercayaan | Enkripsi Paksa Server | Hasil |
---|---|---|---|
Tidak | No | Tidak | Sertifikat server tidak diperiksa. Data yang dikirim antara klien dan server tidak dienkripsi. |
Tidak | Ya | Tidak | Sertifikat server tidak diperiksa. Data yang dikirim antara klien dan server tidak dienkripsi. |
Ya | No | Tidak | Sertifikat server dicentang. Data yang dikirim antara klien dan server dienkripsi. |
Ya | Ya | Tidak | Sertifikat server tidak diperiksa. Data yang dikirim antara klien dan server dienkripsi. |
Tidak | No | Ya | Sertifikat server dicentang. Data yang dikirim antara klien dan server dienkripsi. |
Tidak | Ya | Ya | Sertifikat server tidak diperiksa. Data yang dikirim antara klien dan server dienkripsi. |
Ya | No | Ya | Sertifikat server dicentang. Data yang dikirim antara klien dan server dienkripsi. |
Ya | Ya | Ya | Sertifikat server tidak diperiksa. Data yang dikirim antara klien dan server dienkripsi. |
Ketat | - | - | TrustServerCertificate diabaikan. Sertifikat server dicentang. Data yang dikirim antara klien dan server dienkripsi. |
Catatan
Ketat hanya tersedia terhadap server yang mendukung koneksi TDS 8.0.
Driver ODBC 17 dan yang lebih lama
Pengaturan Enkripsi | Sertifikat Server Kepercayaan | Enkripsi Paksa Server | Hasil |
---|---|---|---|
Tidak | No | Tidak | Sertifikat server tidak diperiksa. Data yang dikirim antara klien dan server tidak dienkripsi. |
Tidak | Ya | Tidak | Sertifikat server tidak diperiksa. Data yang dikirim antara klien dan server tidak dienkripsi. |
Ya | No | Tidak | Sertifikat server dicentang. Data yang dikirim antara klien dan server dienkripsi. |
Ya | Ya | Tidak | Sertifikat server tidak diperiksa. Data yang dikirim antara klien dan server dienkripsi. |
Tidak | No | Ya | Sertifikat server tidak diperiksa. Data yang dikirim antara klien dan server dienkripsi. |
Tidak | Ya | Ya | Sertifikat server tidak diperiksa. Data yang dikirim antara klien dan server dienkripsi. |
Ya | No | Ya | Sertifikat server dicentang. Data yang dikirim antara klien dan server dienkripsi. |
Ya | Ya | Ya | Sertifikat server tidak diperiksa. Data yang dikirim antara klien dan server dienkripsi. |
Saat menggunakan enkripsi koneksi, nama (atau alamat IP) dalam Nama Umum Subjek (CN) atau Nama Alternatif Subjek (SAN) dalam sertifikat TLS/SSL SQL Server harus sama persis dengan nama server (atau alamat IP) yang ditentukan dalam string koneksi. Kata HostnameInCertificate
kunci (v18.0+) dapat digunakan untuk menentukan nama alternatif yang digunakan untuk mencocokkan dengan nama dalam sertifikat TLS/SSL. Ketika kata kunci ditentukan, sertifikat SQL Server TLS/SSL harus cocok dengan salah satu nama server, atau HostnameInCertificate
.
Secara default, koneksi terenkripsi selalu memverifikasi sertifikat server. Namun, jika Anda tersambung ke server yang memiliki sertifikat yang ditandatangani sendiri, dan tidak menggunakan mode enkripsi yang ketat, Anda dapat menambahkan TrustServerCertificate
opsi untuk melewati pemeriksaan sertifikat terhadap daftar otoritas sertifikat tepercaya:
Driver={ODBC Driver 18 for SQL Server};Server=ServerNameHere;Encrypt=YES;TrustServerCertificate=YES
Dalam mode enkripsi yang ketat, sertifikat selalu diverifikasi. Sebagai opsi untuk validasi sertifikat standar, ServerCertificate
kata kunci (v18.1+) dapat digunakan untuk menentukan jalur ke file sertifikat yang cocok dengan sertifikat SQL Server. Opsi ini hanya tersedia saat menggunakan enkripsi ketat. Format sertifikat yang diterima adalah PEM, DER, dan CER. Jika ditentukan, sertifikat SQL Server diperiksa dengan melihat apakah yang ServerCertificate
disediakan sama persis.
TLS di Linux dan macOS menggunakan pustaka OpenSSL. Tabel berikut menunjukkan versi OpenSSL minimum yang didukung dan lokasi Penyimpanan Kepercayaan Sertifikat default untuk setiap platform:
Platform | Versi OpenSSL Minimum | Lokasi Penyimpanan Kepercayaan Sertifikat Default |
---|---|---|
Debian 10, 11, 12 | 1.1.1 | /etc/ssl/certs |
Debian 9 | 1.1.0 | /etc/ssl/certs |
Debian 8.71 | 1.0.1 | /etc/ssl/certs |
OS X 10.11, macOS | 1.0.2 | /usr/local/etc/openssl/certs |
Red Hat Enterprise Linux 9+ | 3.0.1 | /etc/pki/tls/cert.pem |
Red Hat Enterprise Linux 8 | 1.1.1 | /etc/pki/tls/cert.pem |
Red Hat Enterprise Linux 7 | 1.0.1 | /etc/pki/tls/cert.pem |
Red Hat Enterprise Linux 6 | 1.0.0-10 | /etc/pki/tls/cert.pem |
SUSE Linux Enterprise 15 | 1.1.0 | /etc/ssl/certs |
SUSE Linux Enterprise 11, 12 | 1.0.1 | /etc/ssl/certs |
Ubuntu 22.04, 23.04 | 3.0.2 | /etc/ssl/certs |
Ubuntu 20.04 | 1.1.1 | /etc/ssl/certs |
Ubuntu 18.04 | 1.1.0 | /etc/ssl/certs |
Ubuntu 16.04 | 1.0.2 | /etc/ssl/certs |
Ubuntu 14.04 | 1.0.1 | /etc/ssl/certs |
Alpine 3.17, 3.18 | 3.0.1 | /etc/ssl/certs |
Anda juga dapat menentukan enkripsi di string koneksi menggunakan Encrypt
opsi saat menggunakan SQLDriverConnect untuk menyambungkan.
Menyesuaikan Pengaturan TCP Keep-Alive
Dimulai dengan Odbc Driver 17.4, seberapa sering driver mengirim paket tetap hidup dan mengirimkannya kembali ketika respons tidak diterima dapat dikonfigurasi.
Untuk mengonfigurasi, tambahkan pengaturan berikut ke bagian driver di odbcinst.ini
, atau bagian DSN di odbc.ini
. Saat menyambungkan dengan DSN, driver akan menggunakan pengaturan di bagian DSN jika ada; jika tidak, atau jika terhubung dengan string koneksi saja, itu akan menggunakan pengaturan di bagian driver di odbcinst.ini
. Jika pengaturan tidak ada di salah satu lokasi, driver menggunakan nilai default.
Dimulai dengan Odbc Driver 17.8, KeepAlive
dan KeepAliveInterval
kata kunci dapat ditentukan dalam string koneksi.
KeepAlive=<integer>
mengontrol seberapa sering TCP mencoba memverifikasi bahwa koneksi diam masih utuh dengan mengirim paket tetap hidup. Defaultnya adalah 30 detik.KeepAliveInterval=<integer>
menentukan interval yang memisahkan transmisi ulang tetap aktif hingga respons diterima. Defaultnya adalah 1 detik.