Portieren der Datenbank mithilfe von enthaltenen Datenbanken

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed InstanceAzure Synapse Analytics

Verwenden Sie enthaltene Datenbankbenutzer, um SQL Server- und Azure SQL-Datenbank Verbindungen auf Datenbankebene zu authentifizieren. Eine enthaltene Datenbank ist eine Datenbank, die von anderen Datenbanken und von der Instanz von SQL Server oder SQL-Datenbank (und der Datenbank) isoliert ist, die master die Datenbank hosten.

SQL Server unterstützt eigenständige Datenbankbenutzer sowohl für die Windows- als auch für die SQL Server-Authentifizierung. Wenn Sie SQL-Datenbank verwenden, kombinieren Sie enthaltene Datenbankbenutzer mit Firewallregeln auf Datenbankebene.

In diesem Artikel werden die Vorteile der Verwendung des enthaltenen Datenbankmodells im Vergleich zu herkömmlichen Anmelde-/Benutzermodell und Windows- oder Serverebenen-Firewallregeln überprüft. Bestimmte Szenarien, Verwaltbarkeit oder Anwendungsgeschäftslogik erfordern möglicherweise weiterhin die verwendung der herkömmlichen Anmelde-/Benutzermodell- und Firewallregeln auf Serverebene.

Herkömmliches Anmelde- und Benutzermodell

Im herkömmlichen Verbindungsmodell stellen Windows-Benutzer oder Mitglieder von Windows-Gruppen eine Verbindung mit dem Datenbank-Engine her, indem Benutzer- oder Gruppenanmeldeinformationen bereitgestellt werden, die von Windows authentifiziert wurden. Oder Benutzer können sowohl einen Namen als auch ein Kennwort angeben und mithilfe der SQL Server-Authentifizierung eine Verbindung herstellen. In beiden Fällen muss in der Masterdatenbank eine Anmeldung vorhanden sein, die den Anmeldeinformationen zur Verbindungsherstellung entspricht.

Nachdem die Datenbank-Engine die Windows-Authentifizierung Anmeldeinformationen bestätigt oder die SQL Server-Authentifizierungsanmeldeinformationen authentifiziert hat, versucht die Verbindung in der Regel, eine Verbindung mit einer Benutzerdatenbank herzustellen. Um eine Verbindung mit einer Benutzerdatenbank herzustellen, muss die Anmeldung einem Datenbankbenutzer in der Benutzerdatenbank zugeordnet sein (d. h. zugeordnet). Die Verbindungszeichenfolge kann auch angeben, dass eine Verbindung mit einer bestimmten Datenbank hergestellt wird, die in SQL Server optional ist, aber in SQL-Datenbank erforderlich ist.

Das wichtige Prinzip ist, dass sowohl die Anmeldung (in der master Datenbank) als auch der Benutzer (in der Benutzerdatenbank) vorhanden sein und miteinander verknüpft sein müssen. Die Verbindung mit der Benutzerdatenbank hängt von der Anmeldung in der master Datenbank ab. Diese Abhängigkeit beschränkt die Möglichkeit der Datenbank, auf eine andere Host-SQL Server-Instanz oder Azure SQL-Datenbank Server verschoben zu werden.

Wenn eine Verbindung mit der master Datenbank nicht verfügbar ist (z. B. wird ein Failover ausgeführt), erhöht sich die Gesamtverbindungszeit, oder die Verbindung kann zeitüberschreitungen. Eine nicht verfügbare Verbindung kann die Verbindungsskalierbarkeit verringern.

Eigenständiges Datenbankbenutzermodell

Im enthaltenen Datenbankbenutzermodell ist die Anmeldung in der master Datenbank nicht vorhanden. Stattdessen erfolgt der Authentifizierungsprozess in der Benutzerdatenbank. Der Datenbankbenutzer in der Benutzerdatenbank verfügt nicht über eine zugeordnete Anmeldung in der master Datenbank.

Das enthaltene Datenbankbenutzermodell unterstützt sowohl Windows-Authentifizierung als auch die SQL Server-Authentifizierung. Sie können sie sowohl in SQL Server als auch in SQL-Datenbank verwenden.

