Aracılığıyla paylaş


Öğretici: Linux üzerinde SQL Server ile Active Directory kimlik doğrulamayı kullanma

Ş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 üzerinde 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ı.

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

  • SQL Server ana bilgisayarını Active Directory etki alanına ekleme
  • SQL Server için Active Directory kullanıcısı oluşturma ve SPN'i ayarlama
  • SQL Server hizmet anahtar sekmesini yapılandırma
  • Anahtar sekmesi dosyasının güvenliğini sağlama
  • SQL Server'ı Kerberos kimlik doğrulaması için anahtar sekmesi dosyasını kullanacak şekilde yapılandırma
  • Transact-SQL'de Active Directory tabanlı 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 şunları yapmanız gerekir:

SQL Server ana bilgisayarını Active Directory etki alanına ekleme

SQL Server Linux konağınıza bir Active Directory etki alanı denetleyicisiyle katılın. Active Directory etki alanına katılma hakkında bilgi için bkz. Linux konağındaki SQL Server'ı Active Directory etki alanına ekleme.

SQL Server için Active Directory kullanıcısı oluşturma ve SPN'i ayarlama

Uyarı

Aşağıdaki adımlar tam nitelikli alan adınızı (FQDN) kullanır. Azure'daysanız devam etmeden önce bir FQDN oluşturmanız gerekir.

  1. Etki alanı denetleyicinizde New-ADUser PowerShell komutunu çalıştırarak süresi hiç dolmamış parolaya sahip yeni bir Active Directory kullanıcısı oluşturun. Aşağıdaki örnekte hesabı sqlsvcolarak adlandırabilirsiniz, ancak hesap adı istediğiniz bir ad olabilir. Hesap için yeni bir parola girmeniz istenir.

    Import-Module ActiveDirectory
    
    New-ADUser sqlsvc -AccountPassword (Read-Host -AsSecureString "Enter Password") -PasswordNeverExpires $true -Enabled $true
    

    SQL Server örneği kimlik bilgilerinin aynı hesabı kullanan diğer hizmetlerle paylaşılmaması için SQL Server için ayrılmış bir Active Directory hesabına sahip olmak en iyi güvenlik uygulamasıdır. Ancak, hesabın parolasını biliyorsanız (sonraki adımda bir anahtar sekmesi dosyası oluşturmak için gereklidir) isteğe bağlı olarak mevcut bir Active Directory hesabını yeniden kullanabilirsiniz. Ayrıca hesap, kullanıcı hesabında 128 bit ve 256 bit Kerberos AES şifrelemesini (msDS-SupportedEncryptionTypes öznitelik) destekleyecek şekilde etkinleştirilmelidir. Hesabın AES şifrelemesi için etkinleştirildiğini doğrulamak için Active Directory Kullanıcıları ve Bilgisayarları yardımcı programındaki hesabı bulun ve Özellikler'i seçin. Özellikler'deHesaplar sekmesini bulun ve aşağıdaki iki onay kutusunun seçili olduğunu doğrulayın.

    1. Bu hesap Kerberos AES 128 bit şifrelemeyi destekler
    2. Bu hesap Kerberos AES 256 bit şifrelemeyi destekler
  2. setspn.exe aracını kullanarak bu hesap için ServicePrincipalName (SPN) değerini ayarlayın. SPN, aşağıdaki örnekte belirtildiği gibi tam olarak biçimlendirilmelidir. SQL Server ana bilgisayarında hostname --all-fqdns komutunu çalıştırarak SQL Server ana bilgisayar makinesinin tam etki alanı adını bulabilirsiniz. SQL Server'ı farklı bir bağlantı noktası numarası kullanacak şekilde yapılandırmadıysanız TCP bağlantı noktası 1433 olmalıdır.

    setspn -A MSSQLSvc/<fully qualified domain name of host machine>:<tcp port> sqlsvc
    setspn -A MSSQLSvc/<netbios name of the host machine>:<tcp port> sqlsvc
    

    Uyarı

    Hata alırsanız, Insufficient access rightsetki alanı yöneticinize bu hesapta spn ayarlamak için yeterli izinlere sahip olduğunuzu denetleyin. SPN'yi kaydetmek için kullanılan hesabın Write servicePrincipalName izinlere sahip olması gerekir. Daha fazla bilgi için bkz . Kerberos bağlantıları için Hizmet Asıl Adı Kaydetme.

    Gelecekte TCP bağlantı noktasını değiştirirseniz setspn komutunu yeni bağlantı noktası numarasıyla yeniden çalıştırmanız gerekir. Sonraki bölümdeki adımları izleyerek yeni SPN'yi SQL Server hizmet anahtarı sekmesine de eklemeniz gerekir.

