CREATE CREDENTIAL (Transact-SQL)

S’applique à : SQL Server Azure 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 dièse (#). 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’elles sont utilisées pour la sauvegarde/restauration à l’aide de plateformes de données externes, telles que des plateformes compatibles Stockage Blob Azure ou 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 D.
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 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> client d’un principal de< service (sans traits d’union) et <secret>, 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.

Dans l’exemple suivant, l’ID client (11111111-2222-3333-4444-555555555555) est supprimé des traits d’union et entré en tant que chaîne 11111111222233334444555555555555 et le secret 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 SQL Azure 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

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