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

Berlaku untuk:SQL Server - 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
  • Bergabung dengan host Linux ke domain Direktori Aktif
  • Buat pengguna Direktori Aktif untuk SQL Server dan atur Nama Prinsipal Layanan (SPN) menggunakan alat adutil
  • Membuat file keytab layanan SQL Server
  • Membuat file dan krb5.conf yang mssql.conf akan digunakan oleh kontainer SQL Server
  • Pasang file konfigurasi dan sebarkan kontainer SQL Server
  • Membuat login SQL Server berbasis Direktori Aktif menggunakan Transact-SQL
  • Koneksi 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 mulai cepat kami, Mulai 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, itu mencapai host yang tepat.

Screenshot of adding a host record.

Untuk tutorial ini, kami menggunakan lingkungan di Azure dengan tiga komputer virtual (VM). Satu VM bertindak sebagai pengontrol domain Windows (DC), dengan nama contoso.comdomain . 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 Direktori Aktif.

Catatan

Bergabung dengan komputer kontainer host ke domain tidak wajib, seperti yang 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 pemberian tiket) menggunakan kinit perintah . 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.

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

    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 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
    
    • addauto akan membuat SPN secara otomatis, dengan 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. 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 dengan aman mengubah jalur ini, selama keytab yang dihasilkan dipasang dengan benar saat menggunakan docker/podman untuk menyebarkan kontainer.

Untuk membuat keytab 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
  • -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 tambahan pada 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:

adutil keytab create -k /container/sql1/secrets/mssql.keytab -p sqluser --password 'P@ssw0rd'
  • -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.

Pembuatan /pembuatan otomatis keytab adutil tidak menimpa file sebelumnya; tambahkan 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 ditampilkan mssql.conf sebagai berikut:

    [network]
    privilegedadaccount = sqluser
    kerberoskeytabfile = /var/opt/mssql/secrets/mssql.keytab
    
    • privilegedadaccount: Pengguna Active Directory istimewa untuk digunakan untuk autentikasi Direktori Aktif.
    • 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
    
    [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 di bawah ini yang diberikan ke 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=<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 SE Linux.

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
  • File mssql.conf dan krb5.conf terletak di jalur /container/sql1file host .
  • Yang mssql.keytab dibuat terletak di jalur /container/sql1/secretsfile host .
  • 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

Koneksi ke kontainer SQL Server. Dengan menggunakan perintah berikut, buat login dan konfirmasikan bahwa itu ada. Anda dapat menjalankan perintah ini dari komputer klien (Windows atau Linux) yang menjalankan SSMS, Azure Data Studio, atau alat antarmuka baris perintah (CLI) lainnya.

CREATE LOGIN [contoso\amvin] FROM WINDOWS;

SELECT name FROM sys.server_principals;

Koneksi ke SQL Server dengan autentikasi Direktori Aktif

Untuk menyambungkan menggunakan SQL Server Management Studio (SSMS) atau Azure Data Studio, 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.

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

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

Sumber daya