CREATE DATABASE SCOPED CREDENTIAL (TRANSACT-SQL)

適用于:SQL Server (所有支援的版本) Azure SQL Database Azure SQL 受控執行個體 Azure Synapse Analytics Analytics Platform System (PDW)

建立資料庫認證。 資料庫認證未對應到伺服器登入或資料庫使用者。 每當資料庫執行需要存取權的作業時,資料庫就會使用該認證存取外部位置。

主題連結圖示Transact-SQL 語法慣例

Syntax

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

注意

若要檢視 SQL Server 2014 與更早版本的 Transact-SQL 語法,請參閱舊版文件

引數

credential_name

指定要建立之資料庫範圍認證的名稱。 credential_name 的開頭不可以是編號 (#) 符號。 系統認證必須以 ## 為開頭。

IDENTITY ='identity_name'

指定連接到伺服器外部時所要使用的帳戶名稱。

  • 若要使用共用金鑰從Azure Blob 儲存體或Azure Data Lake Storage匯入檔案,身分識別名稱必須是 SHARED ACCESS SIGNATURE 。 如需共用存取簽章的詳細資訊,請參閱使用共用存取簽章 (SAS)
  • 若要使用受控識別從Azure Blob 儲存體匯入檔案,身分識別名稱必須是 MANAGED IDENTITY
  • 您可將任何有效值用於身分識別,以將資料載入 Azure Synapse Analytics。
  • 使用 Kerberos (Windows Active Directory 或 MIT KDC) 時,IDENTITY 引數中請不要使用網域名稱。 它應只是帳戶名稱。
  • 當SQL Server時,如果使用作為 SECRET 的儲存體存取金鑰建立資料庫範圍認證,則會忽略 IDENTITY。

重要

唯一支援 Kerberos 驗證的 PolyBase 外部資料源是 Hadoop。 所有其他外部資料源 (SQL Server、Oracle、Teradata、MongoDB、一般 ODBC) 僅支援基本驗證。

注意

如果 Azure Blob 儲存體中的容器已針對匿名存取啟用,則不需要 WITH IDENTITY。 如需查詢 Azure Blob 儲存體的範例,請參閱從儲存在 Azure Blob 儲存體上的檔案匯入資料表

SECRET ='secret'

指定外寄驗證所需的秘密。 從 Azure Blob 儲存體匯入檔案需要 SECRET。 祕密必須是Azure 儲存體金鑰,才能從 Azure Blob 儲存體載入到 Azure Synapse Analytics 或平行處理資料倉儲。

警告

SAS 金鑰值的開頭可能是 '?' (問號)。 當您使用 SAS 金鑰時,您必須移除前置字元 '?'。 否則您的工作可能會受阻。

備註

資料庫範圍認證是一筆記錄,其中包含連線到SQL Server外部資源所需的驗證資訊。 大部分認證都包含 Windows 使用者和密碼。

在建立資料庫範圍認證之前,資料庫必須具有保護認證的主要金鑰。 如需詳細資訊,請參閱 CREATE MASTER KEY (Transact-SQL)

當 IDENTITY 是 Windows 使用者時,秘密可以是密碼。 秘密是利用服務主要金鑰來加密的。 如果重新產生服務主要金鑰,便會利用新的服務主要金鑰來重新加密秘密。

授與共享存取簽章的許可權 (SAS) 以搭配 PolyBase 外部資料表使用時,請同時選取 [容器 ] 和 [ 物件 ] 作為允許的資源類型。 如果未授與,當您嘗試存取外部資料表時,可能會收到錯誤 16535 或 16561。

資料庫範圍認證的相關資訊顯示在 sys.database_scoped_credentials 目錄檢視中。

下列是一些資料庫範圍認證的應用程式:

權限

需要資料庫上的 CONTROL 權限。

SQL Server 2022

從 SQL Server 2022 (16.x) 引進新的連接器類型,使用 REST API 呼叫取代 HADOOP。 對於 Azure Blob 儲存體 和 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. 建立共用存取簽章的資料庫範圍認證

下列範例會建立可用於建立外部資料來源的資料庫範圍認證,可進行 BULK INSERTOPENROWSET 等大量作業。 「共用存取簽章」不能在 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. 建立可讓 PolyBase 連線到 Azure Data Lake Store 的資料庫範圍認證

下列範例會建立可用來建立外部資料源的資料庫範圍認證,該認證可由 polyBase 在 Azure Synapse Analytics 中使用。

Azure Data Lake Store 將 Azure Active Directory 應用程式用於「服務對服務驗證」。 請先 建立 AAD 應用程式 並記錄您的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>'
;

詳細資訊