CREATE USER (Transact-SQL)

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed InstanceAzure Synapse AnalyticsSQL-Datenbank in Microsoft Fabric

Fügt der aktuellen Datenbank einen Benutzer hinzu. Die folgende Liste zeigt die 13 Benutzertypen zusammen mit einer Auswahl der grundlegendsten Syntax:

Note

Während Microsoft Entra-ID der neue Name für Azure Active Directory (Azure AD) ist, bleibt Azure AD in einigen fest kodierten Elementen wie Benutzeroberfläche-Feldern, Verbindungsanbietern, Fehlercodes und Cmdlets erhalten, um Störungen in bestehenden Umgebungen zu vermeiden. In diesem Artikel sind die beiden Namen austauschbar.

Benutzer basierend auf Anmeldungen in master

  • Benutzer mit Anmeldenamen auf Basis eines Windows Active Directory-Kontos. CREATE USER [Contoso\test];

  • Benutzer mit Anmeldenamen auf Basis einer Windows-Gruppe. CREATE USER [Contoso\Sales];

  • Benutzer basiert auf einem Login, der SQL Server-Authentifizierung verwendet. CREATE USER Mary;

  • Benutzer basierend auf einer Microsoft Entra-Anmeldung. CREATE USER [test@contoso.com] FROM LOGIN [test@contoso.com]

    Note

    Microsoft Entra-Serverprinzipale (Anmeldungen) befinden sich derzeit in der öffentlichen Vorschau für Azure SQL-Datenbank.

    Note

    Die SQL-Datenbank in Microsoft Fabric unterstützt keine Logins oder Nutzer basierend auf Logins.

Benutzer, die sich in der Datenbank authentifizieren – Verwenden Sie geschlossene Benutzer, um Ihre Datenbank portabler zu machen.
Immer erlaubt in Azure SQL-Datenbank. Nur in einer eigenständigen Datenbank in SQL Server zugelassen.

  • Benutzer auf Basis eine Windows-Benutzers ohne Anmeldenamen. CREATE USER [Contoso\test];

  • Benutzer auf Basis einer Windows-Gruppe ohne Anmeldenamen. CREATE USER [Contoso\Sales];

  • Benutzer in SQL-Datenbank oder Azure Synapse Analytics basierend auf einem Microsoft Entra-Benutzer. CREATE USER [test@contoso.com] FROM EXTERNAL PROVIDER;

  • Benutzer einer eigenständigen Datenbank mit Kennwort. (Nicht in Azure Synapse Analytics verfügbar.) CREATE USER Mary WITH PASSWORD = '********';

Benutzer auf Basis von Windows-Prinzipalen, die eine Verbindung über Windows-Gruppenanmeldenamen herstellen

  • Benutzer auf Basis eines Windows-Benutzers ohne Anmeldenamen, die über die Mitgliedschaft in einer Windows-Gruppe eine Verbindung mit Datenbank-Engine herstellen können. CREATE USER [Contoso\test];

  • Benutzer auf Basis einer Windows-Gruppe ohne Anmeldenamen, die über die Mitgliedschaft in einer anderen Windows-Gruppe eine Verbindung mit Datenbank-Engine herstellen können. CREATE USER [Contoso\test];

Benutzer, die sich nicht authentifizieren können – Diese Benutzer können sich nicht bei SQL Server oder SQL-Datenbank anmelden.

  • Benutzer ohne Anmeldenamen. Kann sich nicht anmelden, kann aber Berechtigungen erteilt werden. CREATE USER CustomApp WITHOUT LOGIN;
  • Benutzer auf Basis eines Zertifikats. Die Anmeldung ist nicht möglich, kann aber Berechtigungen erteilt werden und Module signieren. CREATE USER TestProcess FOR CERTIFICATE Contoso50;
  • Benutzer auf Basis eines asymmetrischen Schlüssels. Die Anmeldung ist nicht möglich, kann aber Berechtigungen erteilt werden und Module signieren. CREATE User TestProcess FROM ASYMMETRIC KEY Contoso09;

Transact-SQL-Syntaxkonventionen

Syntax

Syntax für SQL Server, Azure SQL-Datenbank und azure SQL Managed Instance

-- Syntax Users based on logins in master
CREATE USER user_name
    [
        { FOR | FROM } LOGIN login_name
    ]
    [ WITH <limited_options_list> [ , ... ] ]
[ ; ]

-- Users that authenticate at the database
CREATE USER
    {
      windows_principal [ WITH <options_list> [ , ... ] ]

    | user_name WITH PASSWORD = 'password' [ , <options_list> [ , ... ]
    | Microsoft_Entra_principal FROM EXTERNAL PROVIDER [ WITH OBJECT_ID = 'objectid' ]
    }

 [ ; ]

-- Users based on Windows principals that connect through Windows group logins
CREATE USER
    {
          windows_principal [ { FOR | FROM } LOGIN windows_principal ]
        | user_name { FOR | FROM } LOGIN windows_principal
}
    [ WITH <limited_options_list> [ , ... ] ]
[ ; ]

-- Users that cannot authenticate
CREATE USER user_name
    {
         WITHOUT LOGIN [ WITH <limited_options_list> [ , ... ] ]
       | { FOR | FROM } CERTIFICATE cert_name
       | { FOR | FROM } ASYMMETRIC KEY asym_key_name
    }
 [ ; ]

<options_list> ::=
      DEFAULT_SCHEMA = schema_name
    | DEFAULT_LANGUAGE = { NONE | lcid | language name | language alias }
    | SID = sid
    | ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = [ ON | OFF ] ]

