CREATE CREDENTIAL (Transact-SQL)

Gilt für:SQL ServerAzure SQL Managed Instance

Erstellt Anmeldeinformationen auf Serverebene. Anmeldeinformationen sind in einem Datensatz gespeichert, in dem die Authentifizierungsinformationen enthalten sind, die zum Herstellen einer Verbindung mit einer Ressource außerhalb von SQL Server erforderlich sind. Die meisten Anmeldeinformationen schließen einen Windows-Benutzer und ein Kennwort ein. Wenn Sie z.B. eine Datensicherung an einem beliebigen Speicherort speichern, erfordert SQL Server möglicherweise die Eingabe von besonderen Anmeldeinformationen, damit auf diesen Speicherort zugegriffen werden kann. Weitere Informationen finden Sie unter Anmeldeinformationen (Datenbank-Engine).

Hinweis

Verwenden Sie CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL) zum Erstellen der Anmeldeinformationen auf Datenbankebene. Erstellen Sie eine Anmeldeinformation auf Serverebene, bei CREATE CREDENTIAL der Sie dieselben Anmeldeinformationen für mehrere Datenbanken auf dem Server verwenden müssen.

  • Erstellen Sie eine Datenbank mit Anmeldeinformationen CREATE DATABASE SCOPED CREDENTIAL mit Bereich, um die Datenbank portierbarer zu machen. Wenn eine Datenbank auf einen neuen Server verschoben wird, werden gleichzeitig auch diese datenbankbezogenen Anmeldeinformationen verschoben.
  • Verwenden Sie Anmeldeinformationen auf Datenbankebene für SQL-Datenbank.
  • Verwenden Sie datenbankbezogene Anmeldeinformationen mit PolyBase und Azure SQL verwaltete Instanz Datenvirtualisierungsfeatures.

Transact-SQL-Syntaxkonventionen

Syntax

CREATE CREDENTIAL credential_name
WITH IDENTITY = 'identity_name'
    [ , SECRET = 'secret' ]
        [ FOR CRYPTOGRAPHIC PROVIDER cryptographic_provider_name ]

Hinweis

Informationen zum Anzeigen der Transact-SQL-Syntax für SQL Server 2014 (12.x) und früher finden Sie unter Dokumentation zu früheren Versionen.

Argumente

credential_name

