Öğ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 sunucusunu bir Active Directory alanına birleştirin
  • SQL Server için bir Active Directory kullanıcısı oluşturun ve bir SPN oluşturun
  • 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

Prerequisites

Active Directory kimlik doğrulamasını yapılandırmadan önce şunları yapmanız gerekir:

Note

SQL Server 2025(17.x) tarihinden itibaren SUSE Linux Enterprise Server (SLES) desteklenmez.

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

SQL Server Linux sunucunuzu bir Active Directory alan kontrolcüsüne bağlayın. Bir Active Directory alan adına nasıl katılılacağı hakkında bilgi için, Linux hostunda SQL Server'ı Active Directory alanına katılma bölümüne bakınız.

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

Note

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. Bu hesap için hizmet ana adını (SPN ) setspn.exe aracı ile 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
    

    Note

    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.

Important

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 bölümde oluşturulan Active Directory hesabı için Anahtar Sürüm Numarası (KVNO) kontrol edin. 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
    

    Note

    Ö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, Windows Komut Mesajında aşağıdaki komutları kullanarak her SPN için tuş sekmesi girişlerini 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.

    Note

    Son iki UserName giriş küçük harflerle yapılmalıdır, aksi takdirde kimlik doğrulama 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şilirken kullanılacak hesabı belirtmek için aşağıdaki yapılandırma seçeneğinin araçla mssql-conf ayarlanması gerekir.

    sudo mssql-conf set network.privilegedadaccount <username>
    

    Note

    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:

    [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 kullanarak sqlcmd bağlanın:

sqlcmd -S mssql-host.contoso.com

Windows'taki SQL Server'ın aksine, Kerberos kimlik doğrulaması Linux üzerinde SQL Server yerel bağlantılar için çalışır. Ancak yine de SQL Server sunucusunun FQDN'sini sağlamanız gerekiyor. 127.0.0.1, . veya localhost öğelerine 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ü Recommendation
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

Eğer Linux ana bilgisayarını Active Directory alanına bağlamak için PBIS, VAS veya Centrify gibi üçüncü taraf yardımcı programları kullanıyorsanız ve SQL Server'ı doğrudan OpenLDAP kütüphanesini kullanmaya zorlamak istiyorsanız, seçeneği disablesssd aşağıdaki mssql-conf şekilde yapılandırabilirsiniz:

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

Note

SSSD kuran realmd gibi araçlar varken, PBIS, VAS ve Centrify gibi araçlar SSSD kurmaz. Active Directory alanına katılmak için kullanılan yardımcı araç SSSD kurmuyorsa, seçeneği şu şekilde trueyapılandırmalısındisablesssd. SQL Server, Active Directory için OpenLDAP mekanizmasına geri dönmeden önce SSSD’yi kullanmayı denediğinden bu gerekli olmasa da, bu seçeneğin yapılandırılması SQL Server’ın OpenLDAP çağrılarını doğrudan yapmasına ve SSSD’yi atlamasına olanak tanır.

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
sudo systemctl restart mssql-server

SQL Server, konak SSSD kullanılarak Active Directory etki alanına katıldıysa ve disablesssd, true olarak ayarlanmadıysa SSSD üzerinden LDAPS kullanır. Eğer her ikisi disablesssd ve forcesecureldap olarak trueayarlanmışsa, SQL Server OpenLDAP yerine LDAPS kullanır.

SQL Server 2017 CU 14 ve sonraki sürümler

SQL Server 2017 (14.x) CU 14 itibarıyla, SQL Server üçüncü taraf sağlayıcılar kullanılarak bir Active Directory etki alanına katıldıysa ve disablesssd true olarak ayarlanarak genel Active Directory araması için OpenLDAP çağrılarını kullanacak şekilde yapılandırıldıysa, KDC sunucusu için ters DNS araması yerine KDC araması için krb5 kitaplığını kullanmaya zorlamak üzere enablekdcfromkrb5conf seçeneğini de kullanabilirsiniz.

Bu, SQL Server'ın iletişim kurmaya çalıştığı alan kontrolörlerini manuel olarak yapılandırmak ve OpenLDAP kütüphane mekanizmasını KDC listesiyle krb5.confkullanmak istediğinizde faydalı olabilir.

İ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
sudo 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.

Note

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.