CREATE CREDENTIAL (T-SQL)

Berlaku untuk:SQL ServerAzure SQL Managed Instance

Membuat kredensial tingkat server. Kredensial adalah rekaman yang berisi informasi autentikasi yang diperlukan untuk menyambungkan ke sumber daya di luar SQL Server. Sebagian besar kredensial mencakup pengguna dan kata sandi Windows. Misalnya, menyimpan cadangan database ke beberapa lokasi mungkin memerlukan SQL Server untuk memberikan kredensial khusus untuk mengakses lokasi tersebut. Untuk informasi selengkapnya, lihat Kredensial (Mesin Database).

Catatan

Untuk membuat kredensial di tingkat database, gunakan CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL). Buat kredensial tingkat server dengan CREATE CREDENTIAL saat Anda perlu menggunakan kredensial yang sama untuk beberapa database di server.

  • Buat kredensial cakupan database dengan CREATE DATABASE SCOPED CREDENTIAL untuk membuat database lebih portabel. Saat database dipindahkan ke server baru, kredensial lingkup database akan berpindah dengannya.
  • Gunakan kredensial lingkup database di SQL Database.
  • Gunakan kredensial tercakup database dengan fitur virtualisasi data PolyBase dan Azure SQL Managed Instance.

Konvensi sintaks transact-SQL

Sintaksis

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

Catatan

Untuk melihat sintaks Transact-SQL untuk SQL Server 2014 (12.x) dan versi yang lebih lama, lihat Dokumentasi versi sebelumnya.

Argumen

credential_name

