Samouczek: konfigurowanie uwierzytelniania usługi Active Directory za pomocą programu SQL Server w systemie Linux przy użyciu narzędzia adutil

Dotyczy:Program SQL Server w systemie Linux

Ten samouczek wyjaśnia, jak skonfigurować uwierzytelnianie Active Directory dla SQL Server on Linux za pomocą adutil. Aby uzyskać inną metodę konfigurowania uwierzytelniania usługi Active Directory przy użyciu rozwiązania ktpass, zobacz Samouczek: używanie uwierzytelniania usługi Active Directory z programem SQL Server w systemie Linux.

Ten samouczek składa się z następujących zadań:

  • Zainstaluj produkt adutil
  • Dołączanie maszyny z systemem Linux do domeny usługi Active Directory
  • Tworzenie użytkownika Active Directory dla SQL Server i ustawianie głównej nazwy usługi (SPN) przy użyciu adutil
  • Tworzenie pliku keytab usługi programu SQL Server
  • Konfigurowanie programu SQL Server do korzystania z pliku keytab
  • Tworzenie loginów SQL Server opartych na Active Directory przy użyciu Transact-SQL
  • Nawiązywanie połączenia z programem SQL Server przy użyciu uwierzytelniania usługi Active Directory

Wymagania wstępne

Przed skonfigurowaniem uwierzytelniania usługi Active Directory potrzebne są następujące elementy:

  • Kontroler domeny systemu Windows z uruchomionymi usługami Active Directory Domain Services w sieci.

Przygotowywanie maszyny domeny

Upewnij się, że w usłudze Active Directory dodano wpis hosta przekazującego (A) dla adresu IP hosta systemu Linux. W tym samouczku adres IP maszyny hostującej to sql1. W poniższym przykładzie dodajemy wpis hosta przekazującego w usłudze Active Directory. Wpis gwarantuje, że gdy użytkownicy nawiążą połączenie z sql1.contoso.com, dotrze do odpowiedniego hosta.

Zrzut ekranu przedstawiający dodawanie rekordu hosta.

Na potrzeby tego samouczka użyjesz środowiska na platformie Azure z trzema maszynami wirtualnymi. Jedna maszyna wirtualna (VM) to komputer z systemem Windows Server o nazwie adVM.contoso.com, uruchomiony jako kontroler domeny (DC) z domeną o nazwie contoso.com. Druga maszyna wirtualna to komputer kliencki z systemem Windows 10 o nazwie winbox, który ma zainstalowany SQL Server Management Studio (SSMS). Trzecia maszyna to maszyna z systemem Ubuntu 18.04 LTS o nazwie sql1, która hostuje program SQL Server.

Dołączanie maszyny hosta z systemem Linux do domeny usługi Active Directory

Aby dołączyć do domeny usługi Active Directory, zobacz Dołączanie programu sql1SQL Server na hoście z systemem Linux do domeny usługi Active Directory.

Instalowanie narzędzia adutil

Aby zainstalować program adutil, wykonaj kroki opisane w artykule Wprowadzenie do narzędzia adutil Active Directory na komputerze hosta, który w poprzednim kroku został dodany do domeny.