Um eine Verbindung als enthaltener Datenbankbenutzer herzustellen, muss die Verbindungszeichenfolge immer einen Parameter für die Benutzerdatenbank enthalten. Die Datenbank-Engine verwendet diesen Parameter, um zu wissen, welche Datenbank für die Verwaltung des Authentifizierungsprozesses verantwortlich ist.

Die Aktivität des enthaltenen Datenbankbenutzers ist auf die Authentifizierungsdatenbank beschränkt. Das Datenbankbenutzerkonto muss in jeder Datenbank, die der Benutzer benötigt, unabhängig erstellt werden. Um Datenbanken zu ändern, müssen SQL-Datenbank Benutzer eine neue Verbindung erstellen. Enthaltene Datenbankbenutzer in SQL Server können Datenbanken ändern, wenn ein identischer Benutzer in einer anderen Datenbank vorhanden ist.

In Azure unterstützen SQL-Datenbank und Azure Synapse Analytics Identitäten von Microsoft Entra ID (früher Azure Active Directory) als enthaltene Datenbankbenutzer. SQL-Datenbank unterstützt enthaltene Datenbankbenutzer, die die SQL Server-Authentifizierung verwenden, aber Azure Synapse Analytics nicht. Weitere Informationen finden Sie unter Verbinden zum SQL-Datenbank mithilfe der Microsoft Entra-Authentifizierung.

Wenn Sie die Microsoft Entra-Authentifizierung verwenden, können Benutzer Verbindungen mit SQL Server Management Studio herstellen, indem Sie die universelle Microsoft Entra-Authentifizierung verwenden. Administratoren können die universelle Authentifizierung so konfigurieren, dass eine mehrstufige Authentifizierung erforderlich ist, wodurch die Identität mithilfe eines Telefonanrufs, einer Sms, einer intelligenten Karte mit PIN oder einer mobilen App-Benachrichtigung überprüft wird. Weitere Informationen finden Sie unter Verwenden der Multi-Faktor-Authentifizierung von Microsoft Entra.

Für SQL-Datenbank und Azure Synapse Analytics ist der Datenbankname immer im Verbindungszeichenfolge erforderlich. Daher müssen Sie die Verbindungszeichenfolge nicht ändern, wenn Sie vom herkömmlichen Modell zum enthaltenen Datenbankbenutzermodell wechseln. Für SQL Server-Verbindungen muss der Name der Datenbank dem Verbindungszeichenfolge hinzugefügt werden, sofern er noch nicht vorhanden ist.

Wichtig

Wenn Sie das herkömmliche Modell verwenden, können die Rollen und Berechtigungen auf Serverebene den Zugriff auf alle Datenbanken einschränken. Wenn Sie das enthaltene Datenbankmodell verwenden, können Datenbankbesitzer und Datenbankbenutzer, die über die ALTER ANY USER-Berechtigung verfügen, Zugriff auf die Datenbank gewähren. Diese Berechtigung reduziert die Zugriffssteuerung von Serveranmeldungen mit hoher Berechtigung und erweitert die Zugriffssteuerung, um Benutzer mit hoher Berechtigungsstufe einzuschließen.

Firewalls

SQL Server

Für SQL Server gelten Windows-Firewallregeln für alle Verbindungen und haben dieselben Auswirkungen auf Anmeldungen (herkömmliche Modellverbindungen) und enthaltene Datenbankbenutzer. Weitere Informationen zur Windows-Firewall finden Sie unter Konfigurieren der Windows-Firewall für Datenbank-Engine Zugriff.

SQL-Datenbank Firewalls

SQL-Datenbank ermöglicht separate Firewallregeln für Verbindungen auf Serverebene (Anmeldungen) und für Verbindungen auf Datenbankebene (enthaltene Datenbankbenutzer). Wenn SQL-Datenbank eine Verbindung mit einer Benutzerdatenbank herstellt, überprüft sie zuerst Die Firewallregeln der Datenbank. Wenn keine Regel vorhanden ist, die den Zugriff auf die Datenbank zulässt, überprüft SQL-Datenbank die Firewallregeln auf Serverebene. Das Überprüfen von Firewallregeln auf Serverebene erfordert Zugriff auf die Datenbank des master SQL-Datenbank Servers.

Firewallregeln auf Datenbankebene, kombiniert mit enthaltenen Datenbankbenutzern, können die Notwendigkeit des Zugriffs auf die master Datenbank des Servers während der Verbindung vermeiden. Das Ergebnis ist eine verbesserte Verbindungsskalierbarkeit.

