Tutorial: Menggunakan adutil untuk mengonfigurasi autentikasi Direktori Aktif dengan SQL Server di Linux

Berlaku untuk:SQL Server - Linux

Tutorial ini menjelaskan cara mengonfigurasi autentikasi Windows Active Directory untuk SQL Server di Linux menggunakan adutil. Untuk metode lain mengonfigurasi autentikasi Direktori Aktif menggunakan ktpass, lihat Tutorial: Menggunakan autentikasi Direktori Aktif dengan SQL Server di Linux.

Tutorial ini terdiri dari tugas-tugas berikut:

  • Menginstal adutil
  • Bergabung dengan komputer Linux ke domain Direktori Aktif Anda
  • Buat pengguna Direktori Aktif untuk SQL Server dan atur Nama Prinsipal Layanan (SPN) menggunakan adutil
  • Membuat file keytab layanan SQL Server (tabel kunci)
  • Mengonfigurasi SQL Server untuk menggunakan file keytab
  • Membuat login SQL Server berbasis Direktori Aktif menggunakan Transact-SQL
  • Koneksi ke SQL Server menggunakan autentikasi Direktori Aktif

Prasyarat

Sebelum mengonfigurasi autentikasi Direktori Aktif, Anda memerlukan:

  • Pengendali Domain Windows yang menjalankan Active Directory Domain Services di jaringan Anda.
  • Alat adutil diinstal pada komputer host yang bergabung dengan domain.

Persiapan komputer domain

Pastikan ada entri host penerusan (A) yang ditambahkan di Direktori Aktif untuk alamat IP host Linux. Dalam tutorial ini, alamat IP komputer sql1 host adalah 10.0.0.10. Kami menambahkan entri host penerusan di Direktori Aktif dalam contoh berikut. Entri memastikan bahwa ketika pengguna terhubung ke sql1.contoso.com, itu mencapai host yang tepat.

add host record

Untuk tutorial ini, kami menggunakan lingkungan di Azure dengan tiga komputer virtual (VM). Satu VM adalah komputer Windows Server bernama adVM.contoso.com, berjalan sebagai Pengendali Domain (DC) dengan nama contoso.comdomain . VM kedua adalah komputer klien yang menjalankan Windows 10 bernama winbox, yang telah menginstal SQL Server Management Studio (SSMS). Komputer ketiga adalah komputer Ubuntu 18.04 LTS bernama sql1, yang menghosting SQL Server.

Bergabung dengan komputer host Linux ke domain Direktori Aktif Anda

Untuk bergabung sql1 ke domain Direktori Aktif, lihat Bergabung dengan SQL Server di host Linux ke domain Direktori Aktif.

Menginstal adutil

Untuk menginstal adutil, ikuti langkah-langkah yang dijelaskan dalam artikel Pengantar utilitas adutil - Direktori Aktif pada komputer host yang Anda tambahkan ke domain di langkah sebelumnya.

Gunakan adutil untuk membuat pengguna Direktori Aktif untuk SQL Server dan atur Nama Prinsipal Layanan (SPN)

  1. Dapatkan atau perbarui Kerberos TGT (tiket pemberian tiket) menggunakan kinit perintah . Anda harus menggunakan akun istimewa untuk perintah , kinit dan komputer host harus sudah menjadi bagian dari domain. Akun memerlukan izin untuk menyambungkan ke domain, dan membuat akun dan SPN di domain.

    Dalam contoh skrip ini, pengguna privilegeduser@CONTOSO.COM istimewa bernama sudah dibuat pada pengendali domain.

    kinit privilegeduser@CONTOSO.COM
    
  2. Dengan menggunakan adutil, buat pengguna baru yang akan Anda gunakan sebagai akun Active Directory istimewa oleh SQL Server.

    Kata sandi dapat ditentukan dengan tiga cara berbeda. Jika Anda menggunakan lebih dari salah satu metode ini, metode tersebut diutamakan dalam urutan berikut:

    • Menggunakan bendera kata sandi: --password <password>
    • Dalam variabel lingkungan: ADUTIL_ACCOUNT_PWD
    • Input interaktif pada prompt baris perintah

    Variabel lingkungan atau metode input interaktif lebih aman daripada bendera kata sandi.

    adutil user create --name sqluser --distname CN=sqluser,CN=Users,DC=CONTOSO,DC=COM --password 'P@ssw0rd'
    

    Anda dapat menentukan nama akun menggunakan nama khusus (--distname) seperti yang ditunjukkan sebelumnya, atau Anda dapat menggunakan nama Unit Organisasi (OU). Nama OU (--ou) lebih diutamakan daripada nama khusus jika Anda menentukan keduanya. Anda dapat menjalankan perintah di bawah ini untuk detail selengkapnya:

    adutil user create --help
    
  3. Daftarkan SPN ke prinsipal yang dibuat sebelumnya. Anda harus menggunakan nama domain komputer yang sepenuhnya memenuhi syarat (FQDN). Dalam tutorial ini, kita menggunakan port default SQL Server, 1433. Nomor port Anda bisa berbeda.

    adutil spn addauto -n sqluser -s MSSQLSvc -H sql1.contoso.com -p 1433
    
    • addauto membuat SPN secara otomatis, selama ada cukup hak istimewa untuk akun tersebut kinit .
    • -n: Nama akun untuk menetapkan SPN.
    • -s: Nama layanan yang digunakan untuk menghasilkan SPN. Dalam hal ini adalah untuk layanan SQL Server, itulah sebabnya nama layanan adalah MSSQLSvc.
    • -H: Nama host yang digunakan untuk menghasilkan SPN. Jika tidak ditentukan, FQDN host lokal digunakan. Dalam hal ini, nama host adalah sql1 dan FQDN adalah sql1.contoso.com.
    • -p: Port yang digunakan untuk menghasilkan SPN. Jika tidak ditentukan, SPN dihasilkan tanpa port. Koneksi SQL hanya akan berfungsi dalam kasus ini ketika SQL Server mendengarkan port default, 1433.

