Partager via


CREATE CREDENTIAL (Transact-SQL)

S’applique à :SQL ServerAzure SQL Managed Instance

Crée des informations d’identification au niveau du serveur. Les informations d’identification sont un enregistrement qui contient les informations d’authentification requises pour la connexion à une ressource en dehors de SQL Server. La plupart des informations d'identification incluent un utilisateur et un mot de passe Windows. Par exemple, pour enregistrer une sauvegarde de base de données à un certain emplacement, il peut être nécessaire que SQL Server fournisse des informations d’identification spéciales afin d’accéder à cet emplacement. Pour plus d’informations, consultez Informations d’identification (moteur de base de données).

Notes

Pour créer les informations d’identification au niveau de la base de données, utilisez CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL). Créez des informations d’identification CREATE CREDENTIAL au niveau du serveur quand vous devez utiliser les mêmes informations d’identification pour plusieurs bases de données sur le serveur.

  • Créez des informations d’identification CREATE DATABASE SCOPED CREDENTIAL délimitées à la base de données pour rendre la base de données plus portable. Quand une base de données est déplacée vers un nouveau serveur, les informations d’identification délimitées à la base de données le sont également.
  • Utilisez des informations d’identification délimitées à la base de données sur SQL Database.
  • Utilisez des informations d’identification délimitées à la base de données avec les fonctionnalités de virtualisation des données PolyBase et Azure SQL Managed Instance.

Conventions de la syntaxe Transact-SQL

Syntaxe

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

Arguments

credential_name

Spécifie le nom des informations d'identification créées. credential_name ne peut pas commencer par le signe nombre (#). Les informations d'identification système commencent avec ##.

Important

Quand vous utilisez une signature d’accès partagé (SAP), ce nom doit correspondre au chemin du conteneur, commencer par https, et ne pas contenir de barre oblique. Consultez l’exemple D.

Lorsqu’elle est utilisée pour la sauvegarde/restauration à l’aide de plateformes de données externes, telles que stockage Blob Azure ou plateformes compatibles S3, le tableau suivant fournit des chemins d’accès courants :

Source de données externe Chemin d’emplacement Exemple
Stockage Blob Azure (V2) https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername> Exemple de D
Azure Key Vault <keyvaultname>.vault.azure.net exemple de H
Module de sécurité matérielle managée Azure Key Vault (HSM) <akv-name>.managedhsm.azure.net exemple de H
Stockage d’objets compatible S3 - Stockage compatible S3 : s3://<server_name>:<port>/
- AWS S3 : s3://<bucket_name>.S3.<region>.amazonaws.com[:port]/<folder>
ou s3://s3.<region>.amazonaws.com[:port]/<bucket_name>/<folder>
exemple de F

IDENTITY ='identity_name'

Spécifie le nom du compte à utiliser lors d'une connexion en dehors du serveur. Quand les informations d’identification sont utilisées pour accéder à Azure Key Vault, IDENTITY est le nom du coffre de clés. Consultez l'exemple C ci-dessous. Quand les informations d’identification utilisent une signature d’accès partagé, identité est SHARED ACCESS SIGNATURE. Consultez l’exemple D ci-dessous.

Important

Azure SQL Database ne prend en charge que les identités de type signature d’accès partagé et Azure Key Vault. Les identités d’utilisateur Windows ne sont pas prises en charge.

SECRET ='secret'

Spécifie le secret requis pour l'authentification sortante.

Lorsque les informations d’identification sont utilisées pour accéder à Azure Key Vault, l’argument SECRET doit être mis en forme en tant qu’ID service (sans traits d’union) et <, transmis ensemble sans espace entre eux.> Consultez l'exemple C ci-dessous. Quand les informations d’identification utilisent une signature d’accès partagé, SECRET est le jeton de signature d’accès partagé. Consultez l’exemple D ci-dessous. Pour plus d’informations sur la création d’une stratégie d’accès stockée et une signature d’accès partagé sur un conteneur Azure, consultez Leçon 1 : Créer une stratégie d’accès stockée et une signature d’accès partagé sur un conteneur Azure.

FOR CRYPTOGRAPHIC PROVIDER cryptographic_provider_name

