Freigeben über


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 ]

Argumente

credential_name

Gibt den Namen für die zu erstellenden Anmeldeinformationen an. credential_name kann 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 externer Datenplattformen wie Azure Blob Storage oder S3-kompatibler 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-
Azure Key Vault <keyvaultname>.vault.azure.net Beispiel H-
Azure Key Vault Managed Hardware Security Module (HSM) <akv-name>.managedhsm.azure.net Beispiel H-
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. Verwaltete Identitäten werden mit EKM unterstützt, und Anmeldeinformationen können mit verwalteten Identitäten verwendet werden. Ein Beispiel finden Sie unter Beispiel H.

Im folgenden Beispiel wird die Client-ID (00001111-aaaa-2222-bbbb-3333cccc4444) von den Bindestrichen entfernt und als Zeichenfolge 11111111222233334444555555555555 eingegeben und der geheime Schlüssel wird durch die Zeichenfolge SECRET_DBEnginedargestellt.

USE master;
CREATE CREDENTIAL Azure_EKM_TDE_cred
    WITH IDENTITY = 'ContosoKeyVault',
    SECRET = '11111111222233334444555555555555SECRET_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 = '11111111-AAAA-BBBB-2222-CCCCCCCCCCCC';
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 des Azure SQL- oder Azure Synapse-Diensts darstellen. Kennwort und geheimer Schlüssel gelten in diesem Fall nicht.

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

Ein Beispiel zum Erstellen einer Anmeldeinformation mit einer verwalteten Identität für SQL Server auf azure VM finden Sie unter Beispiel G und Beispiel H. Verwaltete Identität auf Serverebene wird für Linux nicht unterstützt.

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
    

G. Erstellen einer Anmeldeinformation für den Zugriff auf Azure Blob Storage mithilfe einer verwalteten Identität

Ab SQL Server 2022 CU17 können Sie verwaltete Identitäten mit SQL Server-Anmeldeinformationen verwenden, um SQL Server auf Azure VM-Datenbanken aus Azure Blob Storage zu sichern und wiederherzustellen. Weitere Informationen finden Sie unter Sichern und Wiederherstellen der URL mithilfe von verwalteten Identitäten.

Verwenden Sie das folgende Beispiel, um eine Anmeldeinformation mit einer verwalteten Identität zu erstellen, die mit den vorgängen BACKUP und RESTORE verwendet werden soll:

CREATE CREDENTIAL [https://<mystorageaccountname>.blob.core.windows.net/<container-name>] 
    WITH IDENTITY = 'Managed Identity';

Ablaufverfolgungskennzeichnung 4675 können verwendet werden, um anmeldeinformationen zu überprüfen, die mit einer verwalteten Identität erstellt wurden. Wenn die CREATE CREDENTIAL-Anweisung ohne Ablaufverfolgungskennzeichnung 4675 aktiviert ausgeführt wurde, wird keine Fehlermeldung ausgegeben, wenn die primäre verwaltete Identität nicht für den Server festgelegt ist. Um dieses Szenario zu beheben, müssen die Anmeldeinformationen gelöscht und erneut erstellt werden, sobald das Ablaufverfolgungsflagge aktiviert ist.

H. Erstellen einer verwalteten Identitätsanmeldeinformationen für die Extensible Key Management mit Azure Key Vault

Ab SQL Server 2022 CU17 können Sie auch verwaltete Identitäten auf SQL Server auf Azure VMs für die Extensible Key Management (EKM) mit Azure Key Vault (AKV) verwenden. Weitere Informationen finden Sie unter Managed Identity-Unterstützung für die Extensible Key Management mit Azure Key Vault.

Verwenden Sie das folgende Beispiel, um eine verwaltete Identitätsanmeldeinformationen für die Verwendung mit EKM mit AKV zu erstellen:

CREATE CREDENTIAL [<akv-name>.vault.azure.net] 
    WITH IDENTITY = 'Managed Identity'
    FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov

Zum Beispiel:

CREATE CREDENTIAL [contoso.vault.azure.net] -- for Azure Key Vault
    WITH IDENTITY = 'Managed Identity'
    FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov
CREATE CREDENTIAL [contoso.managedhsm.azure.net] -- for Azure Key Vault Managed HSM
    WITH IDENTITY = 'Managed Identity'
    FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov

Ablaufverfolgungskennzeichnung 4675 können verwendet werden, um anmeldeinformationen zu überprüfen, die mit einer verwalteten Identität erstellt wurden. Wenn die CREATE CREDENTIAL-Anweisung ohne Ablaufverfolgungskennzeichnung 4675 aktiviert ausgeführt wurde, wird keine Fehlermeldung ausgegeben, wenn die primäre verwaltete Identität nicht für den Server festgelegt ist. Um dieses Szenario zu beheben, müssen die Anmeldeinformationen gelöscht und erneut erstellt werden, sobald das Ablaufverfolgungsflagge aktiviert ist.