Daha fazla bilgi için bkz . Kerberos bağlantıları için Hizmet Asıl Adı Kaydetme.

SQL Server hizmet anahtar sekmesini yapılandırma

Linux üzerinde SQL Server için Active Directory kimlik doğrulamasını yapılandırmak için bir Active Directory kullanıcı hesabı ve önceki bölümde oluşturulan SPN gerekir.

Önemli

Active Directory hesabının parolası değiştirilirse veya SPN'lerin atandığı hesabın parolası değiştirilirse, anahtar sekmesini yeni parola ve Anahtar Sürüm Numarası (KVNO) ile güncelleştirmeniz gerekir. Bazı hizmetler de parolaları otomatik olarak döndürebilir. Söz konusu hesapların parola döndürme ilkelerini gözden geçirin ve beklenmeyen kapalı kalma sürelerini önlemek için bunları zamanlanmış bakım etkinlikleriyle hizalayın.

SPN anahtar sekmesi girdileri

  1. Önceki adımda oluşturulan Active Directory hesabının Anahtar Sürüm Numarası'nı (KVNO) denetleyin. Genellikle 2 olur, ancak hesabın parolasını birden çok kez değiştirdiyseniz başka bir tamsayı olabilir. SQL Server konak makinesinde aşağıdaki komutları çalıştırın:

    • Aşağıdaki örnekler user@CONTOSO.COM etki alanında olduğunu varsayıyor. Kullanıcı ve etki alanı adını, kullanıcı ve etki alanı adınızla değiştirin.
    kinit user@CONTOSO.COM
    kvno user@CONTOSO.COM
    kvno MSSQLSvc/<fully qualified domain name of host machine>:<tcp port>@CONTOSO.COM
    

    Uyarı

    ÖZELLIKLE etki alanı büyükse SPN'lerin etki alanınızda yayılması birkaç dakika sürebilir. hatasını alırsanız, kvno: Server not found in Kerberos database while getting credentials for MSSQLSvc/<fully qualified domain name of host machine>:<tcp port>@CONTOSO.COMbirkaç dakika bekleyin ve yeniden deneyin. Önceki komutlar yalnızca sunucu önceki bir bölümde ele alınan bir Active Directory etki alanına katılmışsa çalışır.

  2. ktpass kullanarak, bir Windows makinesi Komut İstemi'nde aşağıdaki komutları kullanarak her SPN için tuş sekmesi girdileri ekleyin:

    • <DomainName>\<UserName> - Active Directory kullanıcı hesabı
    • @CONTOSO.COM - Etki alanı adınızı kullanın
    • /kvno <#> - Önceki bir adımda elde edilen KVNO ile <#>'yi değiştirin.
    • <password> - Parolanız SQL Server varsayılan parola 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.
    ktpass /princ MSSQLSvc/<fully qualified domain name of host machine>:<tcp port>@CONTOSO.COM /ptype KRB5_NT_PRINCIPAL /crypto aes256-sha1 /mapuser <DomainName>\<UserName> /out mssql.keytab -setpass -setupn /kvno <#> /pass <password>
    
    ktpass /princ MSSQLSvc/<fully qualified domain name of host machine>:<tcp port>@CONTOSO.COM /ptype KRB5_NT_PRINCIPAL /crypto rc4-hmac-nt /mapuser <DomainName>\<UserName> /in mssql.keytab /out mssql.keytab -setpass -setupn /kvno <#> /pass <password>
    
    ktpass /princ MSSQLSvc/<netbios name of the host machine>:<tcp port>@CONTOSO.COM /ptype KRB5_NT_PRINCIPAL /crypto aes256-sha1 /mapuser <DomainName>\<UserName> /in mssql.keytab /out mssql.keytab -setpass -setupn /kvno <#> /pass <password>
    
    ktpass /princ MSSQLSvc/<netbios name of the host machine>:<tcp port>@CONTOSO.COM /ptype KRB5_NT_PRINCIPAL /crypto rc4-hmac-nt /mapuser <DomainName>\<UserName> /in mssql.keytab /out mssql.keytab -setpass -setupn /kvno <#> /pass <password>
    
    ktpass /princ <UserName>@CONTOSO.COM /ptype KRB5_NT_PRINCIPAL /crypto aes256-sha1 /mapuser <DomainName>\<UserName> /in mssql.keytab /out mssql.keytab -setpass -setupn /kvno <#> /pass <password>
    
    ktpass /princ <UserName>@CONTOSO.COM /ptype KRB5_NT_PRINCIPAL /crypto rc4-hmac-nt /mapuser <DomainName>\<UserName> /in mssql.keytab /out mssql.keytab -setpass -setupn /kvno <#> /pass <password>
    

    Önceki komutlar, Active Directory kimlik doğrulaması için hem AES hem de RC4 şifreleme şifrelemesine izin verir. RC4 eski bir şifreleme şifreleme şifrelemesidir ve daha yüksek bir güvenlik derecesi gerekiyorsa, yalnızca AES şifreleme şifrelemesi ile anahtar sekmesi girdileri oluşturmayı seçebilirsiniz.

    Uyarı

    Son iki UserName girdi küçük harfle yazılmalıdır, aksi durumda izin kimlik doğrulaması başarısız olabilir.

  3. Önceki komutları yürüttükten sonra, mssql.keytab adında bir keytab dosyanız olmalıdır. dosyasını klasörünün /var/opt/mssql/secretsaltındaki SQL Server makinesine kopyalayın.

  4. Anahtar sekmesi dosyasının güvenliğini sağlayın.

    Bu anahtar sekmesi dosyasına erişimi olan herkes etki alanında SQL Server'ın kimliğine bürünebilir, bu nedenle dosyaya erişimi yalnızca mssql hesabının okuma erişimi olacak şekilde kısıtladığınızdan emin olun:

    sudo chown mssql:mssql /var/opt/mssql/secrets/mssql.keytab
    sudo chmod 400 /var/opt/mssql/secrets/mssql.keytab
    
  5. Anahtar sekmesi dosyasına erişirken kullanılacak hesabı belirtmek için aşağıdaki yapılandırma seçeneğinin mssql-conf aracıyla ayarlanması gerekir.

    sudo mssql-conf set network.privilegedadaccount <username>
    

    Uyarı

    Etkialanıadı\kullanıcıadı veya username@domain değil yalnızca kullanıcı adını ekleyin. SQL Server, gerektiğinde bu kullanıcı adıyla birlikte etki alanı adını da dahili olarak ekler.

  6. SQL Server'ı Kerberos kimlik doğrulaması için anahtar sekmesi dosyasını kullanmaya başlayacak şekilde yapılandırmak için aşağıdaki adımları kullanın.

    sudo mssql-conf set network.kerberoskeytabfile /var/opt/mssql/secrets/mssql.keytab
    sudo systemctl restart mssql-server
    

    İsteğe bağlı olarak, performansı geliştirmek için etki alanı denetleyicisine UDP bağlantılarını devre dışı bırakabilirsiniz. Çoğu durumda, bir etki alanı denetleyicisine bağlanırken UDP bağlantıları sürekli olarak başarısız olur, bu nedenle içinde UDP çağrılarını atlamak için yapılandırma seçeneklerini /etc/krb5.conf ayarlayabilirsiniz. /etc/krb5.conf düzenleyin ve aşağıdaki seçenekleri ayarlayın:

    /etc/krb5.conf
    [libdefaults]
    udp_preference_limit=0
    

