Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:programu SQL Server — Linux
W tym samouczku wyjaśniono, jak skonfigurować kontenery programu SQL Server w systemie Linux w celu obsługi uwierzytelniania usługi Active Directory, znanego również jako zintegrowane uwierzytelnianie. Aby zapoznać się z omówieniem, zobacz uwierzytelnianie usługi Active Directory dla programu SQL Server w systemie Linux.
Notatka
Aby uzyskać bieżące wskazówki dotyczące konfiguracji sieci, zapoznaj się z dokumentacją systemu operacyjnego.
Ten samouczek składa się z następujących zadań:
- Zainstaluj adutil
- Dołączanie hosta systemu Linux do domeny usługi Active Directory
- Tworzenie użytkownika usługi Active Directory dla programu SQL Server i ustawianie głównej nazwy usługi (SPN) przy użyciu narzędzia adutil
- Utwórz plik keytab dla usługi SQL Server
- Tworzenie plików
mssql.conf
ikrb5.conf
do użycia przez kontener programu SQL Server - Instalowanie plików konfiguracji i wdrażanie kontenera programu SQL Server
- 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
Warunki wstępne
Przed skonfigurowaniem uwierzytelniania usługi Active Directory wymagane są następujące elementy:
- Miej w sieci kontroler domeny usługi Active Directory (Windows).
- Zainstaluj adutil na maszynie hosta z systemem Linux, która jest przyłączona do domeny. Aby uzyskać szczegółowe informacje, przejdź do sekcji Install adutil.
Wdrażanie i przygotowywanie kontenera
Aby skonfigurować kontener, musisz znać z wyprzedzeniem port, który będzie używany przez kontener na hoście. Port domyślny, 1433
, może być mapowany inaczej na hoście kontenera. Na potrzeby tego samouczka port 5433
na hoście zostanie zamapowany na port 1433
kontenera. Aby uzyskać więcej informacji, zapoznaj się z naszym przewodnikiem Szybki start, Szybki start: Uruchamianie obrazów kontenerów systemu Linux z SQL Server przy użyciu platformy Docker.
Podczas rejestrowania głównych nazw usługi (SPN) można użyć nazwy hosta maszyny lub nazwy kontenera. Należy jednak skonfigurować go zgodnie z tym, co chcesz zobaczyć, podczas nawiązywania połączenia z kontenerem zewnętrznie.
Upewnij się, że dodano wpis przekierowującego hosta (A
) w usłudze Active Directory dla adresu IP hosta systemu Linux, który mapuje na nazwę kontenera SQL Server. W tym samouczku adres IP maszyny hosta sql1
jest 10.0.0.10
, a nazwa kontenera programu SQL Server to sql1
. Dodaj wpis hosta przekazującego w usłudze Active Directory, jak pokazano na zrzucie ekranu. Wpis gwarantuje, że gdy użytkownicy nawiążą połączenie z sql1.contoso.com
, dotrze do odpowiedniego hosta.
Na potrzeby tego samouczka używamy środowiska na platformie Azure z trzema maszynami wirtualnymi. Jedna maszyna wirtualna działająca jako kontroler domeny systemu Windows (DC) z nazwą domeny contoso.com
. Kontroler domeny ma nazwę adVM.contoso.com
. Druga maszyna to komputer z systemem Windows o nazwie winbox
, działający na Windows 10, który jest używany jako komputer kliencki i ma zainstalowany program SQL Server Management Studio (SSMS). Trzecia maszyna to maszyna z systemem Ubuntu 18.04 LTS o nazwie sql1
, która hostuje kontenery programu SQL Server. Wszystkie maszyny są przyłączone do domeny contoso.com
. Aby uzyskać więcej informacji, zobacz Dołączanie serwera SQL na hoście Linux do domeny Active Directory.
Notatka
Dołączanie maszyny kontenera hosta do domeny nie jest obowiązkowe, jak widać w dalszej części tego artykułu.
Instalowanie narzędzia adutil
Aby zainstalować adutil, wykonaj kroki opisane w Wprowadzenie do narzędzia adutil —usługi Active Directory na maszynie hosta przyłączonej do domeny.
Utwórz użytkownika Active Directory, nazwy SPN i klucz usługi SQL Server.
Jeśli nie chcesz, aby host kontenera był częścią domeny i nie wykonał czynności w celu przyłączenia maszyny do domeny, wykonaj następujące kroki na innej maszynie z systemem Linux, która jest już częścią domeny usługi Active Directory:
Utwórz użytkownika usługi Active Directory dla programu SQL Server i ustaw nazwę SPN przy użyciu adutil.
Utwórz i skonfiguruj plik keytab usługi SQL Server.
Skopiuj plik mssql.keytab
, który został utworzony na maszynie hosta, na której zostanie uruchomiony kontener programu SQL Server, i skonfiguruj kontener tak, aby używał skopiowanego mssql.keytab
. Opcjonalnie możesz również dołączyć hosta z systemem Linux, który uruchomi kontener programu SQL Server do domeny usługi Active Directory i wykonaj następujące kroki na tym samym komputerze.
Tworzenie użytkownika usługi Active Directory dla programu SQL Server i ustawianie głównej nazwy usługi za pomocą narzędzia adutil
Włączenie uwierzytelniania usługi Active Directory w kontenerach programu SQL Server w systemie Linux wymaga wykonania następujących kroków na maszynie z systemem Linux, która jest częścią domeny usługi Active Directory.
Uzyskaj lub odnów bilet TGT (ticket-granting ticket) protokołu Kerberos przy użyciu polecenia
kinit
. Użyj konta uprzywilejowanego dla poleceniakinit
. Konto musi mieć uprawnienia do nawiązywania połączenia z domeną, a także powinno mieć możliwość tworzenia kont i nazw SPN w domenie.W tym przykładowym skryscie uprzywilejowany użytkownik o nazwie
privilegeduser@CONTOSO.COM
został już utworzony na kontrolerze domeny.kinit privilegeduser@CONTOSO.COM
Za pomocą adutilutwórz nowego użytkownika, który będzie używany jako uprzywilejowane konto usługi Active Directory przez program SQL Server. Zastąp
<password>
prawidłowym hasłem.adutil user create --name sqluser --distname CN=sqluser,CN=Users,DC=CONTOSO,DC=COM --password '<password>'
Hasła można określić na dowolny z trzech sposobów:
- Flaga hasła:
--password <password>
- Zmienne środowiskowe —
ADUTIL_ACCOUNT_PWD
- Dane wejściowe interakcyjne
Pierwszeństwo metod wprowadzania haseł jest zgodne z kolejnością opcji wymienionych powyżej. Zalecane opcje to podanie hasła przy użyciu zmiennych środowiskowych lub interakcyjnych danych wejściowych, ponieważ są one bezpieczniejsze w porównaniu z flagą hasła.
Nazwę konta można określić przy użyciu nazwy wyróżniającej (
-distname
), jak pokazano powyżej, lub możesz również 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 szczegółów, możesz uruchomić poniższe polecenie:adutil user create --help
- Flaga hasła:
Zarejestruj nazwy SPN dla użytkownika utworzonego powyżej. W razie potrzeby możesz użyć nazwy maszyny hosta zamiast nazwy kontenera, w zależności od tego, jak chcesz, aby połączenie wyglądało zewnętrznie. W tym samouczku port
5433
jest używany zamiast portu1433
. Jest to mapowanie portów dla kontenera. Numer portu może być inny.adutil spn addauto -n sqluser -s MSSQLSvc -H sql1.contoso.com -p 5433
-
addauto
automatycznie utworzy SPN, pod warunkiem, że konto kinit ma wystarczające uprawnienia. -
-n
: nazwa konta, do którego zostaną przypisane 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. Podaj również nazwę FQDN dla nazwy kontenera. W takim przypadku nazwa kontenera tosql1
, a nazwa FQDN jestsql1.contoso.com
. -
-p
: port używany do generowania SPN. Jeśli nie zostaną określone, SPN są generowane bez portu. Połączenia będą działać tylko w tym przypadku, gdy program SQL Server nasłuchuje domyślnego portu,1433
.
-
Tworzenie pliku keytab usługi programu SQL Server
Utwórz plik keytab zawierający wpisy dla każdej z czterech wcześniej utworzonych nazw SPN i jeden dla użytkownika. Plik keytab zostanie zainstalowany w kontenerze, aby można go było utworzyć w dowolnej lokalizacji na hoście. Możesz bezpiecznie zmienić tę ścieżkę, o ile wynikowy plik keytab jest poprawnie instalowany podczas wdrażania kontenera przy użyciu Docker/podman.
Aby utworzyć plik keytab dla wszystkich nazw SPN, możemy użyć opcji createauto
. Zastąp <password>
prawidłowym hasłem.
adutil keytab createauto -k /container/sql1/secrets/mssql.keytab -p 5433 -H sql1.contoso.com --password '<password>' -s MSSQLSvc
-
-k
: ścieżka, w której chcesz utworzyć plikmssql.keytab
. W poprzednim przykładzie katalog/container/sql1/secrets
powinien już istnieć na hoście. -
-p
: port do generowania SPN. Jeśli nie zostaną określone, nazwy SPN są generowane bez portu. -
-H
: nazwa hosta używana do generowania nazw SPN. Jeśli nie zostanie określona, zostanie użyta nazwa FQDN hosta lokalnego. Podaj również nazwę FQDN dla nazwy kontenera. W takim przypadku nazwa kontenera tosql1
, a nazwa FQDN jestsql1.contoso.com
. -
-s
: nazwa usługi do użycia do generowania SPN. W tym przypadku jest to usługa SQL Server, dlatego nazwa usługi to MSSQLSvc. -
--password
: to jest hasło 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.
W przypadku wyboru typów szyfrowania można wybrać więcej niż jeden. W tym przykładzie wybraliśmy aes256-cts-hmac-sha1-96
i arcfour-hmac
. Upewnij się, że wybrano typ szyfrowania obsługiwany przez hosta i domenę.
Jeśli chcesz nieinterakcyjnie wybrać typ szyfrowania, możesz określić wybrany typ szyfrowania za pomocą argumentu -e w powyższym poleceniu. Aby uzyskać dodatkową pomoc dotyczącą poleceń adutil, wpisz następujące polecenie.
adutil keytab createauto --help
Ostrożność
arcfour-hmac
jest słabym szyfrowaniem, a nie zalecanym typem szyfrowania, który ma być używany w środowisku produkcyjnym.
Aby utworzyć keytab dla użytkownika, polecenie jest następujące. Zastąp <password>
prawidłowym hasłem.
adutil keytab create -k /container/sql1/secrets/mssql.keytab -p sqluser --password '<password>'
-
-k
: ścieżka, w której chcesz utworzyć plikmssql.keytab
. W poprzednim przykładzie katalog/container/sql1/secrets
powinien już istnieć na hoście. -
-p
: Główny wpis do dodania do keytabu.
adutil keytab tworzenie/automatyczne tworzenie nie zastępuje poprzednich plików; dołączy nowe dane do pliku, jeśli już istnieje.
Upewnij się, że utworzony plik keytab ma ustawione odpowiednie uprawnienia podczas wdrażania kontenera.
chmod 440 /container/sql1/secrets/mssql.keytab
W tym momencie można skopiować mssql.keytab
z bieżącego hosta systemu Linux do hosta systemu Linux, na którym zostanie wdrożony kontener programu SQL Server, i wykonać pozostałe kroki na hoście systemu Linux, który uruchomi kontener programu SQL Server. Jeśli powyższe kroki zostały wykonane na tym samym hoście systemu Linux, na którym zostaną wdrożone kontenery programu SQL Server, wykonaj następne kroki, jak również na tym samym hoście.
Tworzenie plików konfiguracji do użycia przez kontener programu SQL Server
Utwórz plik
mssql.conf
z ustawieniami usługi Active Directory. Ten plik można utworzyć w dowolnym miejscu na hoście i musi zostać poprawnie zainstalowany podczas uruchamiania platformy Docker. W tym przykładzie umieściliśmy ten plikmssql.conf
w obszarze/container/sql1
, który jest naszym katalogem kontenera. Zawartośćmssql.conf
jest wyświetlana w następujący sposób:[network] privilegedadaccount = sqluser kerberoskeytabfile = /var/opt/mssql/secrets/mssql.keytab
-
privilegedadaccount
: uprzywilejowany użytkownik usługi Active Directory do użycia na potrzeby uwierzytelniania w usłudze Active Directory. -
kerberoskeytabfile
: ścieżka w kontenerze, w którym znajduje się plikmssql.keytab
.
-
Utwórz plik
krb5.conf
, podobnie jak w poniższym przykładzie. Wielkość liter ma znaczenie w tych plikach.[libdefaults] default_realm = CONTOSO.COM default_keytab_name = /var/opt/mssql/secrets/mssql.keytab default_ccache_name = "" [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
Skopiuj wszystkie pliki,
mssql.conf
,krb5.conf
,mssql.keytab
do lokalizacji, która zostanie zamontowana w kontenerze programu SQL Server. W tym przykładzie te pliki są umieszczane na hoście w następujących lokalizacjach:mssql.conf
ikrb5.conf
w lokalizacji/container/sql1/
.mssql.keytab
jest umieszczana w lokalizacji/container/sql1/secrets/
.Upewnij się, że w tych folderach jest wystarczająca liczba uprawnień dla użytkownika z uruchomionym poleceniem docker/podman. Po uruchomieniu kontenera użytkownik musi mieć dostęp do utworzonej ścieżki folderu. W tym przykładzie podano poniższe uprawnienia dla ścieżki folderu:
sudo chmod 755 /container/sql1/
Instalowanie plików konfiguracji i wdrażanie kontenera programu SQL Server
Uruchom kontener programu SQL Server i zainstaluj odpowiednie pliki konfiguracji usługi Active Directory, które zostały wcześniej utworzone:
Ważny
Zmienna środowiskowa SA_PASSWORD
jest przestarzała. Zamiast tego użyj MSSQL_SA_PASSWORD
.
sudo docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" \
-p 5433:1433 --name sql1 \
-v /container/sql1:/var/opt/mssql \
-v /container/sql1/krb5.conf:/etc/krb5.conf \
-d mcr.microsoft.com/mssql/server:2019-latest
Ostrożność
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.
W przypadku uruchamiania kontenera na maszynie LSM (Linux Security Module), takiej jak hosty z włączonym programem SELinux, należy zainstalować woluminy przy użyciu opcji Z
, która nakazuje platformie Docker etykietowanie zawartości za pomocą prywatnej etykiety nieudostępnej. Aby uzyskać więcej informacji, zobacz jak skonfigurować etykietę SE Linux.
Nasz przykład zawiera następujące polecenia. Zastąp <password>
prawidłowym hasłem.
sudo docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 5433:1433 --name sql1 \
-v /container/sql1:/var/opt/mssql/ \
-v /container/sql1/krb5.conf:/etc/krb5.conf \
--dns-search contoso.com \
--dns 10.0.0.4 \
--add-host adVM.contoso.com:10.0.0.4 \
--add-host contoso.com:10.0.0.4 \
--add-host contoso:10.0.0.4 \
-d mcr.microsoft.com/mssql/server:2019-latest
- Pliki
mssql.conf
ikrb5.conf
znajdują się w ścieżce pliku hosta/container/sql1
. - Utworzona
mssql.keytab
znajduje się na ścieżce pliku hosta/container/sql1/secrets
. - Ponieważ nasza maszyna-host znajduje się na platformie Azure, szczegóły usługi Active Directory należy dołączyć do polecenia
docker run
w tej samej kolejności. W naszym przykładzie kontroler domenyadVM
znajduje się w domeniecontoso.com
, z adresem IP10.0.0.4
. Kontroler domeny uruchamia system DNS i centrum dystrybucji kluczy.
Jak utworzyć logowania do SQL Server oparte na Active Directory przy użyciu Transact-SQL
Połącz się z kontenerem programu SQL Server. Korzystając z poniższych poleceń, utwórz login i zweryfikuj jego istnienie. To polecenie można uruchomić z komputera klienckiego (Windows lub Linux) z uruchomionym programem SSMS, narzędziem Azure Data Studio lub innym narzędziem interfejsu wiersza polecenia.
CREATE LOGIN [contoso\amvin]
FROM WINDOWS;
SELECT name
FROM sys.server_principals;
Nawiązywanie połączenia z programem SQL Server przy użyciu uwierzytelniania usługi Active Directory
Aby nawiązać połączenie przy użyciu programu SQL Server Management Studio (SSMS) lub azure Data Studio, zaloguj się do programu SQL Server przy użyciu poświadczeń systemu Windows przy użyciu nazwy i numeru portu programu SQL Server (nazwa może być nazwą kontenera lub nazwą hosta). W naszym przykładzie nazwa serwera będzie sql1.contoso.com,5433
.
Możesz również użyć narzędzia, takiego jak sqlcmd, aby nawiązać połączenie z programem SQL Server w kontenerze.
sqlcmd -E -S 'sql1.contoso.com,5433'
Zasoby
- Omówienie uwierzytelniania usługi Active Directory dla programu SQL Server w systemie Linux i kontenerach
- Rozwiązywanie problemów z uwierzytelnianiem usługi Active Directory dla programu SQL Server w systemie Linux i kontenerach