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
  • Koneksi ke SQL Server menggunakan Autentikasi Direktori Aktif

Prasyarat

Sebelum mengonfigurasi Autentikasi Direktori Aktif, Anda perlu:

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.

  1. 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.

    1. Akun ini mendukung enkripsi Kerberos AES 128 bit

    2. Akun ini mendukung enkripsi Kerberos AES 256 bit

  2. 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 memerlukan Write 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

  1. 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.

  2. 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.

  3. 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.

  4. 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
    
  5. 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.

  6. 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

  1. Koneksi ke SQL Server dan buat login baru berbasis Direktori Aktif:

    CREATE LOGIN [CONTOSO\user] FROM WINDOWS;
    
  2. Verifikasi bahwa login sekarang tercantum dalam tampilan katalog sistem sys.server_principals :

    SELECT name FROM sys.server_principals;
    

Koneksi 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.1dll.

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 Koneksi 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 Koneksi SQL Server.
ODBC Gunakan Autentikasi Terintegrasi.
ADO.NET Sintaks string Koneksi ion.

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.

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