Weitere Informationen zu SQL-Datenbank Firewallregeln finden Sie in den folgenden Themen:

Syntaxunterschiede

Herkömmliches Modell Eigenständiges Datenbankbenutzermodell
Wenn Sie mit der master Datenbank verbunden sind:

CREATE LOGIN login_name WITH PASSWORD = 'strong_password';

Wenn Sie dann mit einer Benutzerdatenbank verbunden sind:

CREATE USER 'user_name' FOR LOGIN 'login_name';
Wenn Sie mit einer Benutzerdatenbank verbunden sind:

CREATE USER user_name WITH PASSWORD = 'strong_password';
Herkömmliches Modell Eigenständiges Datenbankbenutzermodell
So ändern Sie ein Kennwort im Kontext der master Datenbank:

ALTER LOGIN login_name WITH PASSWORD = 'strong_password';
So ändern Sie ein Kennwort im Kontext der Benutzerdatenbank:

ALTER USER user_name WITH PASSWORD = 'strong_password';

SQL Managed Instance

Azure SQL Managed Instance verhält sich im Kontext von eigenständigen Datenbanken wie lokale SQL Server-Instanzen. Achten Sie darauf, den Kontext Ihrer Datenbank von der Masterdatenbank in die Benutzerdatenbank zu ändern, wenn Sie ihren enthaltenen Benutzer erstellen. Darüber hinaus sollten keine aktiven Verbindungen mit der Benutzerdatenbank vorhanden sein, wenn Sie die Eindämmungsoption festlegen. Verwenden Sie den folgenden Code als Leitfaden.

Warnung

Das folgende Beispielskript verwendet eine kill Anweisung, um alle Benutzerprozesse in der Datenbank zu schließen. Stellen Sie sicher, dass Sie die Folgen dieses Skripts verstehen und dass es ihrem Unternehmen entspricht, bevor Sie es ausführen. Stellen Sie außerdem sicher, dass keine anderen Verbindungen in Ihrer SQL-verwaltete Instanz-Datenbank aktiv sind, da das Skript andere Prozesse stört, die in der Datenbank ausgeführt werden.

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'

Hinweise

  • Enthaltene Datenbankbenutzer müssen für jede Instanz von SQL Server aktiviert sein. Weitere Informationen finden Sie unter Enthaltene Datenbankauthentifizierung (Serverkonfigurationsoption).
  • Enthaltene Datenbankbenutzer und Anmeldungen mit nicht überlappenden Namen können in Ihren Anwendungen koexistieren.
  • Gehen Sie davon aus, dass eine Anmeldung in der master Datenbank den Namen 1 aufweist. Wenn Sie einen enthaltenen Datenbankbenutzer namens Name1 erstellen, wird beim Angeben eines Datenbanknamens im Verbindungszeichenfolge der Kontext des Datenbankbenutzers über den Anmeldekontext für die Verbindung mit der Datenbank ausgewählt. Das heißt, der enthaltene Datenbankbenutzer hat Vorrang vor Anmeldungen mit demselben Namen.
  • In SQL-Datenbank kann der Name des enthaltenen Datenbankbenutzers nicht mit dem Namen des Serveradministratorkontos übereinstimmen.
  • Das SQL-Datenbank Serveradministratorkonto kann niemals ein enthaltener Datenbankbenutzer sein. Der Serveradministrator verfügt über ausreichende Berechtigungen zum Erstellen und Verwalten von eigenständigen Datenbankbenutzern. Der Serveradministrator kann eigenständigen Datenbankbenutzern Berechtigungen für die Benutzerdatenbanken erteilen.
  • Da es sich bei den enthaltenen Datenbankbenutzern um Prinzipale auf Datenbankebene handelt, müssen Sie enthaltene Datenbankbenutzer in jeder Datenbank erstellen, in der Sie sie verwenden würden. Die Identität ist auf die Datenbank beschränkt. Die Identität ist unabhängig (in allen Aspekten) von einem Benutzer, der denselben Namen und dasselbe Kennwort in einer anderen Datenbank auf demselben Server hat.
  • Verwenden Sie die gleiche Stärke von Kennwörtern, die Sie normalerweise für Anmeldungen verwenden würden.