Spécifie le nom d’un Fournisseur EKM (Gestion de clés extensible). Pour plus d’informations sur la gestion des clés, consultez Gestion de clés extensible (EKM).

Notes

Lorsque IDENTITY correspond à un utilisateur Windows, le secret peut être le mot de passe. Le secret est chiffré à l'aide de la clé principale de service. Si la clé principale de service est régénérée, le secret est chiffré de nouveau au moyen de la nouvelle clé principale de service.

Une fois les informations d’identification créées, vous pouvez les mapper à un compte de connexion SQL Server en utilisant CREATE LOGIN ou ALTER LOGIN. Un compte de connexion SQL Server peut être mappé à un seul ensemble d’informations d’identification, mais des informations d’identification peuvent être mappées à plusieurs comptes de connexion SQL Server. Pour plus d’informations, consultez Informations d’identification (moteur de base de données). Des informations d’identification au niveau du serveur peuvent être mappées uniquement à une connexion, et pas à un utilisateur de base de données.

Des informations sur les informations d’identification sont consultables dans la vue de catalogue sys.credentials.

En l'absence d'informations d'identification mappées à une connexion pour le fournisseur, les informations d'identification mappées au compte de service SQL Server sont utilisées.

Une connexion peut avoir plusieurs informations d'identification mappées à elle, à condition qu'elles soient utilisées avec des fournisseurs distinctifs. Il ne doit y avoir qu'une seule information d'identification mappée par fournisseur par connexion. La même information d'identification peut être mappée à d'autres connexions.

Autorisations

Nécessite l’autorisation ALTER ANY CREDENTIAL.

Exemples

R. Création d’informations d’identification pour l’identité Windows

L'exemple ci-dessous crée des informations d'identification nommées AlterEgo. Les informations d'identification contiennent l'utilisateur Windows Mary5 et un mot de passe.

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

B. Création d'informations d'identification pour EKM

L’exemple suivant utilise un compte précédemment créé, User1OnEKM, sur un module EKM au moyen des outils d’administration EKM, avec un type de compte de base et un mot de passe. Le compte sysadmin sur le serveur crée des informations d’identification utilisées pour se connecter au compte EKM, et les attribue au compte SQL Server User1 :

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. Création d'informations d'identification pour EKM à l'aide d’Azure Key Vault

L’exemple suivant crée des informations d’identification SQL Server utilisables par le Moteur de base de données lors de l’accès à Azure Key Vault à l’aide du Connecteur SQL Server pour Microsoft Azure Key Vault. Pour obtenir un exemple complet d’utilisation du connecteur SQL Server, consultez Gestion de clés extensible à l’aide d’Azure Key Vault (SQL Server).

Important

L'argument IDENTITY de CREATE CREDENTIAL nécessite le nom du coffre de clés. Concernant l’argument SECRET de CREATE CREDENTIAL, <ID Client> (sans tirets) et <Secret> doivent être passés ensemble sans espace les séparant. Les identités managées sont prises en charge avec EKM et les informations d’identification peuvent être utilisées avec des identités managées. Pour obtenir un exemple, consultez Exemple H.

Dans l’exemple suivant, l’ID client () est supprimé des traits d’union et entré en tant que chaîne 00001111-aaaa-2222-bbbb-3333cccc4444 et le 11111111222233334444555555555555 est représenté par la chaîne .SECRET_DBEngine

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

L’exemple suivant crée les mêmes informations d’identification à l’aide de variables pour les chaînes Client ID et Secret, qui sont ensuite concaténées pour former l’argument SECRET. La fonction REPLACE est utilisée pour supprimer les tirets de l’ID client.

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. Création d’informations d’identification à l’aide d’un jeton SAP

S’applique à : SQL Server 2014 (12.x) jusqu’à la version actuelle et Azure SQL Managed Instance.

L’exemple suivant crée des informations d’identification avec signature d’accès partagé à l’aide d’un jeton SAP. Pour obtenir un tutoriel montrant comment créer une stratégie d’accès stockée et une signature d’accès partagé sur un conteneur Azure, puis créer des informations d’identification en utilisant la signature d’accès partagé, consultez Tutoriel : Utiliser Stockage Blob Azure avec des bases de données SQL Server.

Important