Menentukan nama kredensial yang sedang dibuat. credential_name tidak dapat dimulai dengan tanda angka (#). Kredensial sistem dimulai dengan ##.

Penting

Saat menggunakan tanda tangan akses bersama (SAS), nama ini harus cocok dengan jalur kontainer, dimulai dengan https dan tidak boleh berisi garis miring. Lihat contoh D.

Saat digunakan untuk pencadangan/pemulihan menggunakan platform data ke eksternal, seperti Azure Blob Storage atau platform yang kompatibel dengan S3, tabel berikut ini menyediakan jalur umum:

Sumber Data Eksternal Jalur lokasi Contoh
Azure Blob Storage (V2) https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername> Contoh D.
Penyimpanan objek yang kompatibel dengan S3 - Penyimpanan yang kompatibel dengan S3: s3://<server_name>:<port>/
- AWS S3: s3://<bucket_name>.S3.<region>.amazonaws.com[:port]/<folder>
atau s3://s3.<region>.amazonaws.com[:port]/<bucket_name>/<folder>
Contoh F.

IDENTITY ='identity_name'

Menentukan nama akun yang akan digunakan saat menyambungkan ke luar server. Saat kredensial digunakan untuk mengakses Azure Key Vault, IDENTITY adalah nama brankas kunci. Lihat contoh C di bawah ini. Saat kredensial menggunakan tanda tangan akses bersama (SAS), IDENTITAS adalah TANDA TANGAN AKSES BERSAMA. Lihat contoh D di bawah ini.

Penting

Azure SQL Database hanya mendukung identitas Azure Key Vault dan Tanda Tangan Akses Bersama. Identitas pengguna Windows tidak didukung.

SECRET ='secret'

Menentukan rahasia yang diperlukan untuk autentikasi keluar.

Saat kredensial digunakan untuk mengakses Azure Key Vault, argumen SECRET harus diformat sebagai ID> klien perwakilan layanan (tanpa tanda hubung) dan< rahasia>, diteruskan bersama-sama tanpa spasi di antaranya.< Lihat contoh C di bawah ini. Saat kredensial menggunakan tanda tangan akses bersama, SECRET adalah token tanda tangan akses bersama. Lihat contoh D di bawah ini. Untuk informasi tentang membuat kebijakan akses tersimpan dan tanda tangan akses bersama pada kontainer Azure, lihat Pelajaran 1: Membuat kebijakan akses tersimpan dan tanda tangan akses bersama pada kontainer Azure.

UNTUK cryptographic_provider_name PENYEDIA KRIPTOGRAFI

Menentukan nama Penyedia Manajemen Kunci Perusahaan (EKM). Untuk informasi selengkapnya tentang Manajemen Kunci, lihat Extensible Key Management (EKM).

Keterangan

Ketika IDENTITY adalah pengguna Windows, rahasianya bisa menjadi kata sandi. Rahasia dienkripsi menggunakan kunci master layanan. Jika kunci master layanan diregenerasi, rahasia dienkripsi ulang menggunakan kunci master layanan baru.

Setelah membuat kredensial, Anda dapat memetakannya ke login SQL Server dengan menggunakan CREATE LOGIN atau ALTER LOGIN. Login SQL Server hanya dapat dipetakan ke satu kredensial, tetapi satu kredensial dapat dipetakan ke beberapa login SQL Server. Untuk informasi selengkapnya, lihat Kredensial (Mesin Database). Kredensial tingkat server hanya dapat dipetakan ke login, bukan ke pengguna database.

Informasi tentang kredensial terlihat dalam tampilan katalog sys.credentials .

Jika tidak ada info masuk yang dipetakan masuk untuk penyedia, kredensial yang dipetakan ke akun layanan SQL Server digunakan.

Login dapat memiliki beberapa kredensial yang dipetakan ke dalamnya selama digunakan dengan penyedia yang khas. Hanya boleh ada satu kredensial yang dipetakan per penyedia per login. Kredensial yang sama dapat dipetakan ke login lain.

Izin

Memerlukan izin UBAH KREDENSIAL APA PUN.

Contoh

J. Membuat Kredensial untuk Identitas Windows

Contoh berikut membuat kredensial yang disebut AlterEgo. Kredensial berisi pengguna Mary5 Windows dan kata sandi.

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

B. Membuat Kredensial untuk EKM

Contoh berikut menggunakan akun yang dibuat sebelumnya yang disebut User1OnEKM pada modul EKM melalui alat Manajemen EKM, dengan jenis akun dasar dan kata sandi. Akun sysadmin di server membuat kredensial yang digunakan untuk menyambungkan ke akun EKM, dan menetapkannya ke User1 akun SQL Server:

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. Membuat Kredensial untuk EKM Menggunakan Azure Key Vault

Contoh berikut membuat kredensial SQL Server untuk digunakan Mesin Database saat mengakses Azure Key Vault menggunakan SQL Server Connector untuk Microsoft Azure Key Vault. Untuk contoh lengkap penggunaan Koneksi or SQL Server, lihat Extensible Key Management Menggunakan Azure Key Vault (SQL Server).

Penting

Argumen IDENTITY dari CREATE CREDENTIAL memerlukan nama brankas kunci. Argumen SECRET dari CREATE CREDENTIAL memerlukan <ID> Klien (tanpa tanda hubung) dan <Rahasia> untuk diteruskan bersama-sama tanpa spasi di antara mereka.

Dalam contoh berikut, ID Klien (EF5C8E09-4D2A-4A76-9998-D93440D8115D) dilucuti dari tanda hubung dan dimasukkan sebagai string EF5C8E094D2A4A769998D93440D8115D dan Rahasia diwakili oleh string SECRET_DBEngine.

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

Contoh berikut membuat kredensial yang sama dengan menggunakan variabel untuk ID Klien dan string Rahasia, yang kemudian digabungkan bersama-sama untuk membentuk argumen SECRET. Fungsi REPLACE digunakan untuk menghapus tanda hubung dari ID Klien.

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. Membuat kredensial menggunakan Token SAS

Berlaku untuk: SQL Server 2014 (12.x) melalui versi saat ini dan Azure SQL Managed Instance.

Contoh berikut membuat kredensial tanda tangan akses bersama menggunakan token SAS. Untuk tutorial tentang membuat kebijakan akses tersimpan dan tanda tangan akses bersama pada kontainer Azure, lalu membuat kredensial menggunakan tanda tangan akses bersama, lihat Tutorial: Menggunakan Microsoft Azure Blob Storage dengan database SQL Server.

Penting

Argumen NAMA KREDENSIAL mengharuskan nama cocok dengan jalur kontainer, dimulai dengan https dan tidak berisi garis miring berikutnya. Argumen IDENTITY memerlukan nama, SHARED ACCESS SIGNATURE. Argumen SECRET memerlukan token tanda tangan akses bersama.

Rahasia TANDA TANGAN AKSES BERSAMA seharusnya tidak memiliki ?.

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. Membuat kredensial untuk Identitas Terkelola

Contoh berikut membuat kredensial yang mewakili Identitas Terkelola layanan Azure SQL atau Azure Synapse. Kata sandi dan rahasia tidak berlaku dalam kasus ini.

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

F. Membuat kredensial untuk pencadangan/pemulihan ke penyimpanan yang kompatibel dengan S3

Berlaku untuk: SQL Server 2022 (16.x) dan versi yang lebih baru

Standar terbuka yang kompatibel dengan S3 menyediakan jalur penyimpanan dan detail yang mungkin berbeda berdasarkan platform penyimpanan. Untuk informasi selengkapnya, lihat Cadangan SQL Server ke URL untuk penyimpanan objek yang kompatibel dengan S3.

Untuk sebagian besar penyimpanan yang kompatibel dengan S3, contoh ini membuat kredensial tingkat server dan melakukan 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;

Namun, AWS S3 mendukung dua standar URL yang berbeda.

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

Ada beberapa pendekatan untuk berhasil membuat kredensial untuk AWS S3:

  • Berikan nama wadah dan jalur dan wilayah dalam nama kredensial.

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

    Atau,

    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
    
  • Atau, berikan nama wadah dan jalur dalam nama kredensial, tetapi parameterisasi wilayah dalam setiap BACKUP/RESTORE perintah. Gunakan string wilayah khusus S3 di BACKUP_OPTIONS dan RESTORE_OPTIONS, misalnya, '{"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