Bagikan melalui


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

Berlaku untuk:SQL Server di Linux

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

Catatan

Untuk panduan saat ini tentang konfigurasi jaringan, lihat dokumentasi untuk sistem operasi (OS) Anda.

Tutorial ini terdiri dari tugas-tugas berikut:

  • Menginstal adutil
  • Gabungkan host Linux ke domain Active Directory
  • Buat pengguna Direktori Aktif untuk SQL Server dan atur Nama Prinsipal Layanan (SPN) menggunakan alat adutil
  • Membuat file keytab layanan SQL Server
  • Buat file mssql.conf dan krb5.conf yang akan digunakan oleh kontainer SQL Server
  • Pasang file konfigurasi dan sebarkan kontainer SQL Server
  • Membuat login SQL Server berbasis Direktori Aktif menggunakan Transact-SQL
  • Menyambungkan ke SQL Server menggunakan autentikasi Direktori Aktif

Prasyarat

Berikut ini diperlukan sebelum mengonfigurasi autentikasi Direktori Aktif:

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

Penyebaran dan persiapan kontainer

Untuk menyiapkan kontainer, Anda perlu 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 panduan cepat kami, Panduan Cepat: Menjalankan gambar kontainer SQL Server Linux dengan Docker.

Saat Mendaftarkan Nama Perwakilan Layanan (SPN), Anda dapat menggunakan nama host komputer atau nama kontainer. Namun, Anda harus mengonfigurasinya sesuai dengan apa yang ingin Anda lihat, saat Anda terhubung ke kontainer secara eksternal.

Pastikan ada entri host penerusan (A) yang ditambahkan di Direktori Aktif untuk alamat IP host Linux, pemetaan ke nama kontainer SQL Server. Dalam tutorial ini, alamat sql1 IP komputer host adalah 10.0.0.10, dan nama kontainer SQL Server saya adalah sql1. Tambahkan entri host penerusan di Direktori Aktif, seperti yang ditunjukkan pada cuplikan layar. Entri memastikan bahwa ketika pengguna terhubung ke sql1.contoso.com, sambungan mengarah ke host yang benar.

Cuplikan layar dari menambahkan catatan host.

Untuk tutorial ini, kami menggunakan lingkungan di Azure dengan tiga komputer virtual (VM). Satu VM bertindak sebagai pengendali domain Windows (DC), dengan nama contoso.com domain. Pengendali Domain diberi nama adVM.contoso.com. Komputer kedua adalah komputer Windows yang disebut winbox, menjalankan desktop Windows 10, yang digunakan sebagai kotak klien dan telah menginstal SQL Server Management Studio (SSMS). Komputer ketiga adalah komputer Ubuntu 18.04 LTS bernama sql1, yang menghosting kontainer SQL Server. Semua komputer digabungkan ke contoso.com domain. Untuk informasi selengkapnya, lihat Bergabung dengan SQL Server di host Linux ke domain Active Directory.

Catatan

Menggabungkan mesin kontainer host ke dalam domain tidak wajib, seperti yang dapat Anda lihat nanti di artikel ini.

Menginstal adutil

Untuk menginstal adutil, ikuti langkah-langkah dalam Pengenalan utilitas adutil - Direktori Aktif, pada komputer host yang bergabung ke domain.

Membuat pengguna Active Directory, SPN, dan keytab layanan SQL Server

Jika Anda tidak ingin host kontainer menjadi bagian dari domain, dan tidak mengikuti langkah-langkah untuk bergabung dengan komputer ke domain, Anda harus mengikuti langkah-langkah ini di komputer Linux lain yang sudah menjadi bagian dari domain Direktori Aktif:

  1. Buat pengguna Direktori Aktif untuk SQL Server dan atur SPN menggunakan adutil.

  2. Buat dan konfigurasikan file keytab layanan SQL Server.

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

Buat pengguna Direktori Aktif untuk SQL Server dan atur Nama Perwakilan Layanan dengan adutil

Mengaktifkan autentikasi Direktori Aktif di SQL Server pada kontainer Linux memerlukan langkah-langkah berikut untuk dijalankan pada komputer Linux yang merupakan bagian dari domain Direktori Aktif.

  1. Dapatkan atau perbarui Kerberos TGT (tiket pemberi tiket) menggunakan perintah kinit. Gunakan akun istimewa untuk perintah kinit. Akun harus memiliki izin untuk menyambungkan 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 adutil, buat pengguna baru yang akan digunakan sebagai akun Active Directory istimewa oleh SQL Server. Ganti <password> dengan kata sandi yang valid.

    adutil user create --name sqluser --distname CN=sqluser,CN=Users,DC=CONTOSO,DC=COM --password '<password>'
    

    Kata sandi mungkin ditentukan dengan salah satu dari tiga cara:

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

    Prioritas metode entri kata sandi mengikuti urutan opsi yang tercantum di atas. Opsi yang direkomendasikan 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 khusus (-distname) seperti yang ditunjukkan di atas, atau Anda juga 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 pengguna yang disebutkan sebelumnya. 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
    
    • addauto akan membuat SPN secara otomatis, asalkan hak istimewa yang memadai tersedia 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. 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 dihasilkan tanpa port. Koneksi 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 empat 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, asalkan keytab yang dihasilkan dipasang dengan benar saat Anda menggunakan docker/podman untuk menyebarkan kontainer.

