Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
SQL database w usłudze Microsoft Fabric
Użyj lokalnych użytkowników bazy danych, aby uwierzytelnić połączenia do SQL Server i Azure SQL Database na poziomie bazy danych. Zawarta baza danych to baza danych, która jest odizolowana od innych baz danych oraz wystąpienia programu SQL Server lub usługi SQL Database (i master bazy danych), które hostują bazę danych.
Program SQL Server obsługuje użytkowników zawartej bazy danych na potrzeby uwierzytelniania systemu Windows i programu SQL Server. W przypadku korzystania z usługi SQL Database połącz użytkowników zawartej bazy danych z regułami zapory na poziomie bazy danych.
W tym artykule przedstawiono zalety korzystania z zawartego modelu bazy danych w porównaniu z tradycyjnym modelem logowania/użytkownika oraz regułami zapory na poziomie serwera lub systemu Windows. Konkretne scenariusze, możliwości zarządzania lub logika biznesowa aplikacji mogą nadal wymagać użycia tradycyjnego modelu logowania/użytkownika i reguł zapory na poziomie serwera.
Tradycyjny model logowania i użytkownika
W tradycyjnym modelu połączenia użytkownicy systemu Windows lub członkowie grup systemu Windows łączą się z aparatem bazy danych, podając poświadczenia użytkownika lub grupy uwierzytelnione przez system Windows. Użytkownicy mogą również podać nazwę i hasło oraz nawiązać połączenie przy użyciu uwierzytelniania programu SQL Server. W obu przypadkach master baza danych musi mieć login zgodny z poświadczeniami łączeniowymi.
Po potwierdzeniu przez aparat bazy danych poświadczeń uwierzytelniania systemu Windows lub uwierzytelnieniu poświadczeń uwierzytelniania programu SQL Server połączenie zwykle próbuje nawiązać połączenie z bazą danych użytkownika. Aby nawiązać połączenie z bazą danych użytkownika, należy powiązać login z użytkownikiem w tej bazie danych. Parametry połączenia mogą również określać nawiązywanie połączenia z określoną bazą danych, która jest opcjonalna w programie SQL Server, ale wymagana w usłudze SQL Database.
Ważną zasadą jest to, że zarówno nazwa logowania (w master bazie danych), jak i użytkownik (w bazie danych użytkownika) muszą istnieć i być ze sobą powiązane. Połączenie z bazą danych użytkownika jest zależne od logowania w bazie danych master. Ta zależność ogranicza możliwość przeniesienia bazy danych do innego wystąpienia programu SQL Server lub serwera usługi Azure SQL Database.
Jeśli połączenie z master bazą danych nie jest dostępne (na przykład przejście w tryb failover jest w toku), całkowity czas połączenia wzrośnie lub połączenie może przekroczyć limit czasu. Niedostępne połączenie może wpłynąć na skalowalność połączenia.
Model użytkownika zawartej bazy danych
W modelu użytkownika zawartej bazy danych logowanie w master bazie danych nie jest obecne. Zamiast tego proces uwierzytelniania odbywa się w bazie danych użytkownika. Użytkownik w bazie danych użytkownika nie ma przypisanego identyfikatora logowania w master bazie danych.
Model użytkownika zawartej bazy danych obsługuje zarówno uwierzytelnianie systemu Windows, jak i uwierzytelnianie programu SQL Server. Można go używać zarówno w programie SQL Server, jak i w usłudze SQL Database.
Aby nawiązać połączenie jako użytkownik kontenerowej bazy danych, string połączenia musi zawsze zawierać parametr dla bazy danych użytkownika. Aparat bazy danych używa tego parametru, aby wiedzieć, która baza danych jest odpowiedzialna za zarządzanie procesem uwierzytelniania.
Działanie zawartego użytkownika bazy danych jest ograniczone do uwierzytelniania bazy danych. Konto użytkownika bazy danych musi być tworzone niezależnie w każdej bazie danych, której potrzebuje użytkownik. Aby zmienić bazy danych, użytkownicy usługi SQL Database muszą utworzyć nowe połączenie. Użytkownicy zawartej bazy danych w programie SQL Server mogą zmieniać bazy danych, jeśli identyczny użytkownik znajduje się w innej bazie danych.
Na platformie Azure usługi SQL Database i Azure Synapse Analytics obsługują tożsamości z usługi Microsoft Entra ID (dawniej Azure Active Directory) jako użytkowników zawartej bazy danych. Usługa SQL Database obsługuje użytkowników zawartej bazy danych, którzy korzystają z uwierzytelniania programu SQL Server, ale usługa Azure Synapse Analytics nie. Aby uzyskać więcej informacji, zobacz Connect to SQL Database by using Microsoft Entra authentication (Nawiązywanie połączenia z usługą SQL Database przy użyciu uwierzytelniania entra firmy Microsoft).
W przypadku korzystania z uwierzytelniania entra firmy Microsoft użytkownicy mogą nawiązać połączenia z programu SQL Server Management Studio przy użyciu uniwersalnego uwierzytelniania firmy Microsoft Entra. Administratorzy mogą skonfigurować uwierzytelnianie uniwersalne, aby wymagać uwierzytelniania wieloskładnikowego, który weryfikuje tożsamość przy użyciu połączenia telefonicznego, wiadomości SMS, karty inteligentnej z numerem PIN lub powiadomienia aplikacji mobilnej. Aby uzyskać więcej informacji, zobacz Korzystanie z wieloskładnikowego uwierzytelniania Microsoft Entra.
W przypadku usług SQL Database i Azure Synapse Analytics nazwa bazy danych jest zawsze wymagana w parametrach połączenia. Nie musisz więc zmieniać parametrów połączenia podczas przełączania się z tradycyjnego modelu na model użytkownika zawartej bazy danych. W przypadku połączeń z programem SQL Server nazwa bazy danych musi zostać dodana do parametrów połączenia, jeśli nie jest jeszcze obecna.
Important
W przypadku korzystania z tradycyjnego modelu role na poziomie serwera i uprawnienia na poziomie serwera mogą ograniczać dostęp do wszystkich baz danych. W przypadku korzystania z zawartego modelu bazy danych właściciele baz danych i użytkownicy bazy danych, którzy mają ALTER uprawnienie DOWOLNY UŻYTKOWNIK, mogą udzielić dostępu do bazy danych. To uprawnienie zmniejsza kontrolę dostępu do wysoce uprzywilejowanych logowań serwera i rozszerza kontrolę dostępu, aby uwzględnić wysoce uprzywilejowanych użytkowników bazy danych.
Firewalls
SQL Server
W przypadku programu SQL Server reguły zapory systemu Windows obowiązują dla wszystkich połączeń i mają taki sam wpływ na logowania (połączenia w tradycyjnym modelu) oraz użytkowników baz danych zawartych. Aby uzyskać więcej informacji na temat Zapory systemu Windows, zobacz Konfigurowanie zapory systemu Windows na potrzeby dostępu do mechanizmu bazy danych.
Zapory usługi SQL Database
SQL Database umożliwia oddzielne reguły zapory dla połączeń na poziomie serwera (logowania) i połączeń na poziomie bazy danych (użytkowników baz danych zawartych). Gdy usługa SQL Database łączy się z bazą danych użytkownika, najpierw sprawdza reguły zapory bazy danych. Jeśli nie ma reguły zezwalanej na dostęp do bazy danych, usługa SQL Database sprawdza reguły zapory na poziomie serwera. Sprawdzanie reguł zapory na poziomie serwera wymaga dostępu do bazy danych serwera master usługi SQL Database.
Reguły zapory na poziomie bazy danych, w połączeniu z użytkownikami zawartej bazy danych, mogą wyeliminować konieczność uzyskania dostępu do master bazy danych serwera podczas połączenia. Wynikiem jest ulepszona skalowalność połączeń.
Aby uzyskać więcej informacji na temat reguł zapory usługi SQL Database, zobacz następujące artykuły:
- Zapora usługi Azure SQL Database
- Konfigurowanie ustawień zapory (Azure SQL Database)
- Sp_set_firewall_rule (Azure SQL Database)
- Sp_set_database_firewall_rule (Azure SQL Database)
Różnice składniowe
| Tradycyjny model | Model użytkownika zawartej bazy danych |
|---|---|
Po nawiązaniu połączenia z bazą master danych:CREATE LOGIN login_name WITH PASSWORD = 'strong_password';Następnie po nawiązaniu połączenia z bazą danych użytkownika: CREATE USER 'user_name' FOR LOGIN 'login_name'; |
Po nawiązaniu połączenia z bazą danych użytkownika:CREATE USER user_name WITH PASSWORD = 'strong_password'; |
| Tradycyjny model | Model użytkownika zawartej bazy danych |
|---|---|
Aby zmienić hasło w kontekście master bazy danych:ALTER LOGIN login_name WITH PASSWORD = 'strong_password'; |
Aby zmienić hasło w kontekście bazy danych użytkownika:ALTER USER user_name WITH PASSWORD = 'strong_password'; |
SQL Managed Instance
Usługa Azure SQL Managed Instance działa podobnie do środowiska lokalnego SQL Server w kontekście baz danych z zawartością. Pamiętaj, aby zmienić kontekst bazy danych z master bazy danych na bazę danych użytkownika podczas tworzenia zawartego użytkownika. Ponadto podczas ustawiania opcji zawierania nie powinno istnieć żadne aktywne połączenia z bazą danych użytkowników. Użyj poniższego kodu jako przewodnika.
Warning
Poniższy przykładowy skrypt używa kill instrukcji , aby zamknąć wszystkie procesy użytkownika w bazie danych. Przed uruchomieniem skryptu upewnij się, że rozumiesz konsekwencje tego skryptu i że pasuje on do twojej firmy. Upewnij się również, że żadne inne połączenia nie są aktywne w bazie danych usługi SQL Managed Instance, ponieważ skrypt zakłóci inne procesy uruchomione w bazie danych.
USE master;
SELECT * FROM sys.dm_exec_sessions
WHERE database_id = db_id('Test')
DECLARE @kill_string varchar(8000) = '';
SELECT @kill_string = @kill_string + 'KILL ' + str(session_id) + '; '
FROM sys.dm_exec_sessions
WHERE database_id = db_id('Test') and is_user_process = 1;
EXEC(@kill_string);
GO
sp_configure 'contained database authentication', 1;
GO
RECONFIGURE;
GO
SELECT * FROM sys.dm_exec_sessions
WHERE database_id = db_id('Test')
ALTER DATABASE Test
SET containment=partial
USE Test;
GO
CREATE USER Carlo
WITH PASSWORD='Enterpwdhere*'
SELECT containment_desc FROM sys.databases
WHERE name='Test'
Remarks
- Użytkownicy zawartej bazy danych muszą być włączeni dla każdego wystąpienia programu SQL Server. Aby uzyskać więcej informacji, zobacz Zawarte uwierzytelnianie bazy danych (opcja konfiguracji serwera).
- Użytkownicy i loginy bazy danych z nazwami, które się nie pokrywają, mogą współistnieć w aplikacjach.
- Załóżmy, że logowanie w
masterbazie danych nazywa się name1. Jeśli utworzysz użytkownika bazy danych w kontenerze o nazwie name1, gdy nazwa bazy danych zostanie podana w ciągu połączenia, kontekst użytkownika bazy danych zostanie wybrany zamiast kontekstu logowania na potrzeby nawiązywania połączenia z bazą danych. Oznacza to, że użytkownik zawartej bazy danych ma pierwszeństwo przed nazwami logowania, które mają taką samą nazwę. - W usłudze SQL Database nazwa użytkownika zawartej bazy danych nie może być taka sama jak nazwa konta administratora serwera.
- Konto administratora serwera usługi SQL Database nigdy nie może być użytkownikiem zawartej bazy danych. Administrator serwera ma wystarczające uprawnienia do tworzenia użytkowników zawartej bazy danych i zarządzania nimi. Administrator serwera może udzielić uprawnień użytkownikom zawartej bazy danych w bazach danych użytkowników.
- Ponieważ użytkownicy zawartej bazy danych są jednostkami na poziomie bazy danych, należy utworzyć użytkowników zawartej bazy danych w każdej bazie danych, w której będą używane. Tożsamość jest ograniczona do bazy danych. Tożsamość jest niezależna (we wszystkich aspektach) od użytkownika, który ma taką samą nazwę i to samo hasło w innej bazie danych na tym samym serwerze.
- Użyj tej samej siły haseł, które zwykle są używane do logowania.