CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL)

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

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

Transact-SQL 構文表記規則

構文

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

Note

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

引数

credential_name

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

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 は無視されます。
  • Azure Blob Storage 内のコンテナーで匿名アクセスが有効になっている場合は、WITH IDENTITY を使用する必要はありません。 Azure Blob Storage に対するクエリの例については、「Azure Blob Storage に格納されているファイルからテーブルへのインポート」を参照してください。

重要

Kerberos 認証をサポートする PolyBase 外部データ ソースは Hadoop だけです。 他のすべての外部データ ソース (SQL Server、Oracle、Teradata、MongoDB、汎用 ODBC) は、基本認証のみをサポートします。

  • データを 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、またはストレージ アクセス キーを指定できます。

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

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

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

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

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

  • SQL Server は、PolyBase を使用するパブリックではない Azure Blob Storage または Kerberos でセキュリティ保護された Hadoop クラスターにアクセスするために、データベース スコープの資格情報を使います。 詳しくは、「CREATE EXTERNAL DATA SOURCE (Transact-SQL)」をご覧ください。

  • Azure Synapse Analytics は、PolyBase を使用するパブリックではない Azure Blob Storage にアクセスするために、データベース スコープの資格情報を使います。 詳しくは、「CREATE EXTERNAL DATA SOURCE (Transact-SQL)」をご覧ください。 Azure Synapse ストレージ認証の詳細については、「Synapse SQL で外部テーブルを使用する」を参照してください。

  • SQL Database は、グローバル クエリ機能にデータベース スコープ資格情報を使用します。 これは、複数のデータベース シャード間でクエリする機能です。

  • SQL Database は、データベース スコープの資格情報を使って、Azure Blob Storage に拡張イベント ファイルを書き込みます。

  • SQL Database は、エラスティック プールにデータベース スコープ資格情報を使用します。 詳しくは、エラスティック データベースでの急増の緩和に関する記事をご覧ください

  • BULK INSERTOPENROWSET は、データベース スコープの資格情報を使って、Azure Blob Storage のデータにアクセスします。 詳しくは、「Azure BLOB ストレージのデータに一括アクセスする例」をご覧ください。

  • PolyBaseAzure SQL Managed Instance のデータ仮想化機能で、データベース スコープの資格情報を使用します。

  • BACKUP TO URL と RESTORE FROM URL の場合は、代わりに CREATE CREDENTIAL (Transact-SQL) を使用してサーバー レベルの資格情報を使用します。

アクセス許可

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

SQL Server 2022

SQL Server 2022 (16.x) 以降、Hadoop に代わりに REST-API 呼び出しを使用する新しい種類のコネクタが導入されました。 Azure Blob Storage と Azure Data Lake Gen 2 の場合、サポートされている認証方法は SHARED ACCESS SIGNATURE のみです。

詳細については、外部データ ソースの作成に関する記事を参照してください。

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 INSERTOPENROWSET など、一括操作できる外部データ ソースの作成に使用できるデータベース スコープ資格情報を作成します。 Shared Access Signatures は、SQL Server、APS、または Azure Synapse Analytics では PolyBase と共に使用できません。

-- 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、および Key を文書化してください

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