Membuat file keytab layanan SQL Server menggunakan mssql-conf

Anda dapat menginstal adutil dan mengintegrasikannya dengan mssql-conf, untuk membuat dan mengonfigurasi keytab menggunakan mssql-conf secara langsung. Ini adalah metode yang disukai untuk membuat file keytab layanan SQL Server. Jika tidak, Anda dapat membuat file keytab layanan SQL Server secara manual.

Prasyarat

  1. Pastikan bahwa /var/opt/mssql/mssql.conf file dimiliki oleh mssql dan bukan root. Jika ini tidak terjadi, Anda harus menjalankan perintah mssql-conf menggunakan sudo.

  2. Pada pengendali domain, di pengaturan Direktori Aktif untuk akun network.privilegedadaccount (dalam contoh ini, sqluser@CONTOSO.COM), aktifkan opsi berikut di bawah tab Akun , di bagian Opsi akun:

    • Akun ini mendukung enkripsi Kerberos AES 128 bit
    • Akun ini mendukung enkripsi Kerberos AES 256 bit

Membuat file keytab

Setelah membuat pengguna dan SPN, Anda dapat membuat keytab menggunakan langkah-langkah berikut.

  1. Beralih ke mssql pengguna:

    su mssql
    
  2. Masuk sebagai pengguna Direktori Aktif menggunakan kinit perintah :

    kinit privilegeduser@CONTOSO.COM
    
  3. Buat file keytab:

    /opt/mssql/bin/mssql-conf setup-ad-keytab /var/opt/mssql/secrets/mssql.keytab sqluser
    

    Anda diminta untuk memulai ulang layanan SQL Server untuk mengadopsi konfigurasi Direktori Aktif baru, yang dapat Anda lakukan di bagian berikutnya.

  4. Konfirmasikan bahwa keytab dibuat dengan entri yang tepat:

    klist -kte /var/opt/mssql/secrets/mssql.keytab
    

    Anda akan melihat output yang mirip dengan ini:

    keytab name: FILE:/var/opt/mssql/secrets/mssql.keytab
    KVNO Timestamp           Principal
    ---- ------------------- ------------------------------------------------------
       4 12/30/2021 14:02:08 sqluser@CONTOSO.COM (aes256-cts-hmac-sha1-96)
       4 12/30/2021 14:02:08 MSSQLSvc/sql1.contoso.com:1433@CONTOSO.COM (aes256-cts-hmac-sha1-96)
       4 12/30/2021 14:02:08 MSSQLSvc/sql1.contoso.com@CONTOSO.COM (aes256-cts-hmac-sha1-96)
       4 12/30/2021 14:02:08 MSSQLSvc/sql1:1433@CONTOSO.COM (aes256-cts-hmac-sha1-96)
       4 12/30/2021 14:02:08 MSSQLSvc/sql1@CONTOSO.COM (aes256-cts-hmac-sha1-96)
    

    Catatan

    /var/opt/mssql/mssql.conf Jika file tidak dimiliki oleh mssql, Anda harus mengonfigurasi mssql-conf untuk mengatur nilai network.kerberoskeytabfile dan network.privilegedadaccount sesuai dengan langkah-langkah sebelumnya. Ketik kata sandi saat diminta.

    /opt/mssql/bin/mssql-conf set network.kerberoskeytabfile /var/opt/mssql/secrets/mssql.keytab
    /opt/mssql/bin/mssql-conf set network.privilegedadaccount sqluser
    
  5. Validasi konfigurasi Anda untuk memastikan bahwa autentikasi Direktori Aktif berfungsi tanpa masalah.

    /opt/mssql/bin/mssql-conf validate-ad-config /var/opt/mssql/secrets/mssql.keytab
    

    Anda harus melihat output yang mirip dengan berikut ini:

    Detected Configuration:
    Default Realm: CONTOSO.COM
    Keytab: /var/opt/mssql/secrets/mssql.keytab
    Reverse DNS Result: sql1.contoso.com
    SQL Server Port: 1433
    Detected SPNs (SPN, KVNO):
    (MSSQLSvc/sql1.CONTOSO.COM:1433, 4)
    (MSSQLSvc/sql1.CONTOSO.COM, 4)
    (MSSQLSvc/sql1:1433, 4)
    (MSSQLSvc/sql1, 4)
    Privileged Account (Name, KVNO):
    (sqluser, 4)
    

