Öğretici: Linux kapsayıcılarında SQL Server ile Active Directory kimlik doğrulamayı yapılandırma

Şunlar için geçerlidir:Linux üzerinde SQL Server

Bu öğreticide, tümleşik kimlik doğrulaması olarak da bilinen Active Directory kimlik doğrulamasını desteklemek için Linux kapsayıcılarında SQL Server'ın nasıl yapılandırılır açıklanmaktadır. Genel bakış için bkz. Linux üzerinde SQL Server için Active Directory kimlik doğrulaması.

Note

Ağ yapılandırması hakkında geçerli yönergeler için işletim sisteminizin (işletim sistemi) belgelerine bakın.

Bu öğretici aşağıdaki görevlerden oluşur:

  • adutil yükle
  • Bir Linux barındırmasını Active Directory alanına birleştirin
  • SQL Server için Active Directory kullanıcı oluşturma ve adutil aracını kullanarak Hizmet Asıl Adı'nı (SPN) ayarlama
  • SQL Server hizmet anahtar sekmesi dosyasını oluşturma
  • SQL Server kapsayıcısı tarafından kullanılacak mssql.conf ve krb5.conf dosyalarını oluşturma
  • Yapılandırma dosyalarını bağlayın ve SQL Server kapsayıcısını dağıtın
  • Transact-SQL kullanarak Active Directory tabanlı SQL Server oturum açma bilgileri oluşturma
  • Active Directory kimlik doğrulamasını kullanarak SQL Server'a bağlanma

Prerequisites

Active Directory kimlik doğrulamasını yapılandırmadan önce aşağıdakiler gereklidir:

  • Ağınızda bir Active Directory Etki Alanı Denetleyicisi (Windows) var.
  • Bir etki alanına katılmış bir Linux konak makinesine yükleyin adutil . Ayrıntılar için adutil yükleme bölümünü izleyin.

Konteyner dağıtımı ve hazırlığı

Kapsayıcınızı ayarlamak için, konaktaki kapsayıcı tarafından kullanılacak bağlantı noktasını önceden bilmeniz gerekir. 1433varsayılan bağlantı noktası kapsayıcı konağınızda farklı şekilde eşlenebilir. Bu öğreticide, konak üzerindeki bağlantı noktası 5433, kapsayıcının bağlantı noktası 1433 olarak eşlenmiş olacak. Daha fazla bilgi için hızlı başlangıç Hızlı Başlangıç: Dockerile SQL Server Linux kapsayıcı görüntülerini çalıştırma bölümüne bakın.

Hizmet Asıl Adları'nı (SPN) kaydettiğinizde, makinenin ana bilgisayar adını veya kapsayıcının adını kullanabilirsiniz. Ancak, kapsayıcıya dışarıdan bağlandığınızda, bunu görmek istediklerinize göre yapılandırmanız gerekir.

Linux ana bilgisayar IP adresi için Active Directory'de SQL Server kapsayıcısının adıyla eşlenen bir iletme konağı (A) girdisi eklendiğinden emin olun. Bu eğitimde, ana makinenin sql1 IP adresi 10.0.0.10, SQL Server konteyner adı sql1ise 'dir. Ekran görüntüsünde gösterildiği gibi, Active Directory'de iletme ana bilgisayar girdisini ekleyin. Giriş, kullanıcılar sql1.contoso.com'a bağlandığında doğru konağa ulaşmalarını sağlar.

Konak kaydı ekleme ekran görüntüsü.

Bu öğretici için Azure'da üç sanal makine (VM) içeren bir ortam kullanıyoruz. Bir VM, alan contoso.com alanı için Windows alan kontrolcüsü (DC) olarak görev yapar. Alan kontrolcüsü olarak adlandırılır adVM.contoso.com. İkinci makine, windows 10 masaüstü çalıştıran ve istemci kutusu olarak kullanılan ve SQL Server Management Studio (SSMS) yüklü olan winboxadlı bir Windows makinesidir. Üçüncü makine, SQL Server kapsayıcılarını barındıran sql1adlı bir Ubuntu 18.04 LTS makinesidir. Tüm makineler contoso.com etki alanına katılır. Daha fazla bilgi için bkz. Linux konağındaki SQL Server'ı Active Directory etki alanınabirleştirme.

Note

Bu makalenin devamında görebileceğiniz gibi konak kapsayıcı makinesinin etki alanına katılması zorunlu değildir.

Adutil'i yükleme

Etki alanına katılmış bir ana makinede, adutil’ı yüklemek için adutil - Active Directory yardımcı programına giriş bölümündeki adımları izleyin.

Active Directory kullanıcısı, SPN'leri (Hizmet Bağlantı Adları) ve SQL Server hizmet keytab'ı oluşturma