Untuk membuat keytab untuk semua SPN, kita dapat menggunakan opsi createauto. Ganti <password> dengan kata sandi yang valid.

adutil keytab createauto -k /container/sql1/secrets/mssql.keytab -p 5433 -H sql1.contoso.com --password '<password>' -s MSSQLSvc
  • -k: Jalur tempat Anda ingin mssql.keytab file dibuat. Dalam contoh sebelumnya, direktori /container/sql1/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. 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 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.

Saat diberi 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 jenis enkripsi pilihan Anda dengan argumen -e dalam perintah di atas. Untuk bantuan lebih lanjut mengenai perintah adutil, jalankan perintah berikut.

adutil keytab createauto --help

Perhatian

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

Untuk membuat keytab untuk pengguna, perintahnya adalah sebagai berikut. Ganti <password> dengan kata sandi yang valid.

adutil keytab create -k /container/sql1/secrets/mssql.keytab -p sqluser --password '<password>'
  • -k: Jalur tempat Anda ingin mssql.keytab file dibuat. Dalam contoh sebelumnya, direktori /container/sql1/secrets harus sudah ada di host.
  • -p: Prinsipal untuk ditambahkan ke keytab.

Perintah adutil keytab create/autocreate tidak menimpa file sebelumnya; melainkan menambahkan ke file jika sudah ada.

Pastikan keytab yang dibuat memiliki izin yang tepat yang ditetapkan saat menyebarkan kontainer.

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

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 Server akan disebarkan, maka ikuti 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 Direktori Aktif. File ini dapat dibuat di mana saja pada host dan perlu dipasang dengan benar selama perintah jalankan docker. Dalam contoh ini, kami menempatkan file mssql.conf ini di bawah /container/sql1, yang merupakan direktori kontainer kami. Konten dari mssql.conf ditampilkan sebagai berikut:

    [network]
    privilegedadaccount = sqluser
    kerberoskeytabfile = /var/opt/mssql/secrets/mssql.keytab
    
    • privilegedadaccount: Pengguna Active Directory istimewa yang digunakan untuk autentikasi Active Directory.
    • kerberoskeytabfile: Jalur dalam kontainer tempat mssql.keytab file akan berada.
  2. Buat krb5.conf file, seperti sampel berikut. Casing penting dalam file-file ini.

    [libdefaults]
    default_realm = CONTOSO.COM
    default_keytab_name = /var/opt/mssql/secrets/mssql.keytab
    default_ccache_name = ""
    
    [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. Saat kontainer dimulai, pengguna memerlukan akses ke jalur folder yang dibuat. Dalam contoh ini, kami memberikan izin berikut yang diberikan pada jalur folder:

    sudo chmod 755 /container/sql1/
    

Memasang file konfigurasi dan menyebarkan kontainer SQL Server

Jalankan kontainer SQL Server Anda, dan pasang file konfigurasi Direktori Aktif yang benar yang sebelumnya dibuat:

Penting

Variabel SA_PASSWORD lingkungan tidak digunakan lagi. Gunakan MSSQL_SA_PASSWORD sebagai gantinya.

sudo docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" \
-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

Perhatian

Kata sandi Anda harus mengikuti kebijakan kata sandi default SQL Server. Secara default, kata sandi harus panjangnya minimal delapan karakter dan berisi karakter dari tiga dari empat set berikut: huruf besar, huruf kecil, digit dasar-10, dan simbol. Panjang kata sandi bisa hingga 128 karakter. Gunakan kata sandi yang panjang dan kompleks mungkin.

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

Contoh kami akan berisi perintah berikut. Ganti <password> dengan kata sandi yang valid.

sudo docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -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
  • File mssql.conf dan krb5.conf terletak di jalur /container/sql1 file host.
  • mssql.keytab yang dibuat terletak di file host pada jalur /container/sql1/secrets.
  • Karena komputer host kami ada di Azure, detail Direktori Aktif perlu ditambahkan ke docker run perintah dalam urutan yang sama. Dalam contoh kami, pengendali adVM domain berada di domain contoso.com, dengan alamat IP .10.0.0.4 Pengendali domain menjalankan DNS dan KDC.

Membuat login SQL Server berbasis Direktori Aktif menggunakan Transact-SQL

Sambungkan ke kontainer SQL Server. Dengan menggunakan perintah berikut, buat login dan konfirmasikan bahwa itu ada.

Catatan

Anda dapat terhubung ke instans SQL Server menggunakan alat klien SQL Server yang sudah dikenal, seperti sqlcmd, SQL Server Management Studio (SSMS), atau ekstensi MSSQL untuk Visual Studio Code.

CREATE LOGIN [contoso\amvin]
    FROM WINDOWS;

SELECT name
FROM sys.server_principals;

Menyambungkan ke SQL Server dengan autentikasi Direktori Aktif

Anda dapat terhubung ke instans SQL Server menggunakan alat klien SQL Server yang sudah dikenal, seperti sqlcmd, SQL Server Management Studio (SSMS), atau ekstensi MSSQL untuk Visual Studio Code.

Masuk ke SQL Server dengan kredensial Windows menggunakan nama SQL Server dan nomor port (nama bisa menjadi nama kontainer atau nama host). Misalnya, nama servernya adalah sql1.contoso.com,5433.

Perintah berikut menunjukkan cara menyambungkan ke kontainer Anda dengan sqlcmd.

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

Sumber