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 makalede, Linux veya kapsayıcılarda dağıtılan SQL Server için Active Directory kimlik doğrulamasının nasıl çalıştığına ilişkin ayrıntılar sağlanır.
Kavramlar
Basit Dizin Erişim Protokolü (LDAP)
LDAP, Active Directory de dahil olmak üzere çeşitli dizin hizmetleriyle çalışmaya yönelik bir uygulama protokolüdür. Dizin hizmetleri kullanıcı ve hesap bilgilerini ve parolalar gibi güvenlik bilgilerini depolar. Bu bilgiler şifrelenir ve ardından ağdaki diğer cihazlarla paylaşılır.
LDAP güvenliğini sağlama hakkında daha fazla bilgi edinmek için bkz. Windows Server'da LDAP imzalamayı etkinleştirme.
Kerberos
Kerberos, bir kullanıcının veya ana bilgisayarın kimliğini doğrulamak için kullanılan bir kimlik doğrulama protokolüdür. Bunu istemciyi ve sunucuyu doğrulamanın bir yolu olarak düşünebilirsiniz.
Windows ve Windows dışı sunucuların ve istemcilerin bulunduğu heterojen (karma) bir ortamda çalışırken, Active Directory tabanlı dizin hizmetleriyle çalışmak için iki tür dosya gerekir:
- Anahtar tablosu dosyaları ("anahtar tabloları" kısaltması)
- Kerberos yapılandırma dosyaları (
krb5.confveyakrb5.ini)
Keytab dosyası nedir?
Linux veya Unix sistemlerindeki sunucu işlemleri, işlemleri bir Windows hizmet hesabıyla çalıştıracak şekilde yapılandırılamaz. Bir Linux veya Unix sisteminin başlangıçta Active Directory'de otomatik olarak oturum açmasını istediğinizde, bir anahtar sekmesi dosyası kullanmanız gerekir.
Anahtar sekmesi, Kerberos korumalı bir hizmetin gösterimini ve Anahtar Dağıtım Merkezi'nde (KDC) ilişkili hizmet asıl adının uzun vadeli
Keytab dosyaları şunlardan biri için kullanılır:
- Ağdaki başka bir hizmette hizmetin kimliğini doğrulama veya
- Gelen dizin kullanıcısının bir hizmete ait Kerberos hizmet biletinin şifresini çözme.
krb5.conf dosyası nedir?
/etc/krb5.conf dosyası (krb5.iniolarak da adlandırılır) Kerberos v5 (KRB5) ve GNU Basit Kimlik Doğrulama ve Güvenlik Katmanı API'si (GSSAPI) kitaplıkları için yapılandırma girişleri sağlar.
Bu bilgiler varsayılan etki alanını, her etki alanının özelliklerini (Anahtar Dağıtım Merkezleri gibi) ve varsayılan Kerberos bilet ömrünü içerir.
Bu dosya Active Directory kimlik doğrulamasının çalışması için gereklidir.
krb5.conf bir INI dosyasıdır, ancak anahtar-değer çiftindeki her değer { ve }içine alınmış bir alt grup olabilir.
krb5.conf dosyası hakkında daha fazla bilgi için MIT Kerberos Consortium belgelerinebakın.
Linux üzerinde SQL Server için Kerberos'ı yapılandırma
Bunlar, Linux üzerinde SQL Server çalıştıran konak sunucusunda ihtiyacınız olan değerlerdir. Aynı konakta çalışan başka (SQL Server olmayan) hizmetleriniz varsa, krb5.conf dosyanızda birkaç giriş daha gerekebilir.
Referans için bir krb5.conf dosyası örneği aşağıda verilmiştir:
[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
libdefaults-default_realmdeğeri mevcut olmalıdır. Bu değer, konak makinenin ait olduğu etki alanını belirtir.realms(isteğe bağlı) - Her bölge içinkdcdeğeri, Active Directory hesaplarını ararken makinenin hangi Anahtar Dağıtım Merkezlerine başvurması gerektiğini belirtmek için ayarlanabilir. Birden fazla KDC belirlediyseniz, her bağlantı için KDC, sırayla (round-robin yöntemiyle) seçilecektir.domain_realm(isteğe bağlı) - Her bölge için eşleştirmeler sağlanabilir. Aksi takdirde, Linux'ta SQL Server etki alanıcontoso.com'inCONTOSO.COMalanıyla eşleştiğini varsayar.
Kerberos kimlik doğrulama işlemi
Windows'da Kerberos kimlik doğrulamasında olduğu gibi, bilet verme bileti (TGT) almak için ilk iki adım aynıdır:
İstemci, kullanıcı adını ve parolasını (şifrelenmiş) etki alanı denetleyicisine (DC) göndererek oturum açma işlemini başlatır.
Kullanıcı adını ve parolayı iç depolama alanıyla karşılaştırdıktan sonra DC, istemciye kullanıcı için bir TGT döndürür.
Linux üzerinde SQL Server, Hizmet Asıl Adı'nın (SPN) parolasını okumak için anahtar sekmesi dosyasını kullanır ve ardından bağlantıyı yetkilendirmek için kullandığı şifrelenmiş blob'un şifresini çözer. Sonraki adımlarda bu işlem özetlenmiştir.
Kullanıcı TGT'yi aldıktan sonra istemci, SQL Server örneğinin ana bilgisayar adını ve bağlantı noktasını belirterek SQL Server bağlantısı başlatır.
SQL istemcisi dahili olarak
MSSQLSvc/<host>:<port>biçiminde bir Hizmet Asıl Adı oluşturur. Bu, çoğu SQL Server istemcisinde sabit kodlanmış bir biçimdir.İstemci, BU SPN için DC'den bir oturum anahtarı isteyerek Kerberos el sıkışmasını başlatır. Hem TGT hem de SPN DC'ye gönderilir.
Linux üzerinde SQL Server için Active Directory kimlik doğrulamasını gösteren
- DC, TGT ve SPN'yi doğruladıktan sonra, SQL Server SPN'ye bağlanmak için oturum anahtarını istemciye gönderir.
Linux üzerinde SQL Server için Active Directory kimlik doğrulamasını gösteren
- Oturum anahtarından şifrelenmiş blob sunucuya gönderilir.
Linux üzerinde SQL Server için Active Directory kimlik doğrulamasını gösteren
SQL Server, şifrelenmiş (SPN, parola) tanımlama demetleri içeren diskteki bir dosya olan anahtar sekmesinden (
mssql.keytab) SPN parolasını okur.SQL Server, istemcinin kullanıcı adını almak için şifrelenmiş blobu istemciden yeni bulduğu parolayla çözer.
SQL Server, istemcinin bağlanma yetkisi olup olmadığını denetlemek için
sys.sysloginstablosunda istemciyi arar.Bağlantı kabul edilir veya reddedilir.
Linux üzerinde SQL Server için Active Directory kimlik doğrulamasını gösteren
SQL Server kapsayıcıları için Kerberos'ı yapılandırma
Kapsayıcılardaki SQL Server için Active Directory kimlik doğrulaması temelde Linux'taki SQL Server ile aynıdır. Tek fark SQL Server ana bilgisayar SPN'leridir. Önceki senaryoda, SQL Server konağı adıyla bağlandığımız için SPN MSSQLSvc/<host>:<port>. Ancak şimdi kapsayıcıya bağlanmamız gerekiyor.
SQL Server kapsayıcıları için kapsayıcının içinde krb5.conf dosyasını oluşturabilirsiniz. Kapsayıcıyı çalıştıran konak düğümünün etki alanının parçası olması gerekmez, ancak kapsayıcının bağlanmaya çalışacağı etki alanı denetleyicisine ulaşabilmesi gerekir.
Kapsayıcıya bağlandığımız için istemci bağlantısındaki sunucu adı, yalnızca host adından farklı olabilir. Konak adı, kapsayıcı adı veya başka bir diğer ad olabilir. Ayrıca, SQL Server için kullanıma sunulan bağlantı noktasının varsayılan 1433olmaması da yüksek bir olasılıktır.
SQL Server kapsayıcısına bağlanmak için mssql.keytab'de depolanan SPN'yi kullanmanız gerekir. Örneğin, mssql.keytab içindeki SPN MSSQLSvc/sqlcontainer.domain.com:8000 ise, istemcide sqlcontainer.domain.com,8000 bağlantı dizisi olarak kullanırsınız.
Uyarı
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 Kapsayıcıları için Active Directory kimlik doğrulamasını gösteren
SQL Server grup yenileme
Kimlik doğrulaması için yalnızca Hizmet Asıl Adı'na ihtiyacınız varsa, anahtar sekmesinde neden bir kullanıcı hesabı olduğunu merak ediyor olabilirsiniz.
Bir grup adGroupüyesi olan bir kullanıcı adUserolduğunu hayal edin. adGroup SQL Server'da oturum açma olarak eklenirse, adUser sql Server örneğinde de oturum açma iznine sahip olduğu anlamına gelir. adUser HALA SQL Server'a bağlı olsa da, etki alanı yöneticisi adGroup'den adUser kaldırabilir. Şimdi adUser artık SQL Server'da oturum açma iznine sahip olmamalıdır, ancak Kerberos kimlik doğrulama işlemini zaten geçmiş ve bağlanmışlardır.
Bağlı kullanıcının artık ayrıcalıklı bir eylem gerçekleştirmesine izin verilmediği bir senaryoya (oturum açma açma veya veritabanını değiştirme gibi) karşı koruma sağlamak için grup yenileme adlı bir işlemi düzenli aralıklarla çalıştırıyoruz.
SQL Server'ın grup yenileme için kullandığı ayrıcalıklı bir Active Directory hesabı vardır. Bu hesap, mssql-conf kullanılarak network.privilegedadaccount ayarıyla yapılandırılmıştır veya aksi durumda konak makinenin makine hesabı (<hostname>$) varsayılan olarak kullanılır.
sys.syslogins ile karşılaştırarak adUser istenen Transact-SQL komutlarını bağlamak ve yürütmek için gerekli izinlere sahip olup olmadığını denetler. Eğer adUser, adGroup'ten çıkarıldıysa, bağlantı SQL Server tarafından sonlandırılır.
Grup yenileme için aşağıdaki iki koşul gerekir:
- SQL Server örneği ile şirket içi Active Directory etki alanı arasında ağ bağlantısı.
- SQL Server'ın bağlı olduğu etki alanı ile şirket içi Active Directory etki alanı arasında iki yönlü güven. Daha fazla bilgi için bkz. Active Directory'ninHakkında.