Kapsayıcı ana bilgisayarının etki alanının bir parçası olmasını istemiyorsanız ve makineyi etki alanına ekleme adımlarını izlemediyseniz, Active Directory etki alanının parçası olan başka bir Linux makinesinde şu adımları izlemeniz gerekir:

  1. SQL Server için Active Directory bir kullanıcı oluşturun ve adutil kullanarak SPN'yi ayarlayın.

  2. SQL Server hizmet anahtar sekmesi dosyasını oluşturun ve yapılandırın.

Oluşturulan mssql.keytab dosyasını SQL Server kapsayıcısını çalıştıracak konak makineye kopyalayın ve kapsayıcıyı kopyalanan mssql.keytabkullanacak şekilde yapılandırın. İsteğe bağlı olarak, SQL Server kapsayıcısını Active Directory etki alanına çalıştıracak Linux konağınıza katılabilir ve aynı makinede bu adımları izleyebilirsiniz.

SQL Server için Active Directory kullanıcısı oluşturma ve adutil ile Hizmet Asıl Adı ayarlama

Linux kapsayıcılarında SQL Server'da Active Directory kimlik doğrulamasının etkinleştirilmesi, Active Directory etki alanının parçası olan bir Linux makinesinde aşağıdaki adımların çalıştırılmasını gerektirir.

  1. kinit komutunu kullanarak Kerberos TGT'sini (bilet verici bilet) alın veya yenileyin. kinit komutu için ayrıcalıklı bir hesap kullanın. Hesabın etki alanına bağlanma iznine sahip olması ve ayrıca etki alanında hesap ve SPN'ler oluşturabilmesi gerekir.

    Bu örnek betikte, etki alanı denetleyicisinde privilegeduser@CONTOSO.COM adlı ayrıcalıklı bir kullanıcı zaten oluşturulmuştur.

    kinit privilegeduser@CONTOSO.COM
    
  2. adutil kullanarak, SQL Server tarafından ayrıcalıklı Active Directory hesabı olarak kullanılacak yeni kullanıcıyı oluşturun. <password> geçerli bir parolayla değiştirin.

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

    Parolalar şu üç yoldan herhangi birinde belirtilebilir:

    • Parola bayrağı: --password <password>
    • Ortam değişkeni: ADUTIL_ACCOUNT_PWD
    • Etkileşimli giriş

    Parola giriş yöntemlerinin önceliği, yukarıda listelenen seçeneklerin sırasını izler. Önerilen seçenekler, şifre bayrağından daha güvenli olduğu için ortam değişkeni veya etkileşimli girdi kullanılarak şifreyi sağlamaktır.

    Hesap adını yukarıda gösterildiği gibi ayırt edilen isim (--distname) ile belirtebilir veya Organizasyon Birimi (OU) adını kullanabilirsin. OU adı (--ou) her ikisini de belirtirseniz, ayrıştırılmış isimden önceliklidir. Daha fazla detay için aşağıdaki komutu çalıştırın:

    adutil user create --help
    
  3. SPN'leri yukarıda oluşturulan kullanıcıya kaydedin. bağlantının dışarıdan nasıl görünmesini istediğinize bağlı olarak, isterseniz kapsayıcı adı yerine konak makine adını kullanabilirsiniz. Bu öğreticide 5433yerine bağlantı noktası 1433 kullanılır. Kapsayıcının port eşlemesi budur. Bağlantı noktası numaranız farklı olabilir.

    adutil spn addauto -n sqluser -s MSSQLSvc -H sql1.contoso.com -p 5433
    
    • addauto , hesap için kinit yeterli ayrıcalıklar sağlandığında SPN'leri otomatik olarak oluşturur.
    • -n: SPN'lerin atanacağı hesabın adı.
    • -s: SPN oluşturmak için kullanılacak hizmet adı. Bu durumda, SQL Server hizmeti içindir ve bu nedenle hizmet adı MSSQLSvc'dir.
    • -H: SPN oluşturmak için kullanılacak ana bilgisayar adı. Belirtilmediyse, yerel sunucunun tam nitelikli alan adı (FQDN) kullanılır. Kapsayıcı adı için FQDN'yi de sağlayın. Bu durumda, kapsayıcının adı sql1 ve FQDN'si sql1.contoso.com'dir.
    • -p: SPN oluşturmak için kullanılacak bağlantı noktası. Belirtilmezse, SPN'ler bağlantı noktası olmadan oluşturulur. Bağlantılar bu durumda yalnızca SQL Server 1433varsayılan bağlantı noktasını dinlediğinde çalışır.

SQL Server hizmet keytab dosyası oluşturma