Bu noktada, SQL Server'da Active Directory tabanlı oturum açma bilgilerini kullanmaya hazırsınız.

Transact-SQL'de Active Directory tabanlı oturum açma bilgileri oluşturma

  1. SQL Server'a bağlanın ve yeni, Active Directory tabanlı oturum açma bilgileri oluşturun:

    CREATE LOGIN [CONTOSO\user]
        FROM WINDOWS;
    
  2. Oturum açma bilgilerinin artık sys.server_principals sistem kataloğu görünümünde listelendiğini doğrulayın:

    SELECT name
    FROM sys.server_principals;
    

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

Etki alanı kimlik bilgilerinizi kullanarak bir istemci makinesinde oturum açın. Artık Active Directory kimlik doğrulamasını kullanarak parolanızı yeniden girmeden SQL Server'a bağlanabilirsiniz. Bir Active Directory grubu için oturum açarsanız, bu grubun üyesi olan tüm Active Directory kullanıcıları aynı şekilde bağlanabilir.

İstemcilerin Active Directory kimlik doğrulamasını kullanması için belirli bağlantı dizesi parametresi, kullandığınız sürücüye bağlıdır. Aşağıdaki bölümlerde yer alan örnekleri göz önünde bulundurun.

Etki alanına katılmış bir Linux istemcisinde sqlcmd komutu

