Tutorial: Menggunakan autentikasi Direktori Aktif dengan SQL Server di Linux
Berlaku untuk: SQL Server - Linux
Tutorial ini menjelaskan cara mengonfigurasi SQL Server di Linux untuk mendukung autentikasi Direktori Aktif, juga dikenal sebagai autentikasi terintegrasi. Untuk gambaran umum, lihat Autentikasi Direktori Aktif untuk SQL Server di Linux.
Tutorial ini terdiri dari tugas-tugas berikut:
- Bergabunglah dengan host SQL Server ke domain Direktori Aktif
- Membuat pengguna Direktori Aktif untuk SQL Server dan mengatur SPN
- Mengonfigurasi keytab layanan SQL Server
- Mengamankan file keytab
- Mengonfigurasi SQL Server untuk menggunakan file keytab untuk autentikasi Kerberos
- Membuat login berbasis Direktori Aktif di Transact-SQL
- Menyambungkan ke SQL Server menggunakan Autentikasi Direktori Aktif
Prasyarat
Sebelum mengonfigurasi Autentikasi Direktori Aktif, Anda perlu:
- Menyiapkan Pengendali Domain Direktori Aktif (Windows) pada jaringan Anda
- Menginstal SQL Server
Bergabunglah dengan host SQL Server ke domain Direktori Aktif
Bergabunglah dengan host Linux SQL Server Anda dengan pengontrol domain Direktori Aktif. Untuk informasi tentang cara bergabung dengan domain direktori aktif, lihat Bergabung dengan SQL Server di host Linux ke domain Direktori Aktif.
Membuat pengguna Direktori Aktif untuk SQL Server dan mengatur SPN
Catatan
Langkah-langkah berikut menggunakan nama domain Anda yang sepenuhnya memenuhi syarat (FQDN). Jika Anda berada di Azure, Anda harus membuat FQDN sebelum melanjutkan.
Di pengontrol domain Anda, jalankan perintah New-ADUser PowerShell untuk membuat pengguna Active Directory baru dengan kata sandi yang tidak pernah kedaluwarsa. Contoh berikut menamai akun
sqlsvc
, tetapi nama akun bisa menjadi apa pun yang Anda suka. Anda akan diminta untuk memasukkan kata sandi baru untuk akun tersebut.Import-Module ActiveDirectory New-ADUser sqlsvc -AccountPassword (Read-Host -AsSecureString "Enter Password") -PasswordNeverExpires $true -Enabled $true
Catatan
Ini adalah praktik terbaik keamanan untuk memiliki akun Direktori Aktif khusus untuk SQL Server, sehingga info masuk instans SQL Server tidak dibagikan dengan layanan lain menggunakan akun yang sama. Namun, Anda dapat secara opsional menggunakan kembali akun Direktori Aktif yang ada jika Anda mengetahui kata sandi akun (yang diperlukan untuk membuat file keytab di langkah berikutnya). Selain itu, akun harus diaktifkan untuk mendukung enkripsi (
msDS-SupportedEncryptionTypes
atribut) Kerberos AES 128-bit dan 256-bit pada akun pengguna. Untuk memvalidasi akun diaktifkan untuk enkripsi AES, temukan akun di utilitas Pengguna direktori aktif dan Komputer , dan pilih Properti. Temukan tab Akun di Properti, dan validasi dua kotak centang berikut dipilih.Akun ini mendukung enkripsi Kerberos AES 128 bit
Akun ini mendukung enkripsi Kerberos AES 256 bit
Atur ServicePrincipalName (SPN) untuk akun ini menggunakan alat setspn.exe . SPN harus diformat persis seperti yang ditentukan dalam contoh berikut. Anda dapat menemukan nama domain yang sepenuhnya memenuhi syarat dari komputer host SQL Server dengan berjalan
hostname --all-fqdns
di host SQL Server. Port TCP harus 1433 kecuali Anda telah mengonfigurasi SQL Server untuk menggunakan nomor port yang berbeda.setspn -A MSSQLSvc/<fully qualified domain name of host machine>:<tcp port> sqlsvc setspn -A MSSQLSvc/<netbios name of the host machine>:<tcp port> sqlsvc
Catatan
Jika Anda menerima kesalahan,
Insufficient access rights
, tanyakan kepada administrator domain Anda bahwa Anda memiliki izin yang memadai untuk mengatur SPN di akun ini. Akun yang digunakan untuk mendaftarkan SPN akan memerlukanWrite servicePrincipalName
izin. Untuk informasi selengkapnya, lihat Mendaftarkan Nama Perwakilan Layanan untuk koneksi Kerberos.Jika Anda mengubah port TCP di masa mendatang, Anda harus menjalankan perintah setspn lagi dengan nomor port baru. Anda juga perlu menambahkan SPN baru ke keytab layanan SQL Server dengan mengikuti langkah-langkah di bagian berikutnya.
Untuk informasi selengkapnya, lihat Mendaftarkan Nama Perwakilan Layanan untuk koneksi Kerberos.
Mengonfigurasi keytab layanan SQL Server
Mengonfigurasi autentikasi Direktori Aktif untuk SQL Server di Linux memerlukan akun pengguna Direktori Aktif dan SPN yang dibuat di bagian sebelumnya.
Penting
Jika kata sandi untuk akun Direktori Aktif diubah atau kata sandi untuk akun tempat SPN ditetapkan diubah, Anda harus memperbarui keytab dengan kata sandi baru dan Nomor Versi Kunci (KVNO). Beberapa layanan mungkin juga memutar kata sandi secara otomatis. Tinjau kebijakan rotasi kata sandi apa pun untuk akun yang dimaksud dan selaraskan dengan aktivitas pemeliharaan terjadwal untuk menghindari waktu henti yang tidak terduga.
Entri keytab SPN
Periksa Nomor Versi Kunci (KVNO) untuk akun Direktori Aktif yang dibuat di langkah sebelumnya. Biasanya 2, tetapi bisa menjadi bilangan bulat lain jika Anda mengubah kata sandi akun beberapa kali. Pada komputer host SQL Server, jalankan perintah berikut:
- Contoh di bawah ini mengasumsikan
user
ada di@CONTOSO.COM
domain. Ubah nama pengguna dan domain menjadi nama pengguna dan domain Anda.
kinit user@CONTOSO.COM kvno user@CONTOSO.COM kvno MSSQLSvc/<fully qualified domain name of host machine>:<tcp port>@CONTOSO.COM
Catatan
SPN dapat memakan waktu beberapa menit untuk disebarluaskan melalui domain Anda, terutama jika domain besar. Jika Anda menerima kesalahan,
kvno: Server not found in Kerberos database while getting credentials for MSSQLSvc/<fully qualified domain name of host machine>:<tcp port>@CONTOSO.COM
, silakan tunggu beberapa menit dan coba lagi.
Perintah di atas hanya akan berfungsi jika server telah bergabung ke domain Direktori Aktif, yang tercakup di bagian sebelumnya.- Contoh di bawah ini mengasumsikan
Menggunakan ktpass, tambahkan entri keytab untuk setiap SPN menggunakan perintah berikut pada Prompt Perintah komputer Windows:
<DomainName>\<UserName>
- Akun pengguna Direktori Aktif@CONTOSO.COM
- Gunakan nama domain Anda/kvno <#>
- Ganti<#>
dengan KVNO yang diperoleh pada langkah sebelumnya<StrongPassword>
- Gunakan kata sandi yang kuat
ktpass /princ MSSQLSvc/<fully qualified domain name of host machine>:<tcp port>@CONTOSO.COM /ptype KRB5_NT_PRINCIPAL /crypto aes256-sha1 /mapuser <DomainName>\<UserName> /out mssql.keytab -setpass -setupn /kvno <#> /pass <StrongPassword> ktpass /princ MSSQLSvc/<fully qualified domain name of host machine>:<tcp port>@CONTOSO.COM /ptype KRB5_NT_PRINCIPAL /crypto rc4-hmac-nt /mapuser <DomainName>\<UserName> /in mssql.keytab /out mssql.keytab -setpass -setupn /kvno <#> /pass <StrongPassword> ktpass /princ MSSQLSvc/<netbios name of the host machine>:<tcp port>@CONTOSO.COM /ptype KRB5_NT_PRINCIPAL /crypto aes256-sha1 /mapuser <DomainName>\<UserName> /in mssql.keytab /out mssql.keytab -setpass -setupn /kvno <#> /pass <StrongPassword> ktpass /princ MSSQLSvc/<netbios name of the host machine>:<tcp port>@CONTOSO.COM /ptype KRB5_NT_PRINCIPAL /crypto rc4-hmac-nt /mapuser <DomainName>\<UserName> /in mssql.keytab /out mssql.keytab -setpass -setupn /kvno <#> /pass <StrongPassword> ktpass /princ <UserName>@CONTOSO.COM /ptype KRB5_NT_PRINCIPAL /crypto aes256-sha1 /mapuser <DomainName>\<UserName> /in mssql.keytab /out mssql.keytab -setpass -setupn /kvno <#> /pass <StrongPassword> ktpass /princ <UserName>@CONTOSO.COM /ptype KRB5_NT_PRINCIPAL /crypto rc4-hmac-nt /mapuser <DomainName>\<UserName> /in mssql.keytab /out mssql.keytab -setpass -setupn /kvno <#> /pass <StrongPassword>
Catatan
Perintah di atas memungkinkan cipher enkripsi AES dan RC4 untuk autentikasi Direktori Aktif. RC4 adalah sandi enkripsi yang lebih lama dan jika tingkat keamanan yang lebih tinggi diperlukan, Anda dapat memilih untuk membuat entri keytab hanya dengan sandi enkripsi AES. Dua
UserName
entri terakhir harus dalam huruf kecil, atau autentikasi permsi mungkin gagal.Setelah menjalankan perintah di atas, Anda harus memiliki file keytab bernama
mssql.keytab
. Salin file ke komputer SQL Server di bawah folder/var/opt/mssql/secrets
.Amankan file keytab.
Siapa pun yang memiliki akses ke file keytab ini dapat meniru SQL Server di domain, jadi pastikan Anda membatasi akses ke file sehingga hanya akun mssql yang memiliki akses baca:
sudo chown mssql:mssql /var/opt/mssql/secrets/mssql.keytab sudo chmod 400 /var/opt/mssql/secrets/mssql.keytab
Opsi konfigurasi berikut perlu diatur dengan alat mssql-conf untuk menentukan akun yang akan digunakan saat mengakses file keytab.
sudo mssql-conf set network.privilegedadaccount <username>
Catatan
Hanya sertakan nama pengguna dan bukan nama domain\nama pengguna atau username@domain. SQL Server secara internal menambahkan nama domain sesuai kebutuhan bersama dengan nama pengguna ini saat digunakan.
Gunakan langkah-langkah berikut untuk mengonfigurasi SQL Server untuk mulai menggunakan file keytab untuk autentikasi Kerberos.
sudo mssql-conf set network.kerberoskeytabfile /var/opt/mssql/secrets/mssql.keytab sudo systemctl restart mssql-server
Tip
Secara opsional, nonaktifkan koneksi UDP ke pengendali domain untuk meningkatkan performa. Dalam banyak kasus, koneksi UDP secara konsisten gagal saat menyambungkan ke pengendali domain, sehingga Anda dapat mengatur opsi
/etc/krb5.conf
konfigurasi untuk melewati panggilan UDP. Edit/etc/krb5.conf
dan atur opsi berikut:/etc/krb5.conf [libdefaults] udp_preference_limit=0
Pada titik ini, Anda siap untuk menggunakan login berbasis Direktori Aktif di SQL Server.
Membuat login berbasis Direktori Aktif di Transact-SQL
Sambungkan ke SQL Server dan buat login baru berbasis Direktori Aktif:
CREATE LOGIN [CONTOSO\user] FROM WINDOWS;
Verifikasi bahwa login sekarang tercantum dalam tampilan katalog sistem sys.server_principals :
SELECT name FROM sys.server_principals;
Menyambungkan ke SQL Server menggunakan autentikasi Direktori Aktif
Masuk ke komputer klien menggunakan kredensial domain Anda. Sekarang Anda dapat tersambung ke SQL Server tanpa memasukkan kembali kata sandi Anda dengan menggunakan autentikasi Direktori Aktif. Jika Anda membuat login untuk grup Direktori Aktif, setiap pengguna Direktori Aktif yang merupakan anggota grup tersebut dapat tersambung dengan cara yang sama.
Parameter string koneksi khusus bagi klien untuk menggunakan autentikasi Direktori Aktif bergantung pada driver mana yang Anda gunakan. Pertimbangkan contoh di bagian berikut.
sqlcmd pada klien Linux yang bergabung dengan domain
Masuk ke klien Linux yang bergabung dengan domain menggunakan ssh dan info masuk domain Anda:
ssh -l user@contoso.com client.contoso.com
Pastikan Anda telah menginstal paket mssql-tools , lalu menyambungkan menggunakan sqlcmd tanpa menentukan kredensial apa pun:
sqlcmd -S mssql-host.contoso.com
Berbeda dari SQL Windows, autentikasi Kerberos berfungsi untuk koneksi lokal di SQL Linux. Namun, Anda masih perlu menyediakan FQDN host SQL Linux, dan autentikasi Direktori Aktif tidak akan berfungsi jika Anda mencoba menyambungkan ke .
, localhost
, 127.0.0.1
dll.
SSMS pada klien Windows yang bergabung dengan domain
Masuk ke klien Windows yang bergabung dengan domain menggunakan kredensial domain Anda. Pastikan SQL Server Management Studio diinstal, lalu sambungkan ke instans SQL Server Anda (misalnya, mssql-host.contoso.com
) dengan menentukan Autentikasi Windows dalam dialog Sambungkan ke Server .
Autentikasi Direktori Aktif menggunakan driver klien lain
Tabel berikut ini menjelaskan rekomendasi untuk driver klien lainnya:
Driver klien | Rekomendasi |
---|---|
JDBC | Gunakan Autentikasi Terintegrasi Kerberos untuk Menyambungkan SQL Server. |
ODBC | Gunakan Autentikasi Terintegrasi. |
ADO.NET | Sintaks string koneksi. |
Opsi konfigurasi tambahan.
Jika Anda menggunakan utilitas pihak ketiga seperti PBIS, VAS, atau Centrify untuk bergabung dengan host Linux ke domain Direktori Aktif dan Anda ingin memaksa SQL Server untuk menggunakan pustaka OpenLDAP secara langsung, Anda dapat mengonfigurasi disablesssd
opsi dengan mssql-conf sebagai berikut:
sudo mssql-conf set network.disablesssd true
systemctl restart mssql-server
Catatan
Ada utilitas seperti realmd yang menyiapkan SSSD, sementara alat lain seperti PBIS, VAS dan Centrify tidak menyiapkan SSSD. Jika utilitas yang digunakan untuk bergabung dengan domain Direktori Aktif tidak menyiapkan SSSD, disarankan untuk mengonfigurasi disablesssd
opsi ke true
. Meskipun tidak diperlukan karena SQL Server akan mencoba menggunakan SSSD untuk Direktori Aktif sebelum kembali ke mekanisme OpenLDAP, akan lebih berkinerja untuk mengonfigurasinya sehingga SQL Server membuat panggilan OpenLDAP langsung melewati mekanisme SSSD.
Jika pengendali domain Anda mendukung LDAPS, Anda dapat memaksa semua koneksi dari SQL Server ke pengendali domain melalui LDAPS. Untuk memeriksa klien Anda dapat menghubungi pengendali domain melalui LDAPS, jalankan perintah bash berikut, ldapsearch -H ldaps://contoso.com:3269
. Untuk mengatur SQL Server agar hanya menggunakan LDAPS, jalankan hal berikut:
sudo mssql-conf set network.forcesecureldap true
systemctl restart mssql-server
Ini akan menggunakan LDAPS melalui SSSD jika gabungan domain Direktori Aktif pada host dilakukan melalui paket SSSD dan disablesssd
tidak diatur ke true. Jika disablesssd
diatur ke true bersama dengan forcesecureldap
diatur ke true, maka akan menggunakan protokol LDAPS melalui panggilan pustaka OpenLDAP yang dilakukan oleh SQL Server.
Posting SQL Server 2017 CU 14
Dimulai dengan SQL Server 2017 (14.x) CU 14, jika SQL Server digabungkan ke pengontrol domain Direktori Aktif menggunakan penyedia pihak ketiga dan dikonfigurasi untuk menggunakan panggilan OpenLDAP untuk pencarian Direktori Aktif umum dengan mengatur disablesssd
ke true, Anda juga dapat menggunakan enablekdcfromkrb5
opsi untuk memaksa SQL Server menggunakan pustaka krb5 untuk pencarian KDC alih-alih pencarian DNS terbalik untuk server KDC.
Ini mungkin berguna untuk skenario di mana Anda ingin mengonfigurasi pengontrol domain yang coba dikomunikasikan secara manual oleh SQL Server. Dan Anda menggunakan mekanisme pustaka OpenLDAP dengan menggunakan daftar KDC di krb5.conf
.
Pertama, atur disablesssd
dan enablekdcfromkrb5conf
ke true lalu mulai ulang SQL Server:
sudo mssql-conf set network.disablesssd true
sudo mssql-conf set network.enablekdcfromkrb5conf true
systemctl restart mssql-server
Kemudian konfigurasikan daftar KDC sebagai /etc/krb5.conf
berikut:
[realms]
CONTOSO.COM = {
kdc = dcWithGC1.contoso.com
kdc = dcWithGC2.contoso.com
}
Meskipun tidak disarankan, dimungkinkan untuk menggunakan utilitas, seperti realmd, yang menyiapkan SSSD saat bergabung dengan host Linux ke domain, sambil mengonfigurasi disablesssd
ke true sehingga SQL Server menggunakan panggilan OpenLDAP alih-alih SSSD untuk panggilan terkait Direktori Aktif.
Catatan
Login SQL Server dengan menggunakan FQDN (misalnya, CONTOSO.COM\Username
) tidak didukung. Gunakan format .CONTOSO\Username
Login SQL Server dari grup Lokal Domain tidak didukung. Gunakan grup Domain Keamanan Global sebagai gantinya.
Konten terkait
- Mengenkripsi koneksi ke SQL Server di Linux
- Memahami autentikasi Direktori Aktif untuk SQL Server di Linux dan kontainer
- Memecahkan masalah autentikasi Direktori Aktif untuk SQL Server di Linux dan kontainer
Berkontribusi pada dokumentasi SQL
Tahukah Anda bahwa Anda dapat mengedit konten SQL sendiri? Jika Anda melakukannya, Anda tidak hanya membantu meningkatkan dokumentasi kami, tetapi Anda juga dikreditkan sebagai kontributor ke halaman.
Untuk informasi selengkapnya, lihat Cara berkontribusi pada dokumentasi SQL Server