Daha önce oluşturulan dört SPN'nin her biri için girdileri ve kullanıcı için bir tane içeren anahtar sekmesi dosyasını oluşturun. Anahtar sekmesi dosyası kapsayıcıya bağlanarak konak üzerindeki herhangi bir konumda oluşturulabilmesini sağlar. Docker veya Podman kullanarak konteyneri dağıtırken ortaya çıkan tuş sekmesi doğru şekilde monte edildiği sürece bu yolu güvenle değiştirebilirsiniz.

Tüm SPN'ler için tuş sekmesini oluşturmak için createauto seçeneğini kullanabiliriz. <password> geçerli bir parolayla değiştirin.

adutil keytab createauto -k /container/sql1/secrets/mssql.keytab -p 5433 -H sql1.contoso.com --password '<password>' -s MSSQLSvc
  • -k: mssql.keytab dosyasının oluşturulmasını istediğiniz yol. Önceki örnekte, /container/sql1/secrets dizini konakta zaten mevcut olmalıdır.
  • -p: SPN oluşturmak için kullanılacak bağlantı noktası. Belirtilmezse, SPN'ler bağlantı noktası olmadan oluşturulur.
  • -H: SPN oluşturmak için kullanılacak ana bilgisayar adı. Belirtilmezse, yerel ana bilgisayarın FQDN'si kullanılır. Kapsayıcı adı için FQDN'yi de sağlayın. Bu durumda, kapsayıcının adı sql1 ve FQDN'si sql1.contoso.com'dir.
  • -s: SPN oluşturmak için kullanılacak hizmet adı. Bu durumda, SQL Server hizmeti içindir ve bu nedenle hizmet adı MSSQLSvc'dir.
  • --password: Bu, daha önce oluşturulmuş ayrıcalıklı Active Directory kullanıcı hesabının parolasıdır.
  • -e veya --enctype: Anahtar sekmesi girdisi için şifreleme türleri. Virgülle ayrılmış bir değer listesi kullanın. Belirtilmezse, etkileşimli bir istem sunulur.

Şifreleme türlerini seçme seçeneği verildiğinde, birden fazla seçim yapabilirsiniz. Bu örnekte aes256-cts-hmac-sha1-96 ve arcfour-hmacseçtik. Sunucu ve etki alanı tarafından desteklenen bir şifreleme türü seçtiğinizden emin olun.

Şifreleme türünü etkileşimsiz seçmek için, önceki komuttaki argümanla -e seçiminizi belirtin. Ek yardım için adutil komutlarıyla ilgili olarak aşağıdaki komutu çalıştırın.

adutil keytab createauto --help

Caution

arcfour-hmac zayıf bir şifrelemedir ve üretim ortamında kullanılması önerilen bir şifreleme türü değildir.

Kullanıcının tuş sekmesini oluşturmak için komutu aşağıdaki gibidir. <password> geçerli bir parolayla değiştirin.

adutil keytab create -k /container/sql1/secrets/mssql.keytab -p sqluser --password '<password>'
  • -k: mssql.keytab dosyasının oluşturulmasını istediğiniz yol. Önceki örnekte, /container/sql1/secrets dizini konakta zaten mevcut olmalıdır.
  • -p: Anahtar sekmesine eklenecek sorumlu.

Keytab adutilcreate ve createauto komutlar mevcut bir dosyanın üzerine yazmaz. Ona kayıt eklerler.

Konteyneri dağıtıma alırken oluşturulan keytab'ın doğru izinlere sahip olduğundan emin olun.

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

Bu noktada, mssql.keytab'ı mevcut Linux konağından SQL Server kapsayıcısını dağıtacağınız Linux konağına kopyalayabilir ve SQL Server kapsayıcısını çalıştıracak olan Linux konağında geri kalan adımları izleyebilirsiniz. Yukarıdaki adımlar SQL Server kapsayıcılarının dağıtılacağı aynı Linux konağı üzerinde gerçekleştirildiyse, aynı konakta da sonraki adımları izleyin.

