Tutorial: Mengonfigurasi autentikasi Direktori Aktif dengan SQL Server pada kontainer Linux

Tutorial ini menjelaskan cara mengonfigurasi SQL Server pada kontainer Linux untuk mendukung autentikasi Direktori Aktif (AD), juga dikenal sebagai autentikasi terintegrasi. Untuk gambaran umum, lihat Autentikasi Direktori Aktif untuk SQL Server di Linux.

Tutorial ini terdiri dari tugas-tugas berikut:

  • Menginstal adutil
  • Bergabung dengan host Linux ke domain AD
  • Membuat pengguna AD untuk SQL Server dan mengatur ServicePrincipalName (SPN) menggunakan alat adutil
  • Membuat file keytab layanan SQL Server
  • Buat file mssql.conf dan krb5.conf untuk digunakan oleh kontainer SQL Server
  • Pasang file konfigurasi dan sebarkan kontainer SQL Server
  • Membuat login SQL Server berbasis AD menggunakan Transact-SQL
  • Menyambungkan ke SQL Server menggunakan autentikasi AD

Prasyarat

Berikut ini diperlukan sebelum mengonfigurasi autentikasi AD:

  • Memiliki Pengendali Domain AD (Windows) di jaringan Anda.
  • Instal alat adutil pada komputer host Linux, yang bergabung ke domain. Ikuti bagian Instal adutil di bawah ini untuk detailnya.

Penyebaran dan persiapan kontainer

Untuk menyiapkan kontainer, Anda harus mengetahui terlebih dahulu port yang akan digunakan oleh kontainer pada host. Port default, 1433, mungkin dipetakan secara berbeda pada host kontainer Anda. Untuk tutorial ini, port 5433 pada host akan dipetakan ke port 1433 kontainer. Untuk informasi selengkapnya, lihat mulai cepat kami, Jalankan SQL Server gambar kontainer dengan Docker

Saat mendaftarkan Nama Prinsipal Layanan (SPN), Anda dapat menggunakan nama host komputer atau nama kontainer, tetapi Anda harus mengaturnya sesuai dengan apa yang ingin Anda lihat saat terhubung ke kontainer secara eksternal.

Pastikan ada entri penerusan host (A) yang ditambahkan di Direktori Aktif untuk alamat IP host Linux, pemetaan ke nama kontainer SQL Server. Dalam tutorial ini, alamat myubuntu IP komputer host adalah 10.0.0.10, dan nama kontainer SQL Server saya adalah sql1. Kami menambahkan entri host penerusan di Direktori Aktif seperti yang ditunjukkan di bawah ini. Entri memastikan bahwa ketika pengguna terhubung ke sql1.contoso.com, itu mencapai host yang tepat.

tambahkan catatan host

Untuk tutorial ini, kita menggunakan lingkungan di Azure dengan tiga VM. Satu VM bertindak sebagai pengendali domain Windows (DC), dengan nama contoso.comdomain . Pengendali Domain diberi nama adVM.contoso.com. Komputer kedua adalah komputer Windows yang disebut winbox, berjalan Windows 10 desktop, yang digunakan sebagai kotak klien dan telah menginstal SQL Server Management Studio (SSMS). Komputer ketiga adalah mesin Ubuntu 18.04 LTS bernama myubuntu, yang menghosting kontainer SQL Server. Semua komputer telah bergabung ke contoso.com domain. Untuk informasi selengkapnya, lihat Menggabungkan SQL Server pada host Linux ke domain Direktori Aktif.

Catatan

Bergabung dengan komputer kontainer host ke domain tidak wajib, seperti yang dapat Anda lihat nanti di artikel ini.

Menginstal adutil

Untuk menginstal alat adutil, ikuti langkah-langkah yang dijelaskan dalam:Pengantar utilitas adutil - Direktori Aktif pada komputer host yang bergabung dengan domain.

Membuat pengguna AD, SPN, dan SQL Server keytab layanan