L’argument CREDENTIAL NAME exige que le nom corresponde au chemin du conteneur, commence par https et ne se termine pas par une barre oblique. L’argument IDENTITY nécessite le nom, SHARED ACCESS SIGNATURE. L’argument SECRET nécessite le jeton de signature d’accès partagé.

Le secret de SHARED ACCESS SIGNATURE ne doit pas avoir ? comme premier caractère.

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. Création d’informations d’identification pour l’identité managée

L’exemple suivant crée les informations d’identification qui représentent l’identité managée du service Azure SQL ou Azure Synapse. Le mot de passe et le secret ne sont pas applicables dans ce cas.

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

Pour obtenir un exemple de création d’informations d’identification avec une identité managée pour SQL Server sur une machine virtuelle Azure, consultez Exemple G et Exemple H. L’identité managée au niveau du serveur n’est pas prise en charge pour Linux.

F. Créer des informations d’identification pour le stockage compatible sauvegarde/restauration sur S3

S’applique à : SQL Server 2022 (16.x) et versions ultérieures

La norme compatible S3 ouverte fournit des chemins de stockage et des détails qui peuvent différer en fonction de la plateforme de stockage. Pour plus d’informations, consultez Sauvegarde SQL Server sur URL pour le stockage d’objets compatible S3.

Pour la plupart des stockages compatibles avec S3, cet exemple crée des informations d’identification au niveau du serveur et effectue un 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;

Toutefois, AWS S3 prend en charge deux normes d’URL différentes.

  • S3://<BUCKET_NAME>.S3.<REGION>.AMAZONAWS.COM/<FOLDER> (valeur par défaut)
  • S3://S3.<REGION>.AMAZONAWS.COM/<BUCKET_NAME>/<FOLDER>

Il existe plusieurs approches pour créer des informations d’identification pour AWS S3 :

  • Indiquez le nom et le chemin d’accès et la région du compartiment dans le nom des informations d’identification.

    -- 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
    

    Ou,

    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
    
  • Vous pouvez également fournir le nom et le chemin du compartiment dans le nom des informations d’identification, mais paramétrez la région dans chaque BACKUP/RESTORE commande. Utilisez la chaîne de région spécifique À S3 dans l’et BACKUP_OPTIONSRESTORE_OPTIONS, par exemple, '{"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. Créer des informations d’identification pour accéder au Stockage Blob Azure à l’aide d’une identité managée

À compter de SQL Server 2022 CU17, vous pouvez utiliser des identités managées avec des informations d’identification SQL Server pour sauvegarder et restaurer SQL Server sur des bases de données de machines virtuelles Azure à partir du stockage Blob Azure. Pour plus d’informations, consultez Sauvegarde et restauration vers l’URL à l’aide d’identités managées.

Pour créer des informations d’identification avec une identité managée à utiliser avec les opérations BACKUP et RESTORE, utilisez l’exemple suivant :

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

'indicateur de trace 4675 pouvez être utilisé pour vérifier les informations d’identification créées avec une identité managée. Si l’instruction CREATE CREDENTIAL a été exécutée sans indicateur de trace 4675 activé, aucun message d’erreur n’est émis si l’identité managée principale n’est pas définie pour le serveur. Pour résoudre ce scénario, les informations d’identification doivent être supprimées et recréées une fois l’indicateur de trace activé.

H. Créer des informations d’identification d’identité managée pour la gestion extensible des clés avec Azure Key Vault

À compter de SQL Server 2022 CU17, vous pouvez également utiliser des identités managées sur SQL Server sur des machines virtuelles Azure pour la gestion de clés extensible (EKM) avec Azure Key Vault (AKV). Pour plus d’informations, consultez prise en charge de Managed Identity pour Extensible Key Management avec Azure Key Vault.

Pour créer des informations d’identification d’identité managée à utiliser avec EKM avec AKV, utilisez l’exemple suivant :

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

Par exemple:

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

'indicateur de trace 4675 pouvez être utilisé pour vérifier les informations d’identification créées avec une identité managée. Si l’instruction CREATE CREDENTIAL a été exécutée sans indicateur de trace 4675 activé, aucun message d’erreur n’est émis si l’identité managée principale n’est pas définie pour le serveur. Pour résoudre ce scénario, les informations d’identification doivent être supprimées et recréées une fois l’indicateur de trace activé.