共用方式為


CREATE DATABASE SCOPED CREDENTIAL (TRANSACT-SQL)

適用於:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics分析平台系統(PDW)Microsoft Fabric 中的 SQL 資料庫

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

Transact-SQL 語法慣例

Syntax

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

Arguments

credential_name

指定要建立之資料庫範圍認證的名稱。 credential_name不能以數位 (#) 符號開頭。 系統認證開頭為 ##credential_name的最大長度為128個字元。

身分 = '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 實體中,如果使用作為 SECRETIDENTITY 的記憶體存取金鑰建立資料庫範圍認證,則會忽略 。
  • WITH IDENTITY 如果 Azure Blob 記憶體中的容器已啟用匿名存取,則不需要 。 如需使用 查詢 Azure Blob 記憶體 OPENROWSET BULK的範例,請參閱 從儲存在 Azure Blob 記憶體上的檔案匯入數據表
  • 在 SQL Server 2022 (16.x) 和更新版本中,REST-API 連接器會取代 HADOOP。 針對 Azure Blob 記憶體和 Azure Data Lake Gen 2,唯一支援的驗證方法是共用存取簽章。 如需詳細資訊,請參閱 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 集區中,資料庫範圍認證可以指定工作區受控識別、服務主體名稱或共用存取簽章 (SAS) 令牌。 透過使用者身分識別進行存取,Microsoft Entra 傳遞驗證啟用,也可以透過資料庫範圍認證進行存取,就像匿名存取可公開使用的記憶體一樣。 如需詳細資訊,請參閱支援的儲存體授權類型
    • 在 Azure Synapse Analytics 專用 SQL 集區中,資料庫範圍認證可以指定共用存取簽章 (SAS) 令牌、自定義應用程式識別、工作區受控識別或記憶體存取密鑰。
Authentication T-SQL Supported Notes
共用存取簽章 (SAS) CREATE DATABASE SCOPED CREDENTIAL <credential_name> WITH IDENTITY = 'SHARED ACCESS SIGNATURE', SECRET = 'secret'; SQL Server 2022 和更新版本、Azure SQL 受控執行個體、Azure Synapse Analytics、Azure SQL 資料庫
受控識別 CREATE DATABASE SCOPED CREDENTIAL <credential_name> WITH IDENTITY = 'MANAGED IDENTITY'; Azure SQL 資料庫、Azure SQL 受控執行個體、SQL Server 2025 搭配 Azure Arc 要啟用 Azure Arc,請參見 由 Azure Arc 啟用的 SQL Server 管理身份
透過使用者身分識別Microsoft Entra 傳遞驗證 CREATE DATABASE SCOPED CREDENTIAL <credential_name> WITH IDENTITY = 'USER IDENTITY'; Azure SQL Database, SQL database in Microsoft Fabric * 在 Azure Synapse 中,請參閱 Microsoft Entra Connect:傳遞驗證
S3 存取金鑰基本身份驗證 CREATE DATABASE SCOPED CREDENTIAL <credential_name> WITH IDENTITY = 'S3 ACCESS KEY', SECRET = '<accesskey>:<secretkey>'; SQL Server 2022 及更新版本
ODBC 資料來源或 Kerberos (MIT KDC) CREATE DATABASE SCOPED CREDENTIAL <credential_name> WITH IDENTITY = '<identity_name>', SECRET = '<secret>'; SQL Server 2019 與更新版本

* 在 Microsoft Fabric 的 SQL 資料庫中,若未指定資料庫範圍的憑證,認證方法預設為「USER IDENTITY」,並以 Entra ID 使用者登入作為上下文。

SECRET = '秘密'

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

Warning

SAS 索引鍵值可能以問號 ()? 開頭。 當您使用 SAS 鍵時,請移除前導 ?

Remarks

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

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

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

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

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

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

Permissions

需要資料庫上的 CONTROL 權限。

Examples

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 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. 建立 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>';

D. 使用受控識別建立資料庫範圍認證

適用於: SQL Server 2025 (17.x)

SQL Server 2025 (17.x) 新增對 Microsoft Entra 管理身份的支援。 如需如何搭配 Azure Arc 所啟用的 SQL Server 使用受控識別的資訊,請參閱 受控識別

SP_CONFIGURE 'allow server scoped db credentials',1; 
RECONFIGURE;  

CREATE DATABASE SCOPED CREDENTIAL [managed_id] 
WITH IDENTITY = 'Managed Identity'; 

#. 使用 Microsoft Entra ID 建立資料庫範圍驗證憑證

適用於:Azure SQL Database, Microsoft Fabric 中的 SQL database

Azure SQL 資料庫 及 Microsoft Fabric 的 SQL 資料庫中,可以使用您自己的 Entra ID 登入來驗證外部資料來源。

在 Microsoft Fabric 的 SQL 資料庫中,若未指定資料庫範圍的憑證,認證方法會預設並 USER IDENTITY 使用 Entra ID 使用者登入作為上下文。

CREATE DATABASE SCOPED CREDENTIAL MyCredential
WITH IDENTITY = 'User Identity';