Membuat file keytab layanan SQL Server secara manual

Jika Anda menginstal adutil dan mengintegrasikannya dengan mssql-conf, Anda dapat melompat ke depan untuk Membuat file keytab layanan SQL Server menggunakan mssql-conf.

  1. Buat file keytab yang berisi entri untuk masing-masing dari empat SPN yang dibuat sebelumnya, dan satu untuk pengguna.

    adutil keytab createauto -k /var/opt/mssql/secrets/mssql.keytab -p 1433 -H sql1.contoso.com --password 'P@ssw0rd' -s MSSQLSvc
    

    Opsi baris perintah yang mungkin adalah:

    • -k: Jalur tempat mssql.keytab file dibuat. Dalam contoh di atas, direktori /var/opt/mssql/secrets/ harus sudah ada di host.
    • -p: Port yang digunakan untuk menghasilkan SPN. Jika tidak ditentukan, SPN dihasilkan tanpa port.
    • -H: Nama host yang digunakan untuk menghasilkan SPN. Jika tidak ditentukan, FQDN host lokal digunakan. Dalam hal ini, nama host adalah sql1 dan FQDN adalah sql1.contoso.com.
    • -s: Nama layanan yang digunakan untuk menghasilkan SPN. Untuk contoh ini, nama layanan SQL Server adalah MSSQLSvc.
    • --password: Kata sandi akun pengguna Active Directory istimewa yang dibuat sebelumnya.
    • -e atau --enctype: Jenis enkripsi untuk entri keytab. Gunakan daftar nilai yang dipisahkan koma. Jika tidak ditentukan, perintah interaktif akan disajikan.

    Anda dapat memilih lebih dari satu jenis enkripsi, selama host dan domain Anda mendukung jenis enkripsi. Dalam contoh ini, Anda dapat memilih aes256-cts-hmac-sha1-96 dan aes128-cts-hmac-sha1-96. Namun, Anda harus menghindari arcfour-hmac di lingkungan produksi karena memiliki enkripsi yang lemah.

    Jika Anda ingin memilih jenis enkripsi tanpa meminta, Anda dapat menentukan pilihan jenis enkripsi menggunakan -e argumen dalam perintah di atas. Untuk bantuan selengkapnya tentang opsi, jalankan adutil keytab perintah ini:

    adutil keytab createauto --help
    
  2. Tambahkan entri di keytab untuk nama utama dan kata sandi yang digunakan SQL Server untuk menyambungkan ke Direktori Aktif:

    adutil keytab create -k /var/opt/mssql/secrets/mssql.keytab -p sqluser --password 'P@ssw0rd'
    
    • -k: Jalur tempat Anda ingin membuat mssql.keytab file.
    • -p: Prinsipal untuk ditambahkan ke keytab.

    adutil keytab [ create | autocreate ] Tidak menimpa file sebelumnya, itu hanya menambahkan ke file jika sudah ada.

  3. Pastikan keytab yang dibuat dimiliki oleh mssql pengguna, dan hanya mssql pengguna yang memiliki akses baca/tulis ke file. Anda dapat menjalankan chown perintah dan chmod sebagai berikut:

    chown mssql /var/opt/mssql/secrets/mssql.keytab
    chmod 440 /var/opt/mssql/secrets/mssql.keytab
    

Mengonfigurasi SQL Server untuk menggunakan keytab

Jalankan perintah di bawah ini untuk mengonfigurasi SQL Server untuk menggunakan keytab yang dibuat pada langkah sebelumnya, dan atur akun Active Directory istimewa sebagai pengguna yang dibuat sebelumnya. Dalam contoh kami, nama pengguna adalah sqluser.

/opt/mssql/bin/mssql-conf set network.kerberoskeytabfile /var/opt/mssql/secrets/mssql.keytab
/opt/mssql/bin/mssql-conf set network.privilegedadaccount sqluser

Mulai ulang SQL Server

Jalankan perintah di bawah ini untuk memulai ulang layanan SQL Server:

sudo systemctl restart mssql-server

Membuat login SQL Server berbasis Direktori Aktif di Transact-SQL

Koneksi ke SQL Server dan jalankan perintah berikut untuk membuat login, untuk mengonfirmasi bahwa itu tercantum.

CREATE LOGIN [contoso\privilegeduser] FROM WINDOWS;
SELECT name FROM sys.server_principals;

Koneksi ke SQL Server menggunakan autentikasi Direktori Aktif

Untuk menyambungkan menggunakan SSMS atau Azure Data Studio, masuk ke SQL Server dengan kredensial Windows Anda.

Anda juga dapat menggunakan alat seperti sqlcmd untuk menyambungkan ke SQL Server menggunakan Autentikasi Windows.

sqlcmd -E -S 'sql1.contoso.com'