Jika Anda tidak ingin SQL Server di host kontainer Linux menjadi bagian dari domain, dan belum mengikuti langkah-langkah untuk bergabung dengan komputer ke domain, maka pada komputer Linux lain yang sudah menjadi bagian dari domain AD, ikuti langkah-langkah di bawah ini:

  1. Buat pengguna AD untuk SQL Server dan atur SPN menggunakan alat adutil.

  2. Buat dan konfigurasikan file keytab layanan SQL Server.

Salin file mssql.keytab yang dibuat ke komputer host yang akan menjalankan kontainer SQL Server, dan mengonfigurasi kontainer untuk menggunakan mssql.keytab yang disalin. Secara opsional, Anda juga dapat bergabung dengan host Linux yang akan menjalankan kontainer SQL Server ke domain AD dan mengikuti langkah-langkah di bawah ini pada komputer yang sama.

Membuat pengguna AD untuk SQL Server dan mengatur ServicePrincipalName menggunakan alat adutil

Mengaktifkan autentikasi AD pada SQL Server pada kontainer Linux memerlukan langkah 1-3 yang disebutkan di bawah ini untuk dijalankan pada komputer Linux yang merupakan bagian dari domain AD.

  1. Dapatkan atau perbarui Kerberos TGT (tiket pemberian tiket) menggunakan kinit perintah . Gunakan akun istimewa untuk kinit perintah . Akun harus memiliki izin untuk terhubung ke domain, dan juga harus dapat membuat akun dan SPN di domain.

    Dalam contoh skrip ini, pengguna istimewa yang disebut privilegeduser@CONTOSO.COM telah dibuat pada pengontrol domain.

    kinit privilegeduser@CONTOSO.COM
    
  2. Dengan menggunakan alat adutil, buat pengguna baru yang akan digunakan sebagai Akun AD istimewa oleh SQL Server.

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

    Catatan

    Kata sandi dapat ditentukan dengan salah satu dari tiga cara:

    • Bendera kata sandi: --kata sandi <>
    • Variabel lingkungan - ADUTIL_ACCOUNT_PWD
    • Input interaktif

    Prioritas metode entri kata sandi mengikuti urutan opsi yang tercantum di atas. Opsi yang disarankan adalah menyediakan kata sandi menggunakan variabel Lingkungan atau input interaktif, karena lebih aman dibandingkan dengan bendera kata sandi.

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

    adutil user create --help
    
  3. Daftarkan SPN ke pengguna yang dibuat di atas. Anda dapat menggunakan nama komputer host alih-alih nama kontainer jika diinginkan, tergantung pada bagaimana Anda ingin koneksi terlihat secara eksternal. Dalam tutorial ini, port 5433 digunakan alih-alih 1433. Ini adalah pemetaan port untuk kontainer. Nomor port Anda bisa berbeda.

    adutil spn addauto -n sqluser -s MSSQLSvc -H sql1.contoso.com -p 5433
    

    Catatan

    • addauto akan membuat SPN secara otomatis, yang diberikan hak istimewa yang memadai ada untuk akun kinit.
    • -n: Nama akun tempat SPN akan ditetapkan.
    • -s: Nama layanan yang digunakan untuk menghasilkan SPN. Dalam hal ini, ini untuk layanan SQL Server, dan karenanya nama layanannya adalah MSSQLSvc.
    • -H: Nama host yang digunakan untuk menghasilkan SPN. Jika tidak ditentukan, FQDN host lokal akan digunakan. Harap berikan FQDN untuk nama kontainer juga. Dalam hal ini, nama kontainer adalah sql1 dan FQDN adalah sql1.contoso.com.
    • -p: Port yang digunakan untuk menghasilkan SPN. Jika tidak ditentukan, SPN akan dihasilkan tanpa port. Koneksi SQL hanya akan berfungsi dalam kasus ini ketika SQL Server mendengarkan port default, 1433.

Membuat file keytab layanan SQL Server

Buat file keytab yang berisi entri untuk masing-masing dari 4 SPN yang dibuat sebelumnya, dan satu untuk pengguna. File keytab akan dipasang ke kontainer, sehingga dapat dibuat di lokasi mana pun di host. Anda dapat mengubah jalur ini dengan aman, selama tab kunci yang dihasilkan dipasang dengan benar saat menggunakan docker/podman untuk menyebarkan kontainer.