SSH ve etki alanı kimlik bilgilerinizi kullanarak etki alanına katılmış bir Linux istemcisinde oturum açın:

ssh -l user@contoso.com client.contoso.com

mssql-tools paketini yüklediğinizden emin olun, ardından herhangi bir kimlik bilgisi belirtmeden sqlcmd kullanarak bağlanın:

sqlcmd -S mssql-host.contoso.com

SQL Windows'tan farklı olarak, Kerberos kimlik doğrulaması SQL Linux'ta yerel bağlantı için çalışır. Ancak, yine de SQL Linux ana bilgisayarının FQDN'sini sağlamanız gerekir ve eğer ., localhost, 127.0.0.1 gibi yerlere bağlanmayı denerseniz, Active Directory kimlik doğrulaması çalışmaz.

Etki alanına bağlı bir Windows istemcisinde SSMS

Etki alanına katılmış bir Windows istemcisinde etki alanı kimlik bilgilerinizi kullanarak oturum açın. SQL Server Management Studio'yu yüklediğinizden emin olun, ardından mssql-host.contoso.com iletişim kutusunda Windows Kimlik Doğrulaması'nı belirterek SQL Server örneğine (örneğin, ) bağlanın.

Diğer istemci sürücülerini kullanarak Active Directory kimlik doğrulaması

Aşağıdaki tabloda diğer istemci sürücülerine yönelik öneriler açıklanmaktadır:

İstemci sürücüsü Tavsiye
JDBC SQL Server'a Bağlanmak için Kerberos Tümleşik Kimlik Doğrulamasını kullanın.
ODBC Tümleşik Kimlik Doğrulamayı Kullanın.
ADO.NET Bağlantı Dizesi Söz Dizimi.

Ek yapılandırma seçenekleri

Linux ana bilgisayarını Active Directory etki alanına eklemek için PBIS, VAS veya Centrify gibi üçüncü taraf yardımcı programları kullanıyorsanız ve SQL Server'ı doğrudan OpenLDAP kitaplığını kullanmaya zorlamak istiyorsanız, disablesssd ile aşağıdaki gibi yapılandırabilirsiniz:

sudo mssql-conf set network.disablesssd true
systemctl restart mssql-server

Uyarı

SSSD'yi ayarlayan realmd gibi yardımcı programlar vardır ancak PBIS, VAS ve Centrify gibi diğer araçlar SSSD'yi ayarlamaz. Active Directory etki alanına katılmak için kullanılan yardımcı program SSSD'yi ayarlamazsa, disablesssd seçeneğini true olarak yapılandırmanız gerekir. SQL Server, OpenLDAP mekanizmasına geri dönmeden önce Active Directory için SSSD'yi kullanmaya çalışacağından gerekli olmasa da, SQL Server'ın SSSD mekanizmasını atlayarak OpenLDAP çağrıları yapması için bunu yapılandırmak daha yüksek performans gösterir.