Użyj narzędzia adutil, aby utworzyć użytkownika usługi Active Directory dla programu SQL Server i ustawić nazwę główną usługi (SPN)

  1. Uzyskaj lub odnów bilet TGT Kerberos przy użyciu polecenia kinit. Musisz użyć uprzywilejowanego konta dla kinit polecenia, a maszyna hosta powinna być już częścią domeny. Konto musi mieć uprawnienia do łączenia się z domeną oraz tworzenia kont i nazw SPN w domenie.

    W tym przykładowym skrycie uprzywilejowany użytkownik o nazwie privilegeduser@CONTOSO.COM jest już tworzony na kontrolerze domeny.

    kinit privilegeduser@CONTOSO.COM
    
  2. Używając adutil, utwórz nowego użytkownika, który będzie używany jako konto uprzywilejowane Active Directory przez SQL Server.

    Hasła można określić na trzy różne sposoby. Jeśli używasz więcej niż jednej z tych metod, mają pierwszeństwo w następującej kolejności:

    • Za pomocą flagi hasła: --password <password>
    • W zmiennej środowiskowej: ADUTIL_ACCOUNT_PWD
    • Interaktywne dane wejściowe w wierszu polecenia

    Zmienna środowiskowa lub metody interakcyjne są bezpieczniejsze niż flaga hasła.

    adutil user create --name sqluser --distname CN=sqluser,CN=Users,DC=CONTOSO,DC=COM --password '<password>'
    

    Możesz określić nazwę konta przy użyciu nazwy wyróżniającej (--distname), jak pokazano wcześniej, lub użyć nazwy jednostki organizacyjnej (OU). Nazwa jednostki organizacyjnej (--ou) ma pierwszeństwo przed nazwą unikalną, jeżeli określisz obie. Aby uzyskać więcej informacji, możesz uruchomić następujące polecenie:

    adutil user create --help
    

    Caution

    Hasło powinno być zgodne z domyślnymi zasadami haseł programu SQL Server. Domyślnie hasło musi mieć długość co najmniej ośmiu znaków i zawierać znaki z trzech z następujących czterech zestawów: wielkie litery, małe litery, cyfry podstawowe-10 i symbole. Hasła mogą mieć długość maksymalnie 128 znaków. Używaj haseł, które są tak długie i złożone, jak to możliwe.

  3. Zarejestruj nazwy SPN dla utworzonego wcześniej podmiotu (principala). Należy użyć w pełni kwalifikowanej nazwy domeny (FQDN) maszyny. W tym samouczku używamy domyślnego portu programu SQL Server 1433. Numer portu może być inny.

    adutil spn addauto -n sqluser -s MSSQLSvc -H sql1.contoso.com -p 1433
    
    • addauto automatycznie tworzy nazwy SPN, o ile konto kinit ma wystarczające uprawnienia.
    • -n: nazwa konta do przypisania nazw SPN.
    • -s: Nazwa usługi używana do generowania SPN. W tym przypadku jest to usługa SQL Server, dlatego nazwa usługi to MSSQLSvc.
    • -H: Nazwa hosta do użycia przy generowaniu nazw SPN. Jeśli nie zostanie określona, zostanie użyta nazwa FQDN hosta lokalnego. W takim przypadku nazwa hosta to sql1 , a nazwa FQDN to sql1.contoso.com.
    • -p: port używany do generowania SPN. Jeśli nie zostaną określone, SPN są generowane bez portu. Połączenia SQL działają tylko w tym przypadku, gdy wystąpienie programu SQL Server nasłuchuje domyślnego portu 1433.

Tworzenie pliku keytab usługi SQL Server za pomocą mssql-conf

Możesz zainstalować adutil i zintegrować ją z mssql-conf, aby utworzyć i skonfigurować plik keytab bezpośrednio za pomocą mssql-conf. Ta metoda jest zalecana do tworzenia pliku keytab usługi SQL Server. W przeciwnym razie możesz ręcznie utworzyć plik keytab usługi SQL Server.

Wymagania wstępne

  1. Upewnij się, że użytkownik jest właścicielem pliku mssql/var/opt/mssql/mssql.conf, a nie root. W przeciwnym razie należy uruchomić polecenia mssql-conf przy użyciu sudo.

  2. Na kontrolerze domeny w ustawieniach usługi Active Directory dla network.privilegedadaccount konta (w tych przykładach sqluser@CONTOSO.COM), włącz następujące opcje na karcie Konto w sekcji Opcje konta :

    • To konto obsługuje szyfrowanie 128-bitowe Kerberos AES
    • To konto obsługuje szyfrowanie 256-bitowe protokołu Kerberos AES

Utwórz plik keytab