Untuk membuat tab kunci untuk semua SPN, kita dapat menggunakan createauto opsi :

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

Catatan

  • -k: Jalur tempat Anda ingin mssql.keytab file dibuat. Dalam contoh di atas direktori "/container/sql1/secrets" harus sudah ada di host.
  • -p: Port yang digunakan untuk menghasilkan SPN. Jika tidak ditentukan, SPN akan dihasilkan tanpa port.
  • -H: Nama host yang digunakan untuk menghasilkan SPN. Jika tidak ditentukan, FQDN host lokal akan digunakan. Harap berikan FQDN untuk nama kontainer juga. Dalam hal ini, nama kontainer adalah sql1 dan FQDN adalah sql1.contoso.com.
  • -s: Nama layanan yang digunakan untuk menghasilkan SPN. Dalam hal ini, ini untuk layanan SQL Server, dan karenanya nama layanannya adalah MSSQLSvc.
  • --password: Ini adalah kata sandi akun pengguna AD 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.

Ketika diberikan pilihan untuk memilih jenis enkripsi, Anda dapat memilih lebih dari satu. Untuk contoh ini, kami memilih aes256-cts-hmac-sha1-96 dan arcfour-hmac. Pastikan Anda memilih jenis enkripsi yang didukung oleh host dan domain.

Jika Anda ingin memilih jenis enkripsi secara non-interaktif, Anda dapat menentukan pilihan jenis enkripsi dengan argumen -e dalam perintah di atas. Untuk bantuan tambahan pada perintah adutil, jalankan perintah di bawah ini.

adutil keytab createauto --help

Catatan

arcfour-hmac adalah enkripsi yang lemah dan bukan jenis enkripsi yang direkomendasikan untuk digunakan di lingkungan produksi.

Untuk membuat tab kunci untuk pengguna, perintahnya adalah:

adutil keytab create -k /container/sql1/secrets/mssql.keytab -p sqluser --password 'P@ssw0rd'

Catatan

  • -k: Jalur tempat Anda ingin mssql.keytab file dibuat. Dalam contoh di atas direktori "/container/sql1/secrets" harus sudah ada di host.
  • -p: Utama untuk ditambahkan ke tab kunci.

Keytab adutil create/autocreate tidak menimpa file sebelumnya, itu hanya menambahkan ke file jika sudah ada.

Pastikan tab kunci yang dibuat memiliki izin yang tepat yang ditetapkan saat menyebarkan kontainer.

chmod 440 /container/sql1/secrets/mssql.keytab

Catatan

Pada titik ini, Anda dapat menyalin mssql.keytab dari host Linux saat ini ke host Linux tempat Anda akan menyebarkan kontainer SQL Server, dan mengikuti langkah-langkah lainnya pada host Linux yang akan menjalankan kontainer SQL Server. Jika langkah-langkah di atas dilakukan pada host Linux yang sama tempat Kontainer SQL akan disebarkan, maka ikuti langkah-langkah berikutnya juga pada host yang sama.

Membuat file konfigurasi yang akan digunakan oleh kontainer SQL Server

  1. Buat mssql.conf file dengan pengaturan untuk AD. File ini dapat dibuat di mana saja pada host dan perlu dipasang dengan benar selama perintah docker run. Dalam contoh ini, kami menempatkan file mssql.conf ini di bawah /container/sql1, yang merupakan direktori kontainer kami. Kontennya seperti yang ditunjukkan mssql.conf di bawah ini:

    [network]
    privilegedadaccount = sqluser
    kerberoskeytabfile = /var/opt/mssql/secrets/mssql.keytab
    

    Catatan

    • privilegedadaccount: Pengguna AD istimewa yang akan digunakan untuk autentikasi AD.
    • kerberoskeytabfile: Jalur dalam kontainer tempat file mssql.keytab akan berada.
  2. Buat file krb5.conf. Berikut adalah sampel yang ditunjukkan di bawah ini. Casing penting pada file-file ini.

    [libdefaults]
    default_realm = CONTOSO.COM
    
    [realms]
    CONTOSO.COM = {
        kdc = adVM.contoso.com
        admin_server = adVM.contoso.com
        default_domain = CONTOSO.COM
    }
    
    [domain_realm]
    .contoso.com = CONTOSO.COM
    contoso.com = CONTOSO.COM
    
  3. Salin semua file, mssql.conf, krb5.conf, mssql.keytab ke lokasi yang akan dipasang ke kontainer SQL Server. Dalam contoh ini, file-file ini ditempatkan pada host di lokasi berikut: mssql.conf dan krb5.conf di /container/sql1/. mssql.keytab ditempatkan di lokasi /container/sql1/secrets/.

  4. Pastikan ada cukup izin pada folder ini untuk pengguna yang menjalankan perintah docker/podman. Ketika kontainer dimulai, pengguna memerlukan akses ke jalur folder yang dibuat. Dalam contoh ini, kami memberikan izin di bawah ini yang diberikan ke jalur folder:

    sudo chmod 755 /container/sql1/
    