Etki alanı denetleyiciniz LDAPS'yi destekliyorsa, SQL Server'dan etki alanı denetleyicilerine yapılan tüm bağlantıları LDAPS üzerinden olmaya zorlayabilirsiniz. İstemcinizin LDAPS üzerinden etki alanı denetleyicisiyle iletişim kurabildiğini denetlemek için aşağıdaki bash komutunu ldapsearch -H ldaps://contoso.com:3269çalıştırın: . SQL Server'ı yalnızca LDAPS kullanacak şekilde ayarlamak için aşağıdakileri çalıştırın:

sudo mssql-conf set network.forcesecureldap true
systemctl restart mssql-server

Konakta Active Directory etki alanına katılma işlemi SSSD paketi aracılığıyla yapıldıysa ve disablesssd true olarak ayarlı değilse, bu işlem SSSD üzerinden LDAPS kullanır. Eğer disablesssd true ve forcesecureldap true olarak ayarlanırsa, SQL Server tarafından yapılan OpenLDAP kütüphane çağrıları üzerinden LDAPS protokolünü kullanır.

Sonrası SQL Server 2017 CU 14

SQL Server 2017 (14.x) CU 14'ten itibaren, SQL Server üçüncü taraf sağlayıcılar kullanılarak bir Active Directory etki alanı denetleyicisine katıldıysa ve genel Active Directory sorgusu için OpenLDAP çağrılarını kullanması için yapılandırıldıysa disablesssd değerini true olarak ayarlayarak, SQL Server'ı KDC sunucusunu ararken ters DNS araması yerine krb5 kitaplığını kullanmaya zorlama seçeneğini de enablekdcfromkrb5 kullanabilirsiniz.

Bu, SQL Server'ın iletişim kurmaya çalıştığı etki alanı denetleyicilerini el ile yapılandırmak istediğiniz senaryo için yararlı olabilir. OpenLDAP kitaplık mekanizmasını, krb5.conf içindeki KDC listesini kullanarak çalıştırırsınız.

İlk olarak, disablesssd ve enablekdcfromkrb5conf değerlerini true olarak ayarlayın ve ardından SQL Server'ı yeniden başlatın.

sudo mssql-conf set network.disablesssd true
sudo mssql-conf set network.enablekdcfromkrb5conf true
systemctl restart mssql-server

Ardından içinde /etc/krb5.conf KDC listesini aşağıdaki gibi yapılandırın:

[realms]
CONTOSO.COM = {
  kdc = dcWithGC1.contoso.com
  kdc = dcWithGC2.contoso.com
}

Önerilmiyor olsa da, Linux ana makinesini etki alanına dahil ederken SSSD'yi ayarlayan realmd gibi yardımcı programları kullanmak mümkündür. Aynı zamanda, disablesssd değerini true olarak yapılandırarak SQL Server'ın Active Directory ile ilgili çağrılarda SSSD yerine OpenLDAP çağrılarını kullanmasını sağlayabilirsiniz.

Uyarı

FQDN kullanarak SQL Server oturum açma işlemi (örneğin, CONTOSO.COM\Username) desteklenmez. CONTOSO\Username Biçimini kullanın.

Etki Alanı Yerel gruplarından SQL Server oturum açma işlemleri desteklenmez. Bunun yerine Genel Güvenlik Etki Alanı gruplarını kullanın.

SQL belgelerine katkıda bulunma

SQL içeriğini kendiniz düzenleyebildiğinizi biliyor muydunuz? Bunu yaparsanız, belgelerimizin geliştirilmesine yardımcı olmakla kalmaz, aynı zamanda sayfaya katkıda bulunan olarak da kabul edilirsiniz.

Daha fazla bilgi için Bkz. Microsoft Learn belgelerini düzenleme.