次の方法で共有


CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL)

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Microsoft Fabric SQL Database

データベースの資格情報を作成します。 データベースの資格情報は、サーバー ログインまたはデータベース ユーザーにマップされません。 アクセスを必要とする操作がデータベースで実行されている場合はいつも、データベースでは資格情報を使用して外部の場所へのアクセスが行われます。

Transact-SQL 構文表記規則

構文

CREATE DATABASE SCOPED CREDENTIAL credential_name
WITH IDENTITY = 'identity_name'
    [ , SECRET = 'secret' ]
[ ; ]

引数

credential_name

作成するデータベース スコープの資格情報の名前を指定します。 credential_name 番号 (#) 記号で始めることはできません。 システム資格情報は、 ##で始まります。 credential_nameの最大長は 128 文字です。

IDENTITY = 'identity_name'

サーバーの外部に接続するときに使用するアカウントの名前を指定します。

  • 共有キーを使用して Azure Blob Storage または Azure Data Lake Storage からファイルをインポートするには、ID 名が SHARED ACCESS SIGNATURE である必要があります。 Shared Access Signature の詳細については、「Shared Access Signatures (SAS) の使用」をご覧ください。 Shared Access Signature 用に IDENTITY = SHARED ACCESS SIGNATURE を使うだけです。
  • マネージド ID を使用して Azure Blob Storage からファイルをインポートするには、ID 名が MANAGED IDENTITY である必要があります。
  • Kerberos (Windows Active Directory または MIT KDC) を使用する場合は、 IDENTITY 引数にドメイン名を使用しないでください。 アカウント名にしておけば問題ありません。
  • SQL Server インスタンスで、 SECRETとして使用されるストレージ アクセス キーを使用してデータベース スコープの資格情報を作成する場合、 IDENTITY は無視されます。
  • WITH IDENTITY は、Azure Blob Storage 内のコンテナーで匿名アクセスが有効になっている場合は必要ありません。 OPENROWSET BULKを使用して Azure Blob Storage にクエリを実行する例については、「Azure Blob Storage に格納されているファイルからテーブルにインポートする」を参照してください。
  • SQL Server 2022 (16.x) 以降のバージョンでは、REST-API コネクタによって HADOOP が置き換えられます。 Azure Blob Storage と Azure Data Lake Gen 2 の場合、サポートされている認証方法は Shared Access Signature のみです。 詳細については、「 CREATE EXTERNAL DATA SOURCE (Transact-SQL)」を参照してください。
  • SQL Server 2019 (15.x) では、Kerberos 認証をサポートする PolyBase 外部データ ソースは Hadoop のみです。 他のすべての外部データ ソース (SQL Server、Oracle、Teradata、MongoDB、汎用 ODBC) は、基本認証のみをサポートします。
  • Azure Synapse Analytics の SQL プールには、次の注意事項があります。
    • Azure Synapse Analytics にデータを読み込むには、任意の有効な値を IDENTITYに使用できます。
    • Azure Synapse Analytics サーバーレス SQL プールでは、データベース スコープの資格情報で、ワークスペースのマネージド ID、サービス プリンシパル名、または Shared Access Signature (SAS) トークンを指定できます。 Microsoft Entra パススルー認証によって有効になっているユーザー ID を介したアクセスは、パブリックに使用可能なストレージへの匿名アクセスと同様に、データベース スコープの資格情報を使用して行うこともできます。 詳しくは、「サポートされているストレージ承認の種類」を参照してください。
    • Azure Synapse Analytics 専用 SQL プールでは、データベース スコープの資格情報で、Shared Access Signature (SAS) トークン、カスタム アプリケーション ID、ワークスペースマネージド ID、またはストレージ アクセス キーを指定できます。
認証 T-SQL サポートされています メモ
Shared Access Signature (SAS) CREATE DATABASE SCOPED CREDENTIAL <credential_name> WITH IDENTITY = 'SHARED ACCESS SIGNATURE', SECRET = 'secret'; SQL Server 2022、Azure SQL Managed Instance、Azure Synapse Analytics、Azure SQL Database
マネージド ID CREATE DATABASE SCOPED CREDENTIAL <credential_name> WITH IDENTITY = 'MANAGED IDENTITY'; Azure SQL Database、SQL マネージド ID
ユーザー ID を使用した Microsoft Entra パススルー認証 CREATE DATABASE SCOPED CREDENTIAL <credential_name> WITH IDENTITY = 'USER IDENTITY'; Azure SQL データベース Azure Synapse で、「Microsoft Entra Connect: パススルー認証」を参照してください
S3 アクセス キーの基本認証 CREATE DATABASE SCOPED CREDENTIAL <credential_name> WITH IDENTITY = 'S3 ACCESS KEY', SECRET = '<accesskey>:<secretkey>'; SQL Server 2022
Kerberos (Windows Active Directory または MIT KDC) または ODBC データ ソース用 CREATE DATABASE SCOPED CREDENTIAL <credential_name> WITH IDENTITY = '<identity_name>', SECRET = '<secret>'; Hadoop のみのバージョンの SQL

SECRET = 'secret'

送信の認証に必要なシークレットを指定します。 SECRET は、Azure Blob Storage からファイルをインポートするために必要です。 Azure Blob Storage から Azure Synapse Analytics または Parallel Data Warehouse に読み込むには、シークレットが Azure Storage キーである必要があります。

警告

SAS キーの値は '?' (疑問符) で始まる可能性があります。 SAS キーを使用する場合は、先頭の '?' を削除する必要があります。 そうしないと、作業がブロックされる可能性があります。

解説

データベース スコープ資格情報は、SQL Server 外部のリソースへの接続に必要な認証情報を含むレコードです。 通常、資格情報には Windows ユーザーとパスワードが含まれます。

データベース スコープ資格情報内の機密情報を保護するには、データベース マスター キー (DMK) が必要です。 DMK は、データベース スコープ資格情報のシークレットを暗号化する対称キーです。 データベース スコープの資格情報を作成するには、データベースに DMK が必要です。 DMK は強力なパスワードで暗号化する必要があります。 Azure SQL Database では、データベース スコープ資格情報の作成の一環として、またはサーバー監査の作成の一環として、強力でランダムに選択されたパスワードを持つ DMK が作成されます。 ユーザーは論理 master データベースに DMK を作成できません。 マスター キーのパスワードは Microsoft では不明であり、作成後は検出できません。 このため、データベース スコープ資格情報を作成する前に DMK を作成することをお勧めします。 詳細については、「CREATE MASTER KEY (Transact-SQL)」を参照してください。

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

PolyBase 外部テーブルで使用するために共有アクセス署名 (SAS) にアクセス許可を付与する場合は、許可されるリソースの種類として [コンテナー][オブジェクト] の両方を選びます。 許可されていない場合は、外部テーブルにアクセスしようとすると、エラー 16535 または 16561 が表示されることがあります。

データベース スコープの資格情報に関する情報は、sys.database_scoped_credentials カタログ ビューで確認できます。

ここでは、データベース スコープ資格情報のアプリケーションをいくつか示します。

アクセス許可

データベースに対する CONTROL 権限が必要です。

A。 アプリケーションのデータベース スコープ資格情報を作成する

次の例では、AppCred というデータベース スコープ資格情報を作成します。 データベース スコープ資格情報には Windows ユーザー Mary5 とパスワードが含まれます。

-- Create a db master key if one does not already exist, using your own password.
CREATE MASTER KEY ENCRYPTION BY PASSWORD='<EnterStrongPasswordHere>';

-- Create a database scoped credential.
CREATE DATABASE SCOPED CREDENTIAL AppCred WITH IDENTITY = 'Mary5',
    SECRET = '<EnterStrongPasswordHere>';

B. Shared Access Signature のデータベース スコープ資格情報を作成する

次の例では、BULK INSERT (Transact-SQL)OPENROWSET (Transact-SQL) などの一括操作を実行できる、外部データ ソースの作成に使用できるデータベース スコープ資格情報を作成します。

-- Create a db master key if one does not already exist, using your own password.
CREATE MASTER KEY ENCRYPTION BY PASSWORD='<EnterStrongPasswordHere>';

-- Create a database scoped credential.
CREATE DATABASE SCOPED CREDENTIAL MyCredentials
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = 'QLYMgmSXMklt%2FI1U6DcVrQixnlU5Sgbtk1qDRakUBGs%3D';

C: Azure Data Lake Store への PolyBase 接続のデータベース スコープ資格情報を作成する

次の例では、Azure Synapse Analytics で PolyBase によって使用できる外部データ ソースの作成に使用できるデータベース スコープ資格情報を作成します。

Azure Data Lake Store では、サービス間認証に Microsoft Entra アプリケーションを使用します。

Microsoft Entra アプリケーションを作成し データベース スコープの資格情報を作成する前に、client_id、OAuth_2.0_Token_EndPoint、およびキーを文書化します。

-- Create a db master key if one does not already exist, using your own password.
CREATE MASTER KEY ENCRYPTION BY PASSWORD='<EnterStrongPasswordHere>';

-- Create a database scoped credential.
CREATE DATABASE SCOPED CREDENTIAL ADL_User
WITH
    IDENTITY = '<client_id>@<OAuth_2.0_Token_EndPoint>',
    SECRET = '<key>'
;