CREATE DATABASE SCOPED CREDENTIAL (TRANSACT-SQL)

適用於:SQL ServerAzure SQL DatabaseAzure 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 (12.x) 和舊版的 Transact-SQL 語法,請參閱 舊版檔

引數

credential_name

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

IDENTITY ='identity_name'

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

  • 若要使用共用金鑰從 Azure Blob 儲存體或 Azure Data Lake Storage 匯入檔案,身分識別名稱必須為 SHARED ACCESS SIGNATURE。 如需共用存取簽章的詳細資訊,請參閱使用共用存取簽章 (SAS)。 針對共用存取簽章只能使用 IDENTITY = SHARED ACCESS SIGNATURE
  • 若要使用受控識別從 Azure Blob 儲存體匯入檔案,身分識別名稱必須為 MANAGED IDENTITY
  • 使用 Kerberos (Windows Active Directory 或 MIT KDC) 時,IDENTITY 引數中請不要使用網域名稱。 它應只是帳戶名稱。
  • 在 SQL Server 執行個體中,如果使用作為 SECRET 的儲存體存取金鑰建立資料庫範圍認證,則會忽略 IDENTITY。
  • 如果 Azure Blob 儲存體中的容器已針對匿名存取啟用,則不需要 WITH IDENTITY。 如需查詢 Azure Blob 儲存體的範例,請參閱從儲存在 Azure Blob 儲存體上的檔案匯入資料表

重要

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

  • 您可將任何有效值用於 IDENTITY,以將資料載入 Azure Synapse Analytics。
  • 在 Azure Synapse Analytics 無伺服器 SQL 集區中,資料庫範圍認證可以指定工作區受控識別、服務主體名稱或共用存取簽章 (SAS) 令牌。 透過 Microsoft Entra 傳遞驗證啟用的使用者身分識別存取,也可以透過資料庫範圍認證進行存取,就像匿名存取公開可用的記憶體一樣。 如需詳細資訊,請參閱支援的儲存體授權類型
  • 在 Azure Synapse Analytics 專用 SQL 集區中,資料庫範圍認證可以指定共用存取簽章 (SAS) 令牌、自定義應用程式識別、工作區受控識別或記憶體存取密鑰。

SECRET ='secret'

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

警告

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

備註

資料庫範圍認證是包含驗證資訊的資料列,該資訊是連線到 SQL Server 外部資源時所需的資訊。 大部分認證都包含 Windows 使用者和密碼。

若要保護資料庫範圍認證內的敏感性資訊,需要資料庫主要密鑰 (DMK)。 DMK 是對稱金鑰,可加密資料庫範圍認證中的秘密。 資料庫必須具有主要金鑰,才能建立任何資料庫範圍認證。 DMK 應使用強密碼加密。 Azure SQL 資料庫 會建立具有強式隨機選取密碼的資料庫主要密鑰,作為建立資料庫範圍認證的一部分,或建立伺服器稽核的一部分。 用戶無法在邏輯 master 資料庫上建立主要密鑰。 Microsoft 無法辨識主要密鑰密碼,且在建立之後無法探索。 基於這個理由,建議您先建立資料庫主要密鑰,再建立資料庫範圍認證。 如需詳細資訊,請參閱 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 的資料庫範圍認證

下列範例會建立可以用於建立外部資料來源 (可在 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>'
;