CREATE CREDENTIAL (Transact-SQL)

適用対象: はいSQL Server (サポートされているすべてのバージョン) はいAzure SQL Managed Instance

サーバー レベルの資格情報を作成します。 資格情報は、SQL Server 外部のリソースへの接続に必要な認証情報を含むレコードです。 通常、資格情報には Windows ユーザーとパスワードが含まれます。 たとえば、どこかにデータベースのバックアップを保存するには、その場所にアクセスするための特別な資格情報を SQL Server で提供することが必要な場合があります。 詳しくは、「資格情報 (データベース エンジン)」をご覧ください。

注意

データベース レベルで資格情報を作成するには、CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL) を使います。 サーバーの複数のデータベースで同じ資格情報を使う必要がある場合は、サーバー レベルの資格情報を使います。 データベースの移植性を高めるには、データベース スコープの資格情報を使います。 新しいサーバーにデータベースを移動するとき、データベース スコープの資格情報はそれと共に移動します。 SQL Database ではデータベース スコープの資格情報を使います。

トピック リンク アイコン Transact-SQL 構文表記規則

構文

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

注意

SQL Server 2014 以前の Transact-SQL 構文を確認するには、以前のバージョンのドキュメントを参照してください。

引数

credential_name 作成する資格情報の名前を指定します。 credential_name はシャープ (#) 記号で始めることはできません。 システム資格情報は ## で始まります。

重要

共有アクセス署名 (SAS) を使用する場合、この名前はコンテナー パスと一致し、https で始まる必要があります。スラッシュを含めることはできません。 例 D を参照してください。

IDENTITY =' identity_name ' サーバーの外部に接続するときに使用するアカウントの名前を指定します。 Azure Key Vault へのアクセスに資格情報を使うときは、IDENTITY はキー コンテナーの名前です。 後述の C の例を参照してください。 資格情報で Shared Access Signature (SAS) を使っているときは、IDENTITYSHARED ACCESS SIGNATURE です。 後述の D の例を参照してください。

重要

Azure SQL Database でサポートされるのは、Azure Key Vault と Shared Access Signature の ID のみです。 Windows ユーザー ID はサポートされません。

SECRET =' secret ' 送信の認証に必要なシークレットを指定します。

Azure Key Vault へのアクセスに資格情報を使うときは、CREATE CREDENTIALSECRET 引数に、Azure Active Directory の サービス プリンシパル<Client ID> (ハイフンなし) と <Secret> を間のスペースなしで渡す必要があります。 後述の C の例を参照してください。 資格情報が Shared Access Signature を使っている場合は、SECRET は Shared Access Signature トークンです。 後述の D の例を参照してください。 Azure コンテナーで格納済みアクセス ポリシーと Shared Access Signature を作成する方法について詳しくは、「レッスン 1:Azure コンテナーに格納済みアクセス ポリシーと Shared Access Signature を作成する」をご覧ください。

FOR CRYPTOGRAPHIC PROVIDER cryptographic_provider_name 拡張キー管理プロバイダー (EKM) の名前を指定します。 キーの管理について詳しくは、「拡張キー管理 (EKM)」をご覧ください。

解説

IDENTITY が Windows ユーザーの場合、このシークレットはパスワードにすることができます。 シークレットはサービス マスター キーを使用して暗号化されます。 サービス マスター キーが再生成された場合、シークレットは新しいサービス マスター キーを使用して再度暗号化されます。

資格情報を作成した後、CREATE LOGIN または ALTER LOGIN を使って、この資格情報を SQL Server ログインにマップすることができます。 1 つの SQL Server ログインは 1 つの資格情報だけにマップできますが、1 つの資格情報は複数の SQL Server ログインにマップできます。 詳細については、「資格情報 (データベース エンジン)」を参照してください。 サーバー レベルの資格情報は、ログインにのみマップでき、データベース ユーザーにはマップできません。

資格情報に関する情報は、sys.credentials カタログ ビューで確認できます。

ログインにマップされたプロバイダーの資格情報がない場合は、 SQL Server サービス アカウントにマップされた資格情報が使用されます。

それぞれが異なるプロバイダーで使用される資格情報であれば、1 つのログインに複数の資格情報をマップできます。 マップされた資格情報は、各ログインで各プロバイダーにつき 1 つだけ存在する必要があります。 同じ資格情報を他のログインにマップすることはできます。

アクセス許可

ALTER ANY CREDENTIAL 権限が必要です。

A. Windows ID の資格情報の作成

次の例では、資格情報 AlterEgo を作成します。 この資格情報には Windows ユーザー Mary5 とパスワードが含まれます。

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

B. EKM の資格情報の作成

次の例では、以前に EKM 管理ツールを使って EKM モジュール上に作成した User1OnEKM というアカウントを、基本的なアカウントの種類とパスワードと共に使用します。 サーバーの sysadmin アカウントで、EKM アカウントへの接続に使用する資格情報を作成し、User1 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. Azure キー コンテナーを使用する EKM の資格情報の作成

次の例では、SQL Server コネクタ for Microsoft Azure Key Vault を使って Azure Key Vault にアクセスするときに使う、データベース エンジン用の SQL Server 資格情報を作成します。 SQL Server コネクタの完全な使用例については、「Azure Key Vault を使用する拡張キー管理 (SQL Server)」をご覧ください。

重要

CREATE CREDENTIALIDENTITY 引数には、資格情報コンテナー名が必要です。 CREATE CREDENTIALSECRET 引数には、 <Client ID> (ハイフンなし) と <Secret> を、間にスペースを入れずに一緒に渡す必要があります。

次の例で、 クライアント ID (EF5C8E09-4D2A-4A76-9998-D93440D8115D) はハイフンを削除した文字列 EF5C8E094D2A4A769998D93440D8115D として入力し、 シークレット は文字列 SECRET_DBEngine として入力しています。

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

次の例では、クライアント IDシークレット の文字列に変数を使って、同じ資格情報を作成します。これらの文字列は連結されて SECRET 引数を形成します。 REPLACE 関数は、クライアント ID からハイフンを取り除く目的で使用されています。

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. SAS トークンを使用する資格情報の作成

適用対象: SQL Server 2014 (12.x) から 現在のバージョン および Azure SQL Managed Instance。

次の例では、SAS トークンを使用して共有アクセス署名資格情報を作成します。 Azure コンテナーで格納済みアクセス ポリシーと Shared Access Signature を作成してから、Shared Access Signature を使って資格情報を作成するチュートリアルについては、「チュートリアル:Microsoft Azure Blob Storage サービスと SQL Server 2016 データベースの使用」をご覧ください。

重要

CREDENTIAL NAME 引数では、名前がコンテナーのパス (https で始まり、末尾のスラッシュを含まないもの) と一致する必要があります。 IDENTITY 引数には、名前 SHARED ACCESS SIGNATURE が必要です。 SECRET 引数には、Shared Access Signature トークンが必要です。

SHARED ACCESS SIGNATURE シークレット の先頭を ? にすることはできません。

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. マネージド ID の資格情報の作成

次の例では、Azure SQL または Azure Synapse サービスのマネージド ID を表す資格情報を作成します。 このケースでは、パスワードとシークレットは適用されません。

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

参照