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

W tym samouczku wyjaśniono, jak skonfigurować uwierzytelnianie usługi Active Directory systemu Windows dla programu SQL Server w systemie Linux przy użyciu narzędzia 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.
  • Narzędzie adutil zainstalowane na komputerze hosta przyłączonym do domeny.

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 maszyna kliencka z systemem Windows 10 o nazwie winbox, która ma zainstalowany program 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ć adutil, wykonaj kroki opisane w artykule Introduction to adutil — narzędzie Active Directory na maszynie hosta dodanej do domeny w poprzednim kroku.

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
    

    Ostrzeżenie

    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
    

    Po wyświetleniu monitu o ponowne uruchomienie usługi SQL Server w celu wdrożenia nowej konfiguracji usługi Active Directory można to zrobić w następnej sekcji.

  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 zainstalowano adutil i zintegrowano go z mssql-conf, możesz przejść do Utwórz plik SQL Server service keytab przy użyciu mssql-conf.

  1. Utwórz plik keytab zawierający wpisy dla każdej z czterech wcześniej utworzonych nazw SPN i jeden dla użytkownika.

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

    Ostrzeżenie

    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>'
    

    Ostrzeżenie

    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.

    Element adutil keytab [ create | autocreate ] nie zastępuje poprzednich plików; po prostu dołącza go do pliku, jeśli już istnieje.

  3. Upewnij się, że użytkownik jest właścicielem mssql utworzonego keytabu i że tylko mssql użytkownik ma dostęp do odczytu i zapisu do pliku. 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 nawiązać połączenie z wystąpieniem programu SQL Server przy użyciu programu SQL Server Management Studio (SSMS).

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'