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ı.
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
adutilaracı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.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
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.
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:
SQL Server için Active Directory bir kullanıcı 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ş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- 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, hesap içinkinityeterli 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ı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 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.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ş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.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.
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
Active Directory ayarlarıyla bir
mssql.confdosyası oluşturun. Bu dosya, ana bilgisayarın herhangi bir yerinde oluşturulabilir ve komut sırasındadocker rundoğru şekilde monte edilmesi 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 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.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.
Note
Tanıdık SQL Server istemci araçlarını kullanarak bir SQL Server örneğine bağlanabilirsiniz, örneğin
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 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
- 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