Aracılığıyla paylaş


Öğ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ı.

Not

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
  • Linux ana bilgisayarını Active Directory etki alanına ekleme
  • SQL Server için bir Active Directory kullanıcısı oluşturun ve adutil aracını kullanarak Hizmet Asıl Adı'nı (SPN) ayarlayın
  • 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

Önkoşullar

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ış olan bir Linux konak makinesine adutil uygulamasını yükleyin. 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 kılavuzda, sql1 konak makinesinin IP adresi 10.0.0.10ve SQL Server kapsayıcımın adı sql1. 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. Windows etki alanı denetleyicisi (DC) olarak davranan, etki alanı adı contoso.comolan bir VM. Etki Alanı Denetleyicisi adVM.contoso.comolarak adlandırılır. İ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.

Not

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

Adutil'i yükleme

adutilyüklemek için, etki alanına katılmış bir konak makinede adutil ' e giriş - Active Directory yardımcı programı adımlarını 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 bir Active Directory kullanıcısı oluşturun ve adutilkullanarak 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. adutilkullanarak, 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şkenleri - ADUTIL_ACCOUNT_PWD
    • Etkileşimli giriş

    Parola giriş yöntemlerinin önceliği, yukarıda listelenen seçeneklerin sırasını izler. Önerilen seçenekler, parola bayrağına kıyasla daha güvenli olduklarından Ortam değişkenlerini veya etkileşimli girişi kullanarak parola sağlamaktır.

    Yukarıda gösterildiği gibi ayırt edici adı (-distname) kullanarak hesabın adını belirtebilir veya Kuruluş Birimi (OU) adını da kullanabilirsiniz. OU adı (--ou), her ikisini de belirtmeniz durumunda ayırt edici addan önceliklidir. Daha fazla ayrıntı için aşağıdaki komutu çalıştırabilirsiniz:

    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, kinit hesabı için 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ı. Belirtilmezse, yerel konağı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.
    • -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/podman kullanılarak kapsayıcı dağıtılırken elde edilen keytab doğru şekilde bağlandığı 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şimli olmayan bir şekilde seçmek isterseniz, yukarıdaki komutta -e bağımsız değişkeniyle şifreleme türü seçiminizi belirtebilirsiniz. adutil komutları hakkında ek yardım için aşağıdaki komutu çalıştırın.

adutil keytab createauto --help

Dikkat

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.

adutil keytab oluşturma/otomatik oluşturma önceki dosyaların üzerine yazmaz; eğer zaten mevcutsa dosyaya ekler.

Kapsayıcıyı dağıtırken oluşturulan keytab'in doğru izinlerle ayarlandığından 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 konakta herhangi bir yerde oluşturulabilir ve docker run komutu sırasında doğru şekilde bağlanması 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/podman komutunu çalıştıran kullanıcı için bu klasörlerde yeterli izin 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 verilen aşağıdaki izinleri sağladı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:

Önemli

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

Dikkat

Parolanız, SQL Server varsayılanparola ilkesine uygun olmalıdır. 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 özellikli konaklar gibi LSM'de (Linux Güvenlik Modülü) kapsayıcı çalıştırırken, docker'a içeriği özel paylaşılmamış bir etiketle etiketlemesini söyleyen Z seçeneğini kullanarak birimleri bağlamanız gerekir. Daha fazla bilgi için bkz. SE Linux etiketini yapılandırma.

Ö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/ \
-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
  • 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.

Not

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

CREATE LOGIN [contoso\amvin]
    FROM WINDOWS;

SELECT name
FROM sys.server_principals;

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

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

SQL Server adını ve bağlantı noktası numarasını (ad kapsayıcı adı veya konak adı olabilir) kullanarak Windows kimlik bilgileriyle SQL Server'da oturum açın. Örneğimizde sunucu adı sql1.contoso.com,5433olacaktır.

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

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

Kaynaklar