Delen via


CREATE CREDENTIAL (Transact-SQL)

van toepassing op:SQL ServerAzure SQL Managed Instance

Hiermee maakt u een referentie op serverniveau. Een referentie is een record die de verificatiegegevens bevat die nodig zijn om verbinding te maken met een resource buiten SQL Server. De meeste referenties bevatten een Windows-gebruiker en -wachtwoord. Als u bijvoorbeeld een databaseback-up op een bepaalde locatie opslaat, moet SQL Server mogelijk speciale referenties opgeven voor toegang tot die locatie. Zie Referenties (Database Engine)voor meer informatie.

Notitie

Gebruik CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL)om de referentie op databaseniveau te maken. Maak een referentie op serverniveau met CREATE CREDENTIAL wanneer u dezelfde referentie moet gebruiken voor meerdere databases op de server.

  • Maak een databasereferentie met CREATE DATABASE SCOPED CREDENTIAL om de database draagbaarder te maken. Wanneer een database naar een nieuwe server wordt verplaatst, wordt de referentie binnen het databasebereik mee verplaatst.
  • Gebruik databasereferenties in SQL Database.
  • Gebruik databasereferenties met PolyBase- en gegevensvirtualisatie van Azure SQL Managed Instance functies.

Transact-SQL syntaxisconventies

Syntaxis

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

Argumenten

credential_name