Po utworzeniu użytkownika i nazw SPN możesz utworzyć plik keytab, wykonując następujące kroki.

  1. Przełącz na mssql użytkownika:

    su mssql
    
  2. Zaloguj się jako użytkownik usługi Active Directory przy użyciu kinit polecenia :

    kinit privilegeduser@CONTOSO.COM
    
  3. Utwórz plik keytab:

    /opt/mssql/bin/mssql-conf setup-ad-keytab /var/opt/mssql/secrets/mssql.keytab sqluser
    

    Gdy pojawi się poproszenie o ponowne uruchomienie usługi SQL Server, aby przyjąć nową konfigurację Active Directory, możesz ją zrestartować w sekcji Restart SQL Server.

  4. Upewnij się, że keytab został utworzony z odpowiednimi wpisami:

    klist -kte /var/opt/mssql/secrets/mssql.keytab
    

    Powinny zostać wyświetlone dane wyjściowe podobne do tego przykładu:

    keytab name: FILE:/var/opt/mssql/secrets/mssql.keytab
    KVNO Timestamp           Principal
    ---- ------------------- ------------------------------------------------------
       4 12/30/2021 14:02:08 sqluser@CONTOSO.COM (aes256-cts-hmac-sha1-96)
       4 12/30/2021 14:02:08 MSSQLSvc/sql1.contoso.com:1433@CONTOSO.COM (aes256-cts-hmac-sha1-96)
       4 12/30/2021 14:02:08 MSSQLSvc/sql1.contoso.com@CONTOSO.COM (aes256-cts-hmac-sha1-96)
       4 12/30/2021 14:02:08 MSSQLSvc/sql1:1433@CONTOSO.COM (aes256-cts-hmac-sha1-96)
       4 12/30/2021 14:02:08 MSSQLSvc/sql1@CONTOSO.COM (aes256-cts-hmac-sha1-96)
    

    Jeśli plik /var/opt/mssql/mssql.conf nie jest własnością mssql, należy skonfigurować mssql-conf w celu ustawienia wartości network.kerberoskeytabfile i network.privilegedadaccount zgodnie z poprzednimi krokami. Wpisz hasło po wyświetleniu monitu.

    /opt/mssql/bin/mssql-conf set network.kerberoskeytabfile /var/opt/mssql/secrets/mssql.keytab
    /opt/mssql/bin/mssql-conf set network.privilegedadaccount sqluser
    
  5. Zweryfikuj konfigurację, aby upewnić się, że uwierzytelnianie usługi Active Directory działa bez żadnych problemów.

    /opt/mssql/bin/mssql-conf validate-ad-config /var/opt/mssql/secrets/mssql.keytab
    

    Dane wyjściowe wyglądają podobnie do następującego przykładu:

    Detected Configuration:
    Default Realm: CONTOSO.COM
    Keytab: /var/opt/mssql/secrets/mssql.keytab
    Reverse DNS Result: sql1.contoso.com
    SQL Server Port: 1433
    Detected SPNs (SPN, KVNO):
    (MSSQLSvc/sql1.CONTOSO.COM:1433, 4)
    (MSSQLSvc/sql1.CONTOSO.COM, 4)
    (MSSQLSvc/sql1:1433, 4)
    (MSSQLSvc/sql1, 4)
    Privileged Account (Name, KVNO):
    (sqluser, 4)
    

Ręczne tworzenie pliku keytab usługi programu SQL Server