SQL Server kapsayıcısı tarafından kullanılacak yapılandırma dosyaları oluşturma

  1. Active Directory ayarlarıyla bir mssql.conf dosyası oluşturun. Bu dosya, ana bilgisayarın herhangi bir yerinde oluşturulabilir ve komut sırasında docker run doğru şekilde monte edilmesi gerekir. Bu örnekte, bu dosyayı mssql.conf kapsayıcı dizinimiz olan /container/sql1altına yerleştirdik. mssql.conf içeriği aşağıdaki gibi gösterilir:

    [network]
    privilegedadaccount = sqluser
    kerberoskeytabfile = /var/opt/mssql/secrets/mssql.keytab
    
    • privilegedadaccount: Active Directory kimlik doğrulaması için kullanılacak ayrıcalıklı Active Directory kullanıcısı.
    • kerberoskeytabfile: mssql.keytab dosyasının bulunacağı kapsayıcıdaki yol.
  2. Aşağıdaki örnekte olduğu gibi bir krb5.conf dosyası oluşturun. Bu dosyalarda büyük/küçük harf önemlidir.

    [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. mssql.conf, krb5.confmssql.keytab tüm dosyaları SQL Server kapsayıcısına bağlanacak bir konuma kopyalayın. Bu örnekte, bu dosyalar ana bilgisayara şu konumlarda yerleştirilir: mssql.conf ve krb5.confkonumunda /container/sql1/. mssql.keytab /container/sql1/secrets/konuma yerleştirilir.

  4. Docker veya Podman komutunu çalıştıran kullanıcının bu klasörler üzerinde yeterli izinlere sahip olduğundan emin olun. Kapsayıcı başlatıldığında, kullanıcının oluşturulan klasör yoluna erişmesi gerekir. Bu örnekte, klasör yoluna aşağıdaki izinleri atadık:

    sudo chmod 755 /container/sql1/
    

Yapılandırma dosyalarını montaj ve SQL Server kapsayıcısı dağıtma

SQL Server kapsayıcınızı çalıştırın ve daha önce oluşturulmuş doğru Active Directory yapılandırma dosyalarını bağlayın:

Important

SA_PASSWORD ortam değişkeni kullanım dışıdır. Bunun yerine MSSQL_SA_PASSWORD kullanın.

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

Caution

Parolanız varsayılan SQL Server password ilkesini izlemelidir. Varsayılan olarak, parola en az sekiz karakter uzunluğunda olmalı ve şu dört kümeden üçünün karakterlerini içermelidir: büyük harfler, küçük harfler, 10 tabanındaki basamaklar ve simgeler. Parolalar en çok 128 karakter uzunluğunda olabilir. Mümkün olduğunca uzun ve karmaşık parolalar kullanın.

SELinux gibi bir Linux Güvenlik Modülü (LSM) bulunan bir ana bilgisayarda bir konteyner çalıştırdığınızda, birimleri Z seçeneğini kullanarak bağlayın. Bu seçenek, Docker'a içeriği özel, paylaşılmayan bir etiketle etiketlemesini söyler. Daha fazla bilgi için SELinux etiketini Yapılandır bölümüne bakınız.

Örneğimizde aşağıdaki komutlar yer alır. <password> geçerli bir parolayla değiştirin.

sudo docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 5433:1433 --name sql1 \
-v /container/sql1:/var/opt/mssql/:Z \
-v /container/sql1/krb5.conf:/etc/krb5.conf:Z \
--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
  • mssql.conf ve krb5.conf dosyaları /container/sql1konak dosya yolunda bulunur.
  • Oluşturulan mssql.keytab, /container/sql1/secretsana bilgisayar dosya yolunda bulunur.
  • Konak makinemiz Azure'da olduğundan, Active Directory ayrıntılarının docker run komutuna aynı sırada eklenmesi gerekir. Örneğimizde, etki alanı denetleyicisi adVM, IP adresi contoso.comolan 10.0.0.4etki alanındadır. Etki alanı denetleyicisi DNS ve KDC çalıştırır.

Transact-SQL kullanarak Active Directory tabanlı SQL Server oturum açma bilgileri oluşturma

SQL Server kapsayıcısına bağlanın. Aşağıdaki komutları kullanarak oturum açma bilgilerini oluşturun ve mevcut olduğunu onaylayın.

Note

Tanıdık SQL Server istemci araçlarını kullanarak bir SQL Server örneğine bağlanabilirsiniz, örneğin , SQL Server Management Studio (SSMS) veya Visual Studio Code için MSSQL uzantısı gibi.

CREATE LOGIN [contoso\amvin]
    FROM WINDOWS;

SELECT name
FROM sys.server_principals;

Active Directory kimlik doğrulaması ile SQL Server'a bağlanma

Tanıdık SQL Server istemci araçlarını kullanarak bir SQL Server örneğine bağlanabilirsiniz, örneğin , SQL Server Management Studio (SSMS) veya Visual Studio Code için MSSQL uzantısı gibi.

SQL Server adı ve port numarası ile Windows Server kimlik bilgileriyle (isim konteyner adı veya ana bilgisayar adı olabilir) kullanarak SQL Server'a giriş yapın. Örneğimizde sunucu adı sql1.contoso.com,5433olacaktır.

Aşağıdaki komut, sqlcmd ile kapsayıcınıza nasıl bağlanacağınızı gösterir.

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

Resources