Pasang file konfigurasi dan sebarkan kontainer SQL Server

Jalankan kontainer SQL Server Anda, dan pasang file konfigurasi AD yang benar yang sebelumnya dibuat seperti yang ditunjukkan di bawah ini:

Penting

Variabel SA_PASSWORD lingkungan tidak digunakan lagi. Harap gunakan MSSQL_SA_PASSWORD sebagai gantinya.

sudo docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=\<YourStrong@Passw0rd\>" \
-p 5433:1433 --name sql1 \
-v /container/sql1:/var/opt/mssql \
-v /container/sql1/krb5.conf:/etc/krb5.conf \
-d mcr.microsoft.com/mssql/server:2019-latest

Catatan

Saat menjalankan kontainer pada LSM (Modul Keamanan Linux) seperti host yang diaktifkan SELinux, Anda perlu memasang volume menggunakan Z opsi , yang memberi tahu docker untuk memberi label konten dengan label privat yang tidak dibagikan. Untuk informasi selengkapnya, lihat mengonfigurasi label LINUX SE.

Contoh kami akan berisi perintah berikut:

sudo docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=P@ssw0rd" -p 5433:1433 --name sql1 \
-v /container/sql1:/var/opt/mssql/ \
-v /container/sql1/krb5.conf:/etc/krb5.conf \
--dns-search contoso.com \
--dns 10.0.0.4 \
--add-host adVM.contoso.com:10.0.0.4 \
--add-host contoso.com:10.0.0.4 \
--add-host contoso:10.0.0.4 \
-d mcr.microsoft.com/mssql/server:2019-latest

Catatan

  • File mssql.conf dan krb5.conf terletak di jalur /container/sql1file host .
  • mssql.keytab Yang dibuat terletak di jalur /container/sql1/secretsfile host .
  • Karena komputer host kami ada di Azure, detail AD dalam urutan yang sama perlu ditambahkan ke perintah eksekusi docker. Dalam contoh kami, pengendali adVM domain berada di domain contoso.com, dengan alamat 10.0.0.4IP . Pengendali domain menjalankan DNS dan KDC.

Membuat login SQL Server berbasis AD di Transact-SQL

Sambungkan ke kontainer SQL dan jalankan perintah berikut untuk membuat login, dan konfirmasikan bahwa itu tercantum. Anda dapat menjalankan perintah ini dari komputer klien (Windows atau Linux) yang menjalankan SSMS, Azure Data Studio (ADS), atau alat antarmuka baris perintah (CLI) lainnya.

create login [contoso\amvin] From Windows
SELECT name FROM sys.server_principals;

Menyambungkan ke SQL Server menggunakan autentikasi AD

Untuk menyambungkan menggunakan SSMS atau ADS, masuk ke SQL Server dengan kredensial Windows menggunakan nama SQL Server dan nomor port (nama bisa menjadi nama kontainer atau nama host). Misalnya, nama server adalah sql1.contoso.com, 5433.

Anda juga dapat menggunakan alat seperti sqlcmd untuk terhubung ke SQL Server dalam kontainer Anda.

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

Sumber

Langkah berikutnya