Gibt den Namen für die zu erstellenden Anmeldeinformationen an. credential_name darf nicht mit dem Nummernzeichen (#) beginnen. Systemanmeldeinformationen beginnen mit zwei Nummernzeichen (##).

Wichtig

Wenn eine Shared Access Signature (SAS) verwendet wird, muss dieser Name dem Containerpfad zugeordnet werden können, mit „https“ beginnen und einen Schrägstrich enthalten. Siehe Beispiel D.

Bei Verwendung der Sicherung/Wiederherstellung mithilfe einer zu externen Datenplattformen wie Azure Blob Storage oder S3-kompatiblen Plattformen bietet die folgende Tabelle allgemeine Pfade:

Externe Datenquelle Location path (Pfad zum Speicherort) Beispiel
Azure Blob Storage (V2) https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername> Beispiel D.
S3-kompatibler Objektspeicher - S3-kompatibler Speicher: s3://<server_name>:<port>/
- AWS S3: s3://<bucket_name>.S3.<region>.amazonaws.com[:port]/<folder>
oder s3://s3.<region>.amazonaws.com[:port]/<bucket_name>/<folder>
Beispiel F.

IDENTITY = 'identity_name'

Gibt den Namen des Kontos an, das beim Herstellen einer Verbindung außerhalb des Servers verwendet wird. Wenn die Anmeldeinformationen zum Zugreifen auf Azure Key Vault verwendet werden, ist IDENTITY der Name des Schlüsseltresors. Weitere Informationen finden Sie unten im Beispiel C. Wenn die Anmeldeinformationen eine Shared Access Signature (SAS) verwenden, lautet IDENTITYSHARED ACCESS SIGNATURE. Siehe Beispiel D.

Wichtig

Azure SQL-Datenbank unterstützt nur Azure Key Vault- und Shared Access Signature-Identitäten. Windows-Benutzeridentitäten werden nicht unterstützt.

SECRET ='secret'

Gibt den geheimen Bereich an, der für die ausgehende Authentifizierung erforderlich ist.

Wenn die Anmeldeinformationen für den Zugriff auf Azure Key Vault verwendet werden, muss das SECRET-Argument als Client-ID> des< Dienstprinzipals (ohne Bindestriche) und< geheimer> Schlüssel formatiert werden, der ohne Leerzeichen dazwischen übergeben wird. Weitere Informationen finden Sie unten im Beispiel C. Wenn die Anmeldeinformationen eine Shared Access Signature (SAS) verwenden, ist SECRET das freigegebene SAS-Token. Siehe Beispiel D. Informationen über das Erstellen einer gespeicherten Zugriffsrichtlinie und einer Shared Access Signature (SAS) in einem Azure-Container finden Sie unter Lektion 1: Erstellen einer gespeicherten Zugriffsrichtlinie und von Speicher mit freigegebenem Zugriff.

FOR CRYPTOGRAPHIC PROVIDER cryptographic_provider_name

Gibt den Namen eines Anbieters für die Schlüsselverwaltung in Unternehmen (Enterprise Key Management Provider (EKM)) an. Weitere Informationen zum Verwalten von Schlüsseln finden Sie unter Erweiterbare Schlüsselverwaltung (EKM).

Bemerkungen

Falls für IDENTITY ein Windows-Benutzer angegeben ist, kann der geheime Bereich das Kennwort enthalten. Der geheime Bereich wird mithilfe des Diensthauptschlüssels verschlüsselt. Falls der Diensthauptschlüssel neu generiert wird, wird der geheime Bereich mithilfe des neuen Diensthauptschlüssels neu verschlüsselt.

Nach der Erstellung von Anmeldeinformationen können Sie diese einem SQL Server-Anmeldenamen zuordnen, indem Sie CREATE LOGIN oder ALTER LOGIN verwenden. Ein SQL Server-Anmeldename kann nur einem Satz Anmeldeinformationen zugeordnet sein, ein Satz Anmeldeinformationen kann jedoch mehreren SQL Server-Anmeldenamen zugeordnet sein. Weitere Informationen finden Sie unter Anmeldeinformationen (Datenbank-Engine). Anmeldeinformationen auf Serverebene können nur einem Anmeldenamen und keinem Datenbankbenutzer zugeordnet werden.

Informationen zu Anmeldeinformationen werden in der sys.credentials-Katalogsicht angezeigt.

Falls für den Anbieter keine mit einem Anmeldenamen verknüpfte Anmeldinformationen vorliegen, werden die dem SQL Server-Dienstkonto zugeordneten Anmeldeinformationen verwendet.

Einem Anmeldenamen können mehrere Anmeldeinformationen zugeordnet werden, solange sie für unterschiedliche Anbieter verwendet werden. Pro Anbieter und Anmeldung darf es jedoch nur einen zugeordneten Identitätsnachweis geben. Die gleichen Anmeldeinformationen können jedoch auch anderen Anmeldenamen zugeordnet werden.

Berechtigungen

Erfordert die ALTER ANY CREDENTIAL-Berechtigung.

Beispiele

A. Erstellen von Anmeldeinformationen für die Windows-Identität

Im folgenden Beispiel werden die Anmeldeinformationen namens AlterEgo erstellt. Die Anmeldeinformationen enthalten den Windows-Benutzer Mary5 und ein Kennwort.

CREATE CREDENTIAL AlterEgo WITH IDENTITY = 'Mary5',
    SECRET = '<EnterStrongPasswordHere>';
GO

B. Erstellen von Anmeldeinformationen für EKM

Im folgenden Beispiel wird ein zuvor erstelltes Konto namens User1OnEKM auf einem EKM-Modul mithilfe der EKM-Verwaltungstools mit einem Standardkontotyp und Kennwort verwendet. Das sysadmin-Konto auf dem Server erstellt die Anmeldeinformationen, mit denen die Verbindung mit dem EKM-Konto hergestellt wird, und weist diese dem SQL Server-Konto User1 zu:

CREATE CREDENTIAL CredentialForEKM
    WITH IDENTITY='User1OnEKM', SECRET='<EnterStrongPasswordHere>'
    FOR CRYPTOGRAPHIC PROVIDER MyEKMProvider;
GO

/* Modify the login to assign the cryptographic provider credential */
ALTER LOGIN User1
ADD CREDENTIAL CredentialForEKM;

C. Erstellen von Anmeldeinformationen für EKM unter Verwendung des Azure-Schlüsseltresors

Das folgende Beispiel erstellt SQL Server-Anmeldeinformationen, die die Datenbank-Engine beim Zugreifen auf Azure Key Vault mit dem SQL Server-Connector für Microsoft Azure Key Vault verwenden soll. Ein vollständiges Beispiel zur Verwendung des SQL Server-Connectors finden Sie unter Erweiterbare Schlüsselverwaltung mit Azure Key Vault (SQL Server).

Wichtig

Das IDENTITY -Argument von CREATE CREDENTIAL erfordert den Schlüsseltresornamen. An das SECRET-Argument von CREATE CREDENTIAL müssen die <Client-ID> (ohne Bindestriche) und der <geheime Schlüssel> zusammen, ohne Leerzeichen dazwischen, übergeben werden.

Im folgenden Beispiel wird die Client-ID (EF5C8E09-4D2A-4A76-9998-D93440D8115D) von den Bindestrichen bereinigt und als Zeichenfolge EF5C8E094D2A4A769998D93440D8115D eingegeben. Der geheime Schlüssel wird durch die Zeichenfolge SECRET_DBEnginedargestellt.

USE master;
CREATE CREDENTIAL Azure_EKM_TDE_cred
    WITH IDENTITY = 'ContosoKeyVault',
    SECRET = 'EF5C8E094D2A4A769998D93440D8115DSECRET_DBEngine'
    FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov ;

Im folgenden Beispiel werden die gleichen Anmeldeinformationen unter Verwendung von Variablen für die Zeichenfolgen der Client-ID und des geheimem Schlüssels erstellt, die dann verkettet werden, um das SECRET-Argument zu bilden. Mit der REPLACE-Funktion werden die Bindestriche aus der Client-ID entfernt.

DECLARE @AuthClientId uniqueidentifier = 'EF5C8E09-4D2A-4A76-9998-D93440D8115D';
DECLARE @AuthClientSecret varchar(200) = 'SECRET_DBEngine';
DECLARE @pwd varchar(max) = REPLACE(CONVERT(varchar(36), @AuthClientId) , '-', '') + @AuthClientSecret;

EXEC ('CREATE CREDENTIAL Azure_EKM_TDE_cred
    WITH IDENTITY = ''ContosoKeyVault'', SECRET = ''' + @PWD + '''
    FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov ;');

D: Erstellen von Anmeldeinformationen mithilfe eines SAS-Tokens

Gilt für: SQL Server 2014 (12.x) bis zur aktuellen Version und Azure SQL Managed Instance.

Das folgende Beispiel erstellt SAS-Anmeldinformationen mit dem SAS-Token. Ein Tutorial zum Erstellen einer gespeicherten Zugriffsrichtlinie und einer SAS für einen Azure-Container und zum anschließenden Erstellen von Anmeldeinformationen unter Verwendung dieser SAS finden Sie unter Tutorial: Verwenden von Microsoft Azure Blob Storage mit SQL Server-Datenbanken.

Wichtig

Das CREDENTIAL NAME-Argument erfordert, dass der Name dem Containerpfad zugeordnet werden kann, mit „https“ beginnt und keinen nachgestellten Schrägstrich enthält. Das IDENTITY-Argument erfordert den Namen SHARED ACCESS SIGNATURE. Das SECRET-Argument erfordert das SAS-Token.

Das SHARED ACCESS SIGNATURE-Geheimnis sollte kein vorangehendes ? haben.

USE master
CREATE CREDENTIAL [https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>] -- this name must match the container path, start with https and must not contain a trailing forward slash.
    WITH IDENTITY='SHARED ACCESS SIGNATURE' -- this is a mandatory string and do not change it.
    , SECRET = 'sharedaccesssignature' -- this is the shared access signature token
GO

E. Erstellen einer Anmeldeinformation für verwaltete Identität

Im folgenden Beispiel werden die Anmeldeinformationen erstellt, die die verwaltete Identität von Azure SQL oder Azure Synapse darstellt. In diesem Falls ist kein Kennwort und kein Geheimnis anwendbar.

CREATE CREDENTIAL ServiceIdentity WITH IDENTITY = 'Managed Identity';
GO

F. Erstellen einer Anmeldeinformation für die Sicherung/Wiederherstellung auf S3-kompatiblen Speicher

Gilt für: SQL Server 2022 (16.x) und höhere Versionen

Der offene S3-kompatible Standard bietet Speicherpfade und Details, die sich je nach Speicherplattform unterscheiden können. Weitere Informationen finden Sie unter SQL Server-Sicherung über URLs für S3-kompatiblen Objektspeicher.

Für die meisten S3-kompatiblen Speicher erstellt dieses Beispiel anmeldeinformationen auf Serverebene und führt eine BACKUP TO URL.

USE [master];
CREATE CREDENTIAL [s3://<endpoint>:<port>/<bucket>]
WITH
        IDENTITY    = 'S3 Access Key',
        SECRET      = '<AccessKeyID>:<SecretKeyID>';
GO

BACKUP DATABASE [SQLTestDB]
TO      URL = 's3://<endpoint>:<port>/<bucket>/SQLTestDB.bak'
WITH    FORMAT /* overwrite any existing backup sets */
,       STATS = 10
,       COMPRESSION;

AWS S3 unterstützt jedoch zwei unterschiedliche URL-Standards.

  • S3://<BUCKET_NAME>.S3.<REGION>.AMAZONAWS.COM/<FOLDER> (Standard)
  • S3://S3.<REGION>.AMAZONAWS.COM/<BUCKET_NAME>/<FOLDER>

Es gibt mehrere Ansätze zum erfolgreichen Erstellen von Anmeldeinformationen für AWS S3:

  • Geben Sie den Bucketnamen und den Pfad und die Region im Anmeldeinformationsnamen an.

    -- S3 bucket name: datavirtualizationsample
    -- S3 bucket region: us-west-2
    -- S3 bucket folder: backup
    
    CREATE CREDENTIAL [s3://datavirtualizationsample.s3.us-west-2.amazonaws.com/backup]
    WITH    
            IDENTITY    = 'S3 Access Key'
    ,       SECRET      = 'accesskey:secretkey';
    GO
    
    BACKUP DATABASE [AdventureWorks2022]
    TO URL  = 's3://datavirtualizationsample.s3.us-west-2.amazonaws.com/backup/AdventureWorks2022.bak'
    WITH COMPRESSION, FORMAT, MAXTRANSFERSIZE = 20971520;
    GO
    

    Oder

    CREATE CREDENTIAL [s3://s3.us-west-2.amazonaws.com/datavirtualizationsample/backup]
    WITH    
            IDENTITY    = 'S3 Access Key'
    ,       SECRET      = 'accesskey:secretkey';
    GO
    
    BACKUP DATABASE [AdventureWorks2022]
    TO URL  = 's3://s3.us-west-2.amazonaws.com/datavirtualizationsample/backup/AdventureWorks2022.bak'
    WITH COMPRESSION, FORMAT, MAXTRANSFERSIZE = 20971520;
    GO
    
  • Oder geben Sie den Bucketnamen und den Pfad im Anmeldeinformationsnamen an, aber parametrisieren Sie den Bereich innerhalb der einzelnen BACKUP/RESTORE Befehle. Verwenden Sie die S3-spezifische Regionszeichenfolge in der BACKUP_OPTIONS und RESTORE_OPTIONS, z. B '{"s3": {"region":"us-west-2"}}'. .

    -- S3 bucket name: datavirtualizationsample
    -- S3 bucket region: us-west-2
    -- S3 bucket folder: backup
    
    CREATE CREDENTIAL   [s3://datavirtualizationsample.s3.amazonaws.com/backup]
    WITH    
            IDENTITY    = 'S3 Access Key'
    ,       SECRET      = 'accesskey:secretkey';
    GO
    
    BACKUP DATABASE [AdventureWorks2022]
    TO URL  = 's3://datavirtualizationsample.s3.amazonaws.com/backup/AdventureWorks2022.bak'
    WITH
      BACKUP_OPTIONS = '{"s3": {"region":"us-west-2"}}' -- REGION AS PARAMETER)
    , COMPRESSION, FORMAT, MAXTRANSFERSIZE = 20971520;
    GO
    
    RESTORE DATABASE AdventureWorks2022_1 
    FROM URL = 's3://datavirtualizationsample.s3.amazonaws.com/backup/AdventureWorks2022.bak'
    WITH 
      MOVE 'AdventureWorks2022' 
      TO 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\AdventureWorks2022_1.mdf'
    , MOVE 'AdventureWorks2022_log' 
      TO 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\AdventureWorks2022_1.ldf'
    , STATS = 10, RECOVERY
    , REPLACE, RESTORE_OPTIONS = '{"s3": {"region":"us-west-2"}}'; -- REGION AS PARAMETER)
    GO