Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Ş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.confvekrb5.confdosyaları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.
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:
SQL Server için bir Active Directory kullanıcısı oluşturun ve adutilkullanarak SPN'yi ayarlayın.
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.
kinitkomutunu kullanarak Kerberos TGT'sini (bilet verici bilet) alın veya yenileyin.kinitkomutu 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.COMadlı ayrıcalıklı bir kullanıcı zaten oluşturulmuştur.kinit privilegeduser@CONTOSO.COMadutilkullanarak, 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- Parola bayrağı:
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ı1433kullanı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ısql1ve FQDN'sisql1.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 Server1433varsayı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.keytabdosyasının oluşturulmasını istediğiniz yol. Önceki örnekte,/container/sql1/secretsdizini 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ısql1ve FQDN'sisql1.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. -
-eveya--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.keytabdosyasının oluşturulmasını istediğiniz yol. Önceki örnekte,/container/sql1/secretsdizini 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
Active Directory ayarlarıyla bir
mssql.confdosyası 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.confkapsayıcı dizinimiz olan/container/sql1altına yerleştirdik.mssql.confiç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.keytabdosyasının bulunacağı kapsayıcıdaki yol.
-
Aşağıdaki örnekte olduğu gibi bir
krb5.confdosyası 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.COMmssql.conf,krb5.confmssql.keytabtü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.confvekrb5.confkonumunda/container/sql1/.mssql.keytab/container/sql1/secrets/konuma yerleştirilir.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.confvekrb5.confdosyaları/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 runkomutuna aynı sırada eklenmesi gerekir. Örneğimizde, etki alanı denetleyicisiadVM, IP adresicontoso.comolan10.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
- Linux ve kapsayıcılarda SQL Server için Active Directory kimlik doğrulamasını anlama
- Linux ve kapsayıcılarda SQL Server için Active Directory kimlik doğrulaması sorunlarını giderme
İlgili içerik
- Hızlı Başlangıç: Docker ile SQL Server Linux kapsayıcı görüntülerini çalıştırma
- SQL Server için Active Directory kimlik doğrulaması , Linux üzerinde
- Linux için SQL Server tuş sekmelerini döndürme