Jeśli zainstalowałeś adutil i zintegrowałeś go z mssql-conf, możesz pominąć tę sekcję.

  1. Utwórz plik keytab, który zawiera wpisy dla każdego z czterech wcześniej utworzonych SPN.

    adutil keytab createauto -k /var/opt/mssql/secrets/mssql.keytab -p 1433 -H sql1.contoso.com --password '<password>' -s MSSQLSvc
    

    Caution

    Hasło powinno być zgodne z domyślnymi zasadami haseł programu SQL Server. Domyślnie hasło musi mieć długość co najmniej ośmiu znaków i zawierać znaki z trzech z następujących czterech zestawów: wielkie litery, małe litery, cyfry podstawowe-10 i symbole. Hasła mogą mieć długość maksymalnie 128 znaków. Używaj haseł, które są tak długie i złożone, jak to możliwe.

    Możliwe opcje wiersza polecenia to:

    • -k: ścieżka, w mssql.keytab której jest tworzony plik. W poprzednim przykładzie katalog /var/opt/mssql/secrets/ powinien już istnieć na hoście.
    • -p: port używany do generowania SPN. Jeśli nie zostaną określone, SPN są generowane bez portu.
    • -H: Nazwa hosta do użycia przy generowaniu nazw SPN. Jeśli nie zostanie określona, zostanie użyta nazwa FQDN hosta lokalnego. W takim przypadku nazwa hosta to sql1 , a nazwa FQDN to sql1.contoso.com.
    • -s: Nazwa usługi używana do generowania SPN. W tym przykładzie nazwa usługi programu SQL Server to MSSQLSvc.
    • --password: hasło uprzywilejowanego konta użytkownika usługi Active Directory, które zostało utworzone wcześniej.
    • -e lub --enctype: rodzaje szyfrowania dla wpisu keytab. Użyj rozdzielanej przecinkami listy wartości. Jeśli nie zostanie określony, zostanie wyświetlony interakcyjny monit.

    Możesz wybrać więcej niż jeden typ szyfrowania, o ile host i domena obsługują typ szyfrowania. W tym przykładzie możesz wybrać elementy aes256-cts-hmac-sha1-96 i aes128-cts-hmac-sha1-96. Należy jednak unikać arcfour-hmac w środowisku produkcyjnym, ponieważ ma słabe szyfrowanie.

    Jeśli chcesz wybrać typ szyfrowania bez monitowania, możesz określić wybrany typ szyfrowania przy użyciu argumentu -e w poprzednim poleceniu. Aby uzyskać więcej pomocy dotyczącej adutil keytab opcji, uruchom następujące polecenie:

    adutil keytab createauto --help
    
  2. Dodaj wpis do keytab dla nazwy głównej i hasła używanego przez program SQL Server do łączenia się z usługą Active Directory.

    adutil keytab create -k /var/opt/mssql/secrets/mssql.keytab -p sqluser --password '<password>'
    

    Caution

    Hasło powinno być zgodne z domyślnymi zasadami haseł programu SQL Server. Domyślnie hasło musi mieć długość co najmniej ośmiu znaków i zawierać znaki z trzech z następujących czterech zestawów: wielkie litery, małe litery, cyfry podstawowe-10 i symbole. Hasła mogą mieć długość maksymalnie 128 znaków. Używaj haseł, które są tak długie i złożone, jak to możliwe.

    • -k: ścieżka, w której chcesz utworzyć mssql.keytab plik.
    • -p: Główny wpis do dodania do keytabu.

    Polecenie adutil keytab [ create | createauto ] nie nadpisuje poprzedniego pliku. Dodaje się do pliku, jeśli już tam jest.

  3. Upewnij się, że użytkownik mssql jest właścicielem utworzonego pliku keytab, i ustaw dla niego uprawnienia tylko do odczytu dla właściciela i grupy. Polecenia chown i chmod można uruchomić w następujący sposób:

    chown mssql /var/opt/mssql/secrets/mssql.keytab
    chmod 440 /var/opt/mssql/secrets/mssql.keytab
    

Konfiguracja SQL Server do użycia keytab

Uruchom poniższe polecenia, aby skonfigurować program SQL Server do używania karty kluczy utworzonej w poprzednim kroku i ustawić uprzywilejowane konto usługi Active Directory jako utworzone wcześniej przez użytkownika. W naszym przykładzie nazwa użytkownika to sqluser.

/opt/mssql/bin/mssql-conf set network.kerberoskeytabfile /var/opt/mssql/secrets/mssql.keytab
/opt/mssql/bin/mssql-conf set network.privilegedadaccount sqluser

Uruchom ponownie program SQL Server

Uruchom następujące polecenie, aby ponownie uruchomić usługę PROGRAMU SQL Server:

sudo systemctl restart mssql-server

Tworzenie identyfikatorów logowania w usłudze SQL Server opartych na usłudze Active Directory w Transact-SQL

Połącz się z wystąpieniem programu SQL Server i uruchom następujące polecenia, aby utworzyć konto logowania i potwierdzić jego istnienie.

CREATE LOGIN [contoso\privilegeduser]
    FROM WINDOWS;

SELECT name
FROM sys.server_principals;

Nawiązywanie połączenia z programem SQL Server przy użyciu uwierzytelniania usługi Active Directory

Użyj poświadczeń systemu Windows, aby połączyć się z instancją programu SQL Server za pomocą programu SQL Server Management Studio.

Możesz również użyć narzędzia takiego jak sqlcmd, aby nawiązać połączenie z instancją SQL Server przy użyciu uwierzytelniania Windows.

sqlcmd -E -S 'sql1.contoso.com'