<limited_options_list> ::=
      DEFAULT_SCHEMA = schema_name ]
    | ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = [ ON | OFF ] ]

-- SQL Database syntax when connected to a federation member
CREATE USER user_name
[;]

-- Syntax for users based on Microsoft Entra logins for Azure SQL Managed Instance
CREATE USER user_name
    [   { FOR | FROM } LOGIN login_name  ]
    | FROM EXTERNAL PROVIDER
    [ WITH <limited_options_list> [ , ... ] ]
[ ; ]

<limited_options_list> ::=
      DEFAULT_SCHEMA = schema_name
    | DEFAULT_LANGUAGE = { NONE | lcid | language name | language alias }
    | ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = [ ON | OFF ] ]

Syntax für Azure Synapse Analytics

CREATE USER user_name
    [ { { FOR | FROM } { LOGIN login_name }
      | WITHOUT LOGIN
    ]
    [ WITH DEFAULT_SCHEMA = schema_name ]
[;]

CREATE USER Microsoft_Entra_principal FROM EXTERNAL PROVIDER
    [ WITH DEFAULT_SCHEMA = schema_name ]
[;]

Syntax für SQL-Datenbanken in Microsoft Fabric und Azure SQL-Datenbank

CREATE USER
    {
    Microsoft_Entra_principal FROM EXTERNAL PROVIDER [ WITH <limited_options_list> [ , ... ] ]
    | Microsoft_Entra_principal WITH <options_list> [ , ... ]
    }
 [ ; ]

-- Users that cannot authenticate
CREATE USER user_name
    {    WITHOUT LOGIN [ WITH DEFAULT_SCHEMA = schema_name ]
       | { FOR | FROM } CERTIFICATE cert_name
       | { FOR | FROM } ASYMMETRIC KEY asym_key_name
    }
 [ ; ]

<limited_options_list> ::=
      DEFAULT_SCHEMA = schema_name
    | OBJECT_ID = 'objectid'

<options_list> ::=
      DEFAULT_SCHEMA = schema_name
    | SID = sid
    | TYPE = { X | E }

Arguments

user_name

Gibt den Namen an, mit dem der Benutzer innerhalb dieser Datenbank identifiziert wird. user_name ist vom Datentyp sysname. Der Name kann bis zu 128 Zeichen lang sein. Wenn Sie einen Benutzer auf Basis eines Windows-Prinzipals erstellen, wird der Prinzipalname von Windows als Benutzername verwendet, es sei denn, ein abweichender Benutzername wird angegeben.

LOGIN login_name

Gibt die Anmeldung an, für die der Datenbankbenutzer erstellt wird. login_name muss ein gültiger Anmeldename im Server sein. Kann eine Anmeldung basierend auf einem Windows-Prinzipal (Benutzer oder Gruppe), einer Anmeldung mit SQL Server-Authentifizierung oder einer Anmeldung mit einem Microsoft Entra-Prinzipal (Benutzer, Gruppe oder Anwendung) sein. Wird diese SQL Server-Anmeldung in die Datenbank eingetragen, erhält sie den Namen und die ID des Datenbankbenutzers, der erstellt wird. Verwenden Sie das Format [<domainName>\<loginName>], wenn Sie einen von einem Windows-Prinzipal zugeordneten Anmeldenamen erstellen. Beispiele finden Sie unter Syntaxzusammenfassung.

Wenn die CREATE USER Anweisung die einzige Anweisung in einem SQL-Batch ist, unterstützt Azure SQL-Datenbank die WITH-KlauselLOGIN. Wenn die CREATE USER Anweisung nicht die einzige Anweisung in einem SQL-Batch ist oder in dynamischem SQL läuft, wird die WITH-Klausel LOGIN nicht unterstützt.

MIT DEFAULT_SCHEMA = schema_name

Gibt das erste vom Server durchsuchte Schema an, wenn er die Namen von Objekten für diesen Datenbankbenutzer aufgelöst.

'windows_principal'

Gibt den Windows-Prinzipal an, für den der Datenbankbenutzer erstellt wird. windows_principal kann ein Windows-Benutzer oder eine Windows-Gruppe sein. Der Benutzer wird auch dann erstellt, wenn kein Anmeldename für windows_principal vorhanden ist. Wenn der windows_principal beim Herstellen einer Verbindung mit SQL Server über keinen Anmeldenamen verfügt, muss der Windows-Prinzipal sich über die Mitgliedschaft in einer Windows-Gruppe mit einem Anmeldenamen bei der Datenbank-Engine authentifizieren, oder die eigenständige Datenbank muss in der Verbindungszeichenfolge als Anfangskatalog angegeben sein. Verwenden Sie das Format [<domainName>\<loginName>], wenn Sie einen Benutzer aus einem Windows-Prinzipal erstellen. Beispiele finden Sie unter Syntaxzusammenfassung. Benutzer auf Grundlage von Active Directory-Benutzern sind auf Namen mit weniger als 21 Zeichen beschränkt.

'Microsoft_Entra_principal'

Gilt für: SQL Server 2022 (16.x) und spätere Versionen, SQL Database, SQL Managed Instance, Azure Synapse Analytics, SQL-Datenbank in Microsoft Fabric

Gibt den Microsoft Entra-Prinzipal an, für den der Datenbankbenutzer erstellt wird. Die Microsoft_Entra_principal kann ein Microsoft Entra-Benutzer, eine Microsoft Entra-Gruppe oder eine Microsoft Entra-Anwendung sein. (Microsoft Entra-Benutzer können keine Windows-Authentifizierungsanmeldungen in SQL-Datenbank haben; nur Datenbankbenutzer.) Die Verbindungszeichenfolge muss die enthaltene Datenbank als ursprünglichen Katalog angeben.

Für Microsoft Entra-Prinzipien verlangt die CREATE USER Syntax:

  • UserPrincipalName des Microsoft Entra-Objekts für Microsoft Entra-Benutzer.

    • CREATE USER [test@contoso.com] FROM EXTERNAL PROVIDER;
    • CREATE USER [alice@fabrikam.onmicrosoft.com] FROM EXTERNAL PROVIDER;
  • Microsoft Entra-Serverprinzipale (Anmeldungen) führen das Erstellen von Benutzern ein, die Microsoft Entra-Anmeldungen in der master Datenbank zugeordnet sind. Beispiel: CREATE USER [test@contoso.com] FROM LOGIN [test@contoso.com];

  • Microsoft Entra-Benutzer und Dienstprinzipale (Anwendungen), die Mitglieder von mehr als 2048 Microsoft Entra-Sicherheitsgruppen sind, werden nicht unterstützt, um sich bei Datenbanken in Azure SQL-Datenbank, Azure SQL verwaltete Instanz oder Azure Synapse anzumelden.

  • DisplayName des Microsoft Entra-Objekts für Microsoft Entra-Gruppen und Microsoft Entra-Anwendungen. Für die fiktive Sicherheitsgruppe Nurses verwenden Sie also Folgendes:

    • CREATE USER [Nurses] FROM EXTERNAL PROVIDER;

Weitere Informationen finden Sie unter Herstellen einer Verbindung mit SQL-Datenbank unter Verwendung der Microsoft Entra-Authentifizierung.

Weitere Informationen zur Microsoft Entra-Authentifizierung in SQL Server finden Sie im Lernprogramm: Einrichten der Microsoft Entra-Authentifizierung für SQL Server, aktiviert von Azure Arc.

WITH PASSWORD = 'Kennwort'

Gilt für: SQL Server 2012 (11.x) und neuere Versionen, SQL Database.

Kann nur in einer eigenständigen Datenbank verwendet werden. Gibt das Kennwort für den Benutzer an, der erstellt wird.

Ab SQL Server 2012 (11.x) verwendeten SQL Server und Azure SQL-Datenbank einen SHA-512-Hash kombiniert mit einem 32-Bit-zufälligen und einzigartigen Salt. Diese Methode machte es statistisch unzumutbar, dass Angreifer Kennwörter ableiten können.

SQL Server 2025 (17.x) führt einen iterierten Hashalgorithmus ein, RFC2898, auch bekannt als kennwortbasierte Schlüsselableitungsfunktion (PBKDF). Dieser Algorithmus verwendet weiterhin SHA-512, aber hashet das Kennwort mehrmals (100.000 Iterationen), was brute-force-Angriffe erheblich verlangsamt. Diese Änderung verbessert den Kennwortschutz als Reaktion auf sich entwickelnde Sicherheitsbedrohungen und hilft Kunden, NIST SP 800-63b-Richtlinien einzuhalten. Diese Sicherheitsverbesserung verwendet einen stärkeren Hashingalgorithmus, der die Anmeldezeit für SQL-Authentifizierungsanmeldungen leicht erhöhen kann. Die Auswirkung ist in Umgebungen mit Verbindungspooling im Allgemeinen niedriger, kann aber in Szenarien ohne Pooling oder bei der eng überwachten Anmeldelatenz spürbarer sein.

OHNE LOGIN

Gibt an, dass der Benutzer keinem vorhandenen Anmeldenamen zugeordnet werden sollte.

CERTIFICATE cert_name

Gilt für: SQL Server 2008 (10.0.x) und spätere Versionen, SQL-Datenbank, SQL-Datenbank in Microsoft Fabric

Gibt das Zertifikat an, für das der Datenbankbenutzer erstellt wird.

ASYMMETRIC KEY asym_key_name

Gilt für: SQL Server 2008 (10.0.x) und spätere Versionen, SQL-Datenbank, SQL-Datenbank in Microsoft Fabric

Gibt den asymmetrischen Schlüssel an, für den der Datenbankbenutzer erstellt wird.

DEFAULT_LANGUAGE = { NONE | <lcid> | <Sprachname> | <sprache salias> }

Gilt für: SQL Server 2012 (11.x) und spätere Versionen, SQL Database

Gibt die Standardsprache für den neuen Benutzer an. Wenn Sie eine Standardsprache für den Benutzer angeben und später die Standardsprache der Datenbank ändern, bleibt die Standardsprache des Benutzers wie angegeben. Wenn Sie keine Standardsprache angeben, erhält der Benutzer die Standardsprache der Datenbank. Wenn Sie keine Standardsprache für den Benutzer angeben und später die Standardsprache der Datenbank ändern, ändert sich die Standardsprache des Benutzers zur neuen Standardsprache für die Datenbank.

Important

DEFAULT_LANGUAGE wird nur für Benutzer von eigenständigen Datenbanken verwendet.

SID = sid

Gilt für: SQL Server 2012 (11.x) und neuere Versionen sowie für SQL-Datenbanken in Microsoft Fabric.

In SQL Server 2012 (11.x) und neueren Versionen gilt dies nur für Benutzer mit Passwörtern (SQL Server-Authentifizierung) in einer enthaltenen Datenbank. Gibt die SID des neuen Datenbankbenutzers an. Wenn du diese Option nicht auswählst, weist SQL Server automatisch ein SID zu. Erstellen Sie mit dem SID-Parameter Benutzer in mehreren Datenbanken, die die gleiche Identität (SID) aufweisen. Diese Funktion ist nützlich, wenn Benutzer in mehreren Datenbanken erstellt werden, um sich auf das Always On-Failover vorzubereiten. Um die SID eines Benutzers zu bestimmen, suchen sys.database_principalsSie .

In der SQL-Datenbank in Microsoft Fabric sid sollte es sich um eine gültige ID des angegebenen Microsoft Entra-Prinzipals handeln. Wenn der Hauptmann ein Benutzer oder eine Gruppe ist, sollte die ID eine Microsoft Entra-Objekt-ID des Benutzers oder der Gruppe sein. Wenn der Microsoft Entra-Principal ein Service Principal (eine Anwendung oder eine verwaltete Identität) ist, sollte die ID eine Anwendungs-ID oder eine Client-ID sein. Die angegebene ID muss ein binary(16) Wert sein. Die Datenbank-Engine überprüft die angegebene ID in Microsoft Entra nicht. Wenn du das Argument verwendestSID, musst du .TYPE

TYPE = [ E | X ]

Gilt für: SQL-Datenbank in Microsoft Fabric und Azure SQL-Datenbank.

Gibt den Typ eines Microsoft Entra-Prinzipals an. E gibt an, dass der Prinzipal ein Benutzer oder ein Dienstprinzipal (eine Anwendung oder eine verwaltete Identität) ist. X gibt an, dass der Prinzipal eine Gruppe ist.

ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = [ EIN | OFF ]

Gilt für: SQL Server 2016 (13.x) und spätere Versionen, SQL Database.

Verhindert bei Massenkopiervorgängen kryptografische Metadatenüberprüfungen auf dem Server. Dadurch kann der Benutzer durch Massenkopiervorgänge Daten zwischen Tabellen oder Datenbanken austauschen, ohne dabei die Daten zu verschlüsseln. Der Standardwert ist OFF.

Warning

Die falsche Verwendung dieser Option kann zur Datenbeschädigung führen. Weitere Informationen finden Sie unter Migrieren von durch Always Encrypted geschützten sensiblen Daten.

VOM EXTERNEN ANBIETER

Gilt für: SQL Server 2022 (16.x) und spätere Versionen, SQL Database, Azure SQL Managed Instance, SQL-Datenbank in Microsoft Fabric

Gibt an, dass der Prinzipal für die Microsoft Entra-Authentifizierung gilt. SQL Server überprüft automatisch den bereitgestellten Prinzipalnamen in Microsoft Entra.

Wenn der Prinzipal, der die CREATE USER Erklärung ausgibt, ein Microsoft Entra-Benutzerprinzipal ist, muss der Hauptmann oder die Gruppe des Prinzipals in Microsoft Entra die Rolle Verzeichnisleser übernehmen.

Wenn es CREATE USER sich bei SQL-Datenbank und Azure SQL verwaltete Instanz um einen Dienstprinzipal handelt, muss sich die Identität des Datenbankservers oder der verwalteten Instanz in der Rolle "Verzeichnisleser" in Microsoft Entra befinden.

In der SQL-Datenbank in Microsoft Fabric kannst du nicht verwendenFROM EXTERNAL PROVIDER, wenn eine Principal-Ausgabe CREATE USER ein Service Principal in Microsoft Entra ist. Dienstprinzipale müssen TYPE und SID Argumente verwenden, um Benutzer für Microsoft Entra-Prinzipale zu erstellen.

MIT OBJECT_ID = 'Objektid'

Gilt für: SQL Server 2025 (17.x) und spätere Versionen, SQL Database, Azure SQL Managed Instance, SQL-Datenbank in Microsoft Fabric

Gibt die Microsoft Entra-Objekt-ID an. Wenn du das OBJECT_IDangibst, kann das user_name ein benutzerdefiniertes Alias sein, das aus dem ursprünglichen Hauptanzeigennamen mit einem angehängten Suffix gebildet wird. Die user_name muss ein eindeutiger Name in der sys.database_principals Ansicht sein und alle anderen sysname Einschränkungen einhalten. Weitere Informationen zur Nutzung der WITH OBJECT_ID Option finden Sie unter Microsoft Entra-Logins und Benutzer mit nicht eindeutigen Anzeigenamen.

Note

Ab SQL Server 2025 (17.x) wird die WITH OBJECT_ID Option für Microsoft Entra-Logins und Benutzer mit eindeutigen Anzeigenamen unterstützt.

Wenn der Anzeigename des Service Principal kein Duplikat ist, verwenden Sie die Standardanweisung CREATE LOGIN oder CREATE USER Default. Bei der WITH OBJECT_ID Erweiterung handelt es sich um ein Problembehandlungsreparaturelement, das für die Verwendung mit Nicht-Dienstprinzipalen implementiert wird. Die Verwendung mit einem eindeutigen Dienstprinzipal wird nicht empfohlen. Die Verwendung der WITH OBJECT_ID Erweiterung für einen Dienstprinzipal, ohne ein Suffix hinzuzufügen, wird erfolgreich ausgeführt, aber es ist nicht offensichtlich, für welchen Dienstprinzipal die Anmeldung oder der Benutzer erstellt wurde. Es wird empfohlen, ein Alias zu erstellen, indem man ein Suffix verwendet, um den Service Principal eindeutig zu identifizieren.

Remarks

Wenn du weglässtFOR LOGIN, wird der neue Datenbankbenutzer auf den SQL Server-Login mit demselben Namen zugeordnet.

Das Standardschema ist das erste Schema, nach dem der Server sucht, wenn er die Namen von Objekten für diesen Datenbankbenutzer auflöst. Sofern nicht anders angegeben, ist das Standardschema der Besitzer von Objekten, die von diesem Datenbankbenutzer erstellt wurden.

Wenn der Benutzer ein Standardschema hat, verwendet der Server dieses Standardschema. Wenn der Benutzer kein Standardschema hat, aber Mitglied einer Gruppe ist, die ein Standardschema hat, verwendet der Server das Standardschema der Gruppe. Wenn der Benutzer kein Standardschema hat und mehreren Gruppen angehört, verwendet der Server das konfigurierte Standardschema der Windows-Gruppe mit der niedrigsten principal_id unter den Gruppen, die ein explizit festgelegtes Standardschema haben. Du kannst nicht explizit eines der verfügbaren Standardschemata als bevorzugtes Schema auswählen. Wenn der Server kein Standardschema für einen Benutzer bestimmen kann, verwendet er das Schema dbo .

Du kannst vor der Erstellung des Schemas, auf das es zeigt, festlegen DEFAULT_SCHEMA .

Man kann nicht angeben DEFAULT_SCHEMA , wenn man einen Benutzer erstellt, der einem Zertifikat oder einem asymmetrischen Schlüssel zugeordnet ist.

Der Server ignoriert den Wert von DEFAULT_SCHEMA , wenn der Benutzer Mitglied der sysadmin festen Serverrolle ist. Alle Mitglieder der sysadmin festen Serverrolle haben ein Standardschema von dbo.

Die Klausel WITHOUT LOGIN erstellt einen Benutzer, der nicht mit einem SQL-authentifizierten Login zugeordnet ist. Er kann als guest Verbindungen mit anderen Datenbanken herstellen. Du kannst diesem Nutzer Berechtigungen ohne Login zuweisen. Wenn sich der Sicherheitskontext auf einen Benutzer ohne Login ändert, erhält der ursprüngliche Benutzer die Berechtigungen des Benutzers ohne Login. Ein Beispiel finden Sie unter D. Erstellen und Verwendung eines Benutzers ohne Login.

Nur Benutzernamen, die Windows-Prinzipalen zugeordnet sind, können den umgekehrten Schrägstrich ( \ ) enthalten.

Du kannst es nicht verwenden CREATE USER , um einen Gastbenutzer zu erstellen, weil der Gastbenutzer bereits in jeder Datenbank existiert. Sie können den Gastbenutzer aktivieren, indem Sie ihm CONNECT eine Berechtigung erteilen, wie gezeigt:

GRANT CONNECT TO guest; 
GO  

Sie können Informationen über Datenbankbenutzer in der sys.database_principals Katalogansicht einsehen.

Verwenden Sie die SyntaxerweiterungFROM EXTERNAL PROVIDER, um Microsoft Entra-Anmeldungen auf Serverebene in Azure SQL-Datenbank und Azure SQL verwaltete Instanz zu erstellen. Durch die Verwendung von Microsoft Entra-Logins können Sie datenbankebene Microsoft Entra-Prinzipien auf Serverebene Microsoft Entra-Logins zuordnen. Um einen Microsoft Entra-Benutzer aus einem Microsoft Entra-Login zu erstellen, verwenden Sie folgende Syntax:

CREATE USER [Microsoft_Entra_principal] FROM LOGIN [Microsoft Entra login];

Wenn Sie den Benutzer in der Azure SQL-Datenbank erstellen, muss die login_name einem bestehenden Microsoft Entra-Login entsprechen. Andernfalls erzeugt die Verwendung der FROM EXTERNAL PROVIDER Klausel nur einen Microsoft Entra-Benutzer ohne Login in der master Datenbank. Zum Beispiel erzeugt der folgende Befehl einen enthaltenen Benutzer:

CREATE USER [test@contoso.com] FROM EXTERNAL PROVIDER;

Syntaxzusammenfassung

Benutzer basierend auf Anmeldungen in master

Die folgende Liste enthält mögliche Syntaxen für Benutzer auf Basis von Anmeldenamen. Die Standardschemaoptionen sind nicht aufgeführt.

  • CREATE USER [Domain1\WindowsUserTest]
  • CREATE USER [Domain1\WindowsUserTest] FOR LOGIN Domain1\WindowsUserTest
  • CREATE USER [Domain1\WindowsUserTest] FROM LOGIN Domain1\WindowsUserTest
  • CREATE USER [Domain1\WindowsGroupManagers]
  • CREATE USER [Domain1\WindowsGroupManagers] FOR LOGIN [Domain1\WindowsGroupManagers]
  • CREATE USER [Domain1\WindowsGroupManagers] FROM LOGIN [Domain1\WindowsGroupManagers]
  • CREATE USER SQLAUTHLOGIN
  • CREATE USER SQLAUTHLOGIN FOR LOGIN SQLAUTHLOGIN
  • CREATE USER SQLAUTHLOGIN FROM LOGIN SQLAUTHLOGIN

Benutzer mit Authentifizierung bei der Datenbank

Die folgende Liste enthält mögliche Syntaxen für Benutzer, die nur in einer eigenständigen Datenbank verwendet werden können. Die erstellten Benutzer weisen keine Beziehung zu Anmeldenamen in der master-Datenbank auf. Das Standardschema und die Sprachoptionen sind nicht aufgeführt.

Important

Diese Syntax gewährt Benutzern Zugriff auf die Datenbank sowie neuen Zugriff auf Datenbank-Engine.

  • CREATE USER [Domain1\WindowsUserTest]
  • CREATE USER [Domain1\WindowsGroupManagers]
  • CREATE USER Test WITH PASSWORD = '<strong password>'

Benutzer, die auf Windows-Prinzipale ohne Anmeldungen in der master Systemdatenbank basieren

Die folgende Liste zeigt mögliche Syntax für Benutzer, die über eine Windows-Gruppe Zugriff auf die Datenbank-Engine haben, aber keine Anmeldung in der master Systemdatenbank haben. Diese Syntax kann in allen Datenbanktypen verwendet werden. Das Standardschema und die Sprachoptionen sind nicht aufgeführt.

Diese Syntax ähnelt Benutzern, die auf Anmeldungen masterbasieren, aber diese Benutzerkategorie hat keine Anmeldung master. Der Benutzer muss über den Anmeldenamen einer Windows-Gruppe Zugriff auf Datenbank-Engine haben.

Diese Syntax ähnelt der von Benutzern eigenständiger Datenbanken, die auf Windows-Prinzipalen basiert. Im Unterschied dazu erhalten Benutzer hier jedoch keinen neuen Zugriff auf die Datenbank-Engine.

  • CREATE USER [Domain1\WindowsUserTest]
  • CREATE USER [Domain1\WindowsUserTest] FOR LOGIN Domain1\WindowsUserTest
  • CREATE USER [Domain1\WindowsUserTest] FROM LOGIN Domain1\WindowsUserTest
  • CREATE USER [Domain1\WindowsGroupManagers]
  • CREATE USER [Domain1\WindowsGroupManagers] FOR LOGIN [Domain1\WindowsGroupManagers]
  • CREATE USER [Domain1\WindowsGroupManagers] FROM LOGIN [Domain1\WindowsGroupManagers]

Benutzer ohne Authentifizierungsmöglichkeit

Die folgende Liste zeigt mögliche Syntax für Benutzer, die sich nicht bei SQL Server anmelden können.

  • CREATE USER RIGHTSHOLDER WITHOUT LOGIN
  • CREATE USER CERTUSER FOR CERTIFICATE SpecialCert
  • CREATE USER CERTUSER FROM CERTIFICATE SpecialCert
  • CREATE USER KEYUSER FOR ASYMMETRIC KEY SecureKey
  • CREATE USER KEYUSER FROM ASYMMETRIC KEY SecureKey

Security

Wenn Sie einen Benutzer erstellen, erhält dieser zwar Zugriff auf eine Datenbank, nicht jedoch notwendigerweise auch auf die darin enthaltenen Objekte. Nach dem Erstellen eines Benutzers wird dieser daher häufig einer oder mehreren Datenbankrollen hinzugefügt, die über Zugriffsberechtigungen für entsprechende Objekte verfügen, oder dem Benutzer werden Berechtigungen für einzelne Objekte erteilt. Informationen zum Entwerfen eines Berechtigungssystems finden Sie unter Getting Started with Datenbank-Engine Permissions.

Besondere Überlegungen für enthaltene Datenbanken

Wenn der Benutzer keine Anmeldung in der master Datenbank hat, muss beim Herstellen einer Verbindung mit einer enthaltenen Datenbank der Verbindungszeichenfolge den enthaltenen Datenbanknamen als Ursprünglicher Katalog enthalten. Der Anfangskatalogparameter ist für Benutzer von eigenständigen Datenbanken mit Kennwort stets erforderlich.

In einer eigenständigen Datenbank hilft das Erstellen von Benutzern, eine Trennung zwischen der Datenbank und der Instanz von Datenbank-Engine herzustellen, damit die Datenbank leichter in eine andere Instanz von SQL Server verschoben werden kann. Weitere Informationen finden Sie unter Eigenständige Datenbanken und Eigenständige Datenbankbenutzer – machen Sie Ihre Datenbank portabel. Um einen Datenbankbenutzer von einem Benutzer basierend auf einem SQL-authentifizierten Login zu einem integrierten Datenbankbenutzer mit Passwort zu ändern, siehe sp_migrate_user_to_contained (Transact-SQL).

In einer enthaltenen Datenbank müssen Benutzer keine Anmeldungen in der master Datenbank haben. Administratoren von Datenbank-Engine sollten wissen, dass der Zugriff auf eine eigenständige Datenbank auf Datenbankebene und nicht auf der Ebene von Datenbank-Engine gesteuert wird. Weitere Informationen finden Sie unter Security Best Practices with Contained Databases.

Bei Verwendung der in Datenbanken enthaltenen Benutzern auf Azure SQL-Datenbank konfigurieren Sie den Zugriff mithilfe einer Firewallregel auf Datenbankebene, anstatt einer Firewallregel auf Serverebene. Weitere Informationen finden Sie unter sp_set_database_firewall_rule (Azure SQL-Datenbank).

Für SQL Server 2022 (16.x), Azure SQL-Datenbank, Azure SQL Managed Instance und Azure Synapse Analytics enthaltene Datenbankbenutzer unterstützt SSMS Multifaktor-Authentifizierung. Weitere Informationen finden Sie unter Verwenden der Multi-Faktor-Authentifizierung von Microsoft Entra.

Permissions

Erfordert ALTER ANY-Berechtigung USER für die Datenbank.

Berechtigungen für SQL Server 2022 und neuere Versionen

Erfordert die CREATE USER-Berechtigung für die Datenbank.

Examples

A. Erstellen Sie einen Datenbankbenutzer basierend auf einem SQL Server-Login

Das folgende Beispiel erstellt zunächst einen SQL Server-Login, der in der master Datenbank benannt test ist, und erstellt dann einen entsprechenden Datenbankbenutzer test in AdventureWorks2025.

--Connect to the master database
CREATE LOGIN test   
    WITH PASSWORD = '<strong password>';  

Wechseln Sie zu einer Benutzerdatenbank. Verwenden Sie zum Beispiel in SQL Server die Anweisung USE [AdventureWorks2022]. In Azure SQL-Datenbank ist die Anweisung USE nicht verfügbar. Stattdessen verbinden Sie sich direkt mit der vorgesehenen Datenbank und führen Sie den Rest des Codebeispiels aus. Dieses login-basierte Beispiel gilt nicht für die SQL-Datenbank in Microsoft Fabric, das weder Logins noch Nutzer basierend auf Logins unterstützt.

--Connect to a user database
CREATE USER test FOR LOGIN test;
GO   

B. Erstellen Sie einen Datenbankbenutzer mit einem Standardschema

Das folgende Beispiel erstellt zunächst einen Server-Login mit testlogin einem von Ihnen angegebenen Passwort und erstellt dann einen entsprechenden Datenbankbenutzer testuser, mit dem Standardschema Marketing.

--Connect to the master database
CREATE LOGIN testlogin
    WITH PASSWORD = '<strong password>';  

Wechseln Sie zu einer Benutzerdatenbank. Verwenden Sie zum Beispiel in SQL Server die Anweisung USE [AdventureWorks2022]. In Azure SQL-Datenbank und SQL Database in Microsoft Fabric ist die Anweisung USE nicht verfügbar. Stattdessen verbinden Sie sich direkt mit der vorgesehenen Datenbank und führen Sie den Rest des Codebeispiels aus.

--Connect to a user database
CREATE USER testuser FOR LOGIN testlogin
    WITH DEFAULT_SCHEMA = Marketing;  

C. Erstellen Sie einen Datenbankbenutzer aus einem Zertifikat

Im folgenden Beispiel wird der Datenbankbenutzer test über das Contoso_Cert-Zertifikat erstellt. Weitere Informationen finden Sie unter CREATE CERTIFICATE (Transact-SQL).

USE AdventureWorks2022;  
CREATE CERTIFICATE Contoso_Cert  
    ENCRYPTION BY PASSWORD = '<strong password>'  
    WITH SUBJECT = 'Contoso Facility Supervisors',
    EXPIRY_DATE = '11/11/2011';  
GO  
CREATE USER test FOR CERTIFICATE Contoso_Cert;  
GO   

D. Erstellen und verwenden Sie einen Benutzer ohne Login

Im folgenden Beispiel wird ein CustomApp-Datenbankbenutzer erstellt, dem kein SQL Server-Anmeldename zugeordnet wird. Anschließend wird einem Benutzer die adventure-works\test-Berechtigung zugewiesen, um die Identität des CustomApp-Benutzers anzunehmen.

USE AdventureWorks2022;  
CREATE USER CustomApp WITHOUT LOGIN ;  
GRANT IMPERSONATE ON USER::CustomApp TO [adventure-works\test] ;  
GO

Zur Verwendung der CustomApp-Anmeldeinformationen führt der adventure-works\test-Benutzer die folgende Anweisung aus.

EXECUTE AS USER = 'CustomApp' ;  
GO  

Zur Wiederherstellung der adventure-works\test-Anmeldeinformationen führt der Benutzer die folgende Anweisung aus.

REVERT ;  
GO  

E. Erstellen Sie mit Passwort einen Benutzer einer geschlossenen Datenbank

Im folgenden Beispiel wird der Benutzer einer eigenständigen Datenbank mit Kennwort erstellt. Dieses Beispiel kann man nur in einer geschlossenen Datenbank ausführen.

Dieses Beispiel funktioniert in der SQL-Datenbank, wenn du . entfernst DEFAULT_LANGUAGE.

USE AdventureWorks2022;  
GO  
CREATE USER test  
WITH PASSWORD='<password>'
    , DEFAULT_LANGUAGE=[Brazilian]  
    , DEFAULT_SCHEMA=[dbo]  
GO   

F. Erstellen Sie einen enthaltenen Datenbankbenutzer für eine Domänenanmeldung

Das folgende Beispiel erstellt einen enthaltenen Datenbankbenutzer für einen Login namens test in einer Domäne namens Contoso. Dieses Beispiel kann man nur in einer geschlossenen Datenbank ausführen.

USE AdventureWorks2022;
GO  
CREATE USER [Contoso\test] ;  
GO   

G. Erstellen Sie einen integrierten Datenbankbenutzer mit einem spezifischen SID

Das folgende Beispiel erstellt einen SQL Server authentifizierten, enthaltenen Datenbankbenutzer namens TestUser. Dieses Beispiel kann man nur in einer geschlossenen Datenbank ausführen.

USE AdventureWorks2022;  
GO  
CREATE USER TestUser WITH PASSWORD = '<strong password>'  
, SID = 0x01050000000000090300000063FF0451A9E7664BA705B10E37DDC4B7;

H. Erstellen Sie einen Benutzer, der verschlüsselte Daten kopiert

Im folgenden Beispiel wird ein Benutzer erstellt, der durch das Feature „Always Encrypted“ geschützte Daten aus einem Tabellensatz mit verschlüsselten Spalten in einen anderen Tabellensatz mit verschlüsselten Spalten kopieren kann (innerhalb derselben oder zu einer anderen Datenbank). Weitere Informationen finden Sie unter Migrieren von durch Always Encrypted geschützten sensiblen Daten.

Gilt für: SQL Server 2016 (13.x) und spätere Versionen, SQL Database.

CREATE USER [test]   
WITH   
      DEFAULT_SCHEMA = dbo  
    , ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = ON ;  

I. Erstellen Sie einen Microsoft Entra-Benutzer aus einem Microsoft Entra-Login in Azure SQL-Datenbank und Azure SQL Managed Instance

Verwenden Sie die folgende Syntax, um einen Microsoft Entra-Benutzer aus einer Microsoft Entra-Anmeldung zu erstellen.

Melden Sie sich mit einem Microsoft Entra-Login bei Ihrem Azure SQL-Datenbank logischen Server oder SQL Managed Instance an. Verwenden Sie das Server-Admin-Login oder ein Login, das Mitglied der Rolle loginmanager in SQL Database ist oder die Rolle sysadmin in der SQL Managed Instance zugewiesen hat.

Das folgende T-SQL-Skript erstellt einen Microsoft Entra-Benutzer test@contoso.comaus der Anmeldung test@contoso.com. Dieser Login wurde im CREATE LOGIN Beispiel erstellt.

CREATE USER [test@contoso.com] FROM LOGIN [test@contoso.com];
GO

Important

Beim Erstellen eines USER Microsoft Entra-Logins geben Sie die user_name als dasselbe login_name aus LOGINan.

Das Erstellen eines Microsoft Entra-Benutzers als Gruppe aus einer Microsoft Entra-Anmeldung, die eine Gruppe ist, wird unterstützt.

CREATE USER [MS Entra group] FROM LOGIN [MS Entra group];

GO

Sie können auch einen Microsoft Entra-Benutzer aus einer Microsoft Entra-Anmeldung erstellen, die eine Gruppe ist.

CREATE USER [test@contoso.com] FROM LOGIN [MS Entra group];

GO

J. Erstellen eines enthaltenen Datenbankbenutzers aus einem Microsoft Entra-Prinzipal

Die folgende Syntax erstellt einen Microsoft Entra-Benutzer test@contoso.comin einer Datenbank ohne zugeordnete Anmeldung master. Die Datenbank-Engine überprüft, ob der angegebene Benutzer in Microsoft Entra vorhanden ist.

CREATE USER [test@contoso.com] FROM EXTERNAL PROVIDER;
GO

In der SQL-Datenbank in Microsoft Fabric kannst du nicht verwendenFROM EXTERNAL PROVIDER, wenn eine Principal-Ausgabe CREATE USER ein Service Principal in Microsoft Entra ist.

K. Erstellen eines enthaltenen Datenbankbenutzers aus einem Microsoft Entra-Prinzipal ohne Überprüfung

Gilt für: SQL-Datenbank in Microsoft Fabric und Azure SQL-Datenbank

In den Beispielen in diesem Abschnitt werden Datenbankbenutzer für Microsoft Entra-Prinzipale erstellt, ohne prinzipale Namen in Microsoft Entra zu überprüfen.

Im folgenden T-SQL-Beispiel wird ein Datenbankbenutzer für den Microsoft Entra-Benutzer namens erstellt test@contoso.com. Ersetzen Sie <unique identifier sid> die SID des neuen Benutzers durch die Objekt-ID des Microsoft Entra-Benutzers.

DECLARE @principal_name SYSNAME = 'test@contoso.com';
DECLARE @objectId UNIQUEIDENTIFIER = '<unique identifier sid>'; -- user's object ID in Microsoft Entra

-- Convert the guid to the right type
DECLARE @castObjectId NVARCHAR(MAX) = CONVERT(VARCHAR(MAX), CONVERT (VARBINARY(16), @objectId), 1);

-- Construct command: CREATE USER [@principal_name] WITH SID = @castObjectId, TYPE = E;
DECLARE @cmd NVARCHAR(MAX) = N'CREATE USER [' + @principal_name + '] WITH SID = ' + @castObjectId + ', TYPE = E;'
EXEC (@cmd);

Im folgenden Beispiel wird ein Datenbankbenutzer für den Microsoft Entra-Dienstprinzipal namens erstellt HRApp. Ersetzen Sie die <unique identifier sid> SID des neuen Benutzers durch die Client-ID des Dienstprinzipals in Microsoft Entra.

Note

Verwenden Sie die Client-ID, nicht die Objekt-ID, wenn Sie einen Microsoft Entra Service Principal angeben, User-Assigned Managed Identity (UAMI) oder System-Assigned Managed Identity (SAMI).

DECLARE @principal_name SYSNAME = 'HRApp';
DECLARE @clientId UNIQUEIDENTIFIER = '<unique identifier sid>'; -- principal's client ID in Microsoft Entra

-- Convert the guid to the right type
DECLARE @castClientId NVARCHAR(MAX) = CONVERT(VARCHAR(MAX), CONVERT (VARBINARY(16), @clientId), 1);

-- Construct command: CREATE USER [@principal_name] WITH SID = @castClientId, TYPE = E;
DECLARE @cmd NVARCHAR(MAX) = N'CREATE USER [' + @principal_name + '] WITH SID = ' + @castClientId + ', TYPE = E;'
EXEC (@cmd);

Im folgenden Beispiel wird ein Datenbankbenutzer für die Microsoft Entra-Gruppe namens erstellt HR. Ersetzen Sie die <unique identifier sid> SID des neuen Benutzers durch die Objekt-ID der Gruppe.

DECLARE @principal_name SYSNAME = 'HR';
DECLARE @objectId UNIQUEIDENTIFIER = '<unique identifier sid>'; -- principal's object ID in Microsoft Entra

-- Convert the guid to the right type
DECLARE @castObjectId NVARCHAR(MAX) = CONVERT(VARCHAR(MAX), CONVERT (VARBINARY(16), @objectId), 1);

-- Construct command: CREATE USER [@principal_name] WITH SID = @castObjectId, TYPE = X;
DECLARE @cmd NVARCHAR(MAX) = N'CREATE USER [' + @principal_name + '] WITH SID = ' + @castObjectId + ', TYPE = X;'
EXEC (@cmd);