Hiermee geeft u de naam van de referentie die wordt gemaakt. credential_name kan niet beginnen met het nummerteken (#). Systeemreferenties beginnen met ##.

Belangrijk

Wanneer u een Sas (Shared Access Signature) gebruikt, moet deze naam overeenkomen met het containerpad, beginnen met https en mag deze geen slash bevatten. Zie voorbeeld D.

Wanneer u wordt gebruikt voor back-up/herstel met behulp van een naar externe gegevensplatformen, zoals Azure Blob Storage of S3-compatibele platforms, biedt de volgende tabel algemene paden:

Externe gegevensbron Locatiepad Voorbeeld
Azure Blob Storage (V2) https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername> voorbeeld D.
S3-compatibele objectopslag - S3-compatibele opslag: s3://<server_name>:<port>/
- AWS S3: s3://<bucket_name>.S3.<region>.amazonaws.com[:port]/<folder>
of s3://s3.<region>.amazonaws.com[:port]/<bucket_name>/<folder>
voorbeeld F.

IDENTITY ='identity_name'

Hiermee geeft u de naam op van het account dat moet worden gebruikt bij het maken van verbinding buiten de server. Wanneer de referentie wordt gebruikt voor toegang tot Azure Key Vault, is de IDENTITY de naam van de sleutelkluis. Zie voorbeeld C hieronder. Wanneer de referentie gebruikmaakt van een SHARED Access Signature (SAS), wordt de IDENTITY-SHARED ACCESS SIGNATURE. Zie voorbeeld D hieronder.

Belangrijk

Azure SQL Database ondersteunt alleen Azure Key Vault- en Shared Access Signature-identiteiten. Windows-gebruikersidentiteiten worden niet ondersteund.

SECRET ='geheim'

Hiermee geeft u het geheim op dat is vereist voor uitgaande verificatie.

Wanneer de referentie wordt gebruikt voor toegang tot Azure Key Vault, moet het argument SECRET worden opgemaakt als de <client-id van een service-principal> (zonder afbreekstreepjes) en <geheim>, doorgegeven zonder spatie ertussen. Zie voorbeeld C hieronder. Wanneer de referentie een handtekening voor gedeelde toegang gebruikt, is het SECRET het shared access signature-token. Zie voorbeeld D hieronder. Zie Les 1 voor informatie over het maken van een opgeslagen toegangsbeleid en een handtekening voor gedeelde toegang in eenAzure-container.

VOOR CRYPTOGRAFISCHE PROVIDER cryptographic_provider_name

Hiermee geeft u de naam van een Enterprise Key Management Provider (EKM). Zie EKM-(Extensible Key Management) voor meer informatie over Key Management.

Opmerkingen

Wanneer IDENTITY een Windows-gebruiker is, kan het geheim het wachtwoord zijn. Het geheim wordt versleuteld met behulp van de hoofdsleutel van de service. Als de hoofdsleutel van de service opnieuw wordt gegenereerd, wordt het geheim opnieuw versleuteld met behulp van de nieuwe servicehoofdsleutel.

Nadat u een referentie hebt gemaakt, kunt u deze toewijzen aan een SQL Server-aanmelding met behulp van CREATE LOGIN of ALTER LOGIN. Een SQL Server-aanmelding kan worden toegewezen aan slechts één referentie, maar één referentie kan worden toegewezen aan meerdere SQL Server-aanmeldingen. Zie Referenties (Database Engine)voor meer informatie. Een referentie op serverniveau kan alleen worden toegewezen aan een aanmelding, niet aan een databasegebruiker.

Informatie over referenties is zichtbaar in de sys.credentials catalogusweergave.

Als er geen aanmeldingsreferentie voor de provider is toegewezen, wordt de referentie gebruikt die is toegewezen aan het SQL Server-serviceaccount.

Aan een aanmelding kunnen meerdere referenties zijn toegewezen zolang ze worden gebruikt met onderscheidende providers. Er mag slechts één toegewezen referentie per provider per aanmelding zijn. Dezelfde referentie kan worden toegewezen aan andere aanmeldingen.

Machtigingen

Hiervoor is ALTER ANY CREDENTIAL-machtiging vereist.

Voorbeelden

Een. Een referentie voor Windows-identiteit maken

In het volgende voorbeeld wordt de referentie AlterEgogemaakt. De referentie bevat de Windows-gebruiker Mary5 en een wachtwoord.

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

B. Een referentie maken voor EKM

In het volgende voorbeeld wordt een eerder gemaakt account gebruikt met de naam User1OnEKM op een EKM-module via de beheerhulpprogramma's van EKM, met een basisaccounttype en wachtwoord. Het sysadmin-account op de server maakt een referentie die wordt gebruikt om verbinding te maken met het EKM-account en wijst deze toe aan het User1 SQL Server-account:

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. Een referentie voor EKM maken met behulp van De Azure Key Vault

In het volgende voorbeeld wordt een SQL Server-referentie gemaakt voor de database-engine die moet worden gebruikt bij het openen van De Azure Key Vault met behulp van de SQL Server Connector voor Microsoft Azure Key Vault. Zie Extensible Key Management Using Azure Key Vault (SQL Server)voor een volledig voorbeeld van het gebruik van de SQL Server-connector.

Belangrijk

Voor het argument IDENTITY van CREATE CREDENTIAL is de naam van de sleutelkluis vereist. Voor het argument SECRET van CREATE CREDENTIAL moet de <client-id> (zonder afbreekstreepjes) en <Secret-> worden doorgegeven zonder spatie ertussen.

In het volgende voorbeeld wordt de Client-id (00001111-aaaa-2222-bbbb-3333cccc4444) verwijderd van de afbreekstreepjes en ingevoerd als de tekenreeks 11111111222233334444555555555555 en wordt de Geheim weergegeven door de tekenreeks SECRET_DBEngine.

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

In het volgende voorbeeld wordt dezelfde referentie gemaakt met behulp van variabelen voor de Client-id en Secret tekenreeksen, die vervolgens worden samengevoegd om het argument SECRET te vormen. De functie REPLACE wordt gebruikt om de afbreekstreepjes uit de client-id te verwijderen.

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. Een referentie maken met behulp van een SAS-token

is van toepassing op: SQL Server 2014 (12.x) via huidige versie en Azure SQL Managed Instance.

In het volgende voorbeeld wordt een handtekeningreferentie voor gedeelde toegang gemaakt met behulp van een SAS-token. Zie Zelfstudie: Microsoft Azure Blob Storage gebruiken met SQL Server-databasesvoor een zelfstudie over het maken van een opgeslagen toegangsbeleid en een handtekening voor gedeelde toegang.

Belangrijk

De REFERENTIENAAM argument vereist dat de naam overeenkomt met het containerpad, begint met https en geen afsluitende slash bevat. Het argument IDENTITY vereist de naam, SHARED ACCESS SIGNATURE-. Voor het argument SECRET is het shared access signature-token vereist.

Het SHARED ACCESS SIGNATURE-geheim mag niet de voorloop-hebben?.

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. Een referentie maken voor beheerde identiteit

In het volgende voorbeeld wordt de referentie gemaakt die de beheerde identiteit van de Azure SQL- of Azure Synapse-service vertegenwoordigt. Wachtwoord en geheim zijn in dit geval niet van toepassing.

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

F. Een referentie maken voor back-up/herstel naar S3-compatibele opslag

Van toepassing op: SQL Server 2022 (16.x) en latere versies

De open S3-compatibele standaard biedt opslagpaden en details die kunnen verschillen op basis van het opslagplatform. Zie BACK-up van SQL Server naar URL voor S3-compatibele objectopslagvoor meer informatie.

Voor de meeste S3-compatibele opslag wordt in dit voorbeeld een referentie op serverniveau gemaakt en wordt er een BACKUP TO URLuitgevoerd.

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 ondersteunt echter twee verschillende standaarden voor URL's.

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

Er zijn meerdere benaderingen voor het maken van een referentie voor AWS S3:

  • Geef de naam van de bucket en het pad en de regio op in de referentienaam.

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

    Of

    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
    
  • U kunt ook de naam en het pad van de bucket opgeven in de referentienaam, maar de regio binnen elke BACKUP/RESTORE opdracht parameteriseren. Gebruik de S3-specifieke regiotekenreeks in de BACKUP_OPTIONS en RESTORE_OPTIONS, bijvoorbeeld '{"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