CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Azure Synapse AnalyticsAnalytics Platform System (PDW)

创建数据库凭据。 数据库凭据不会映射到服务器登录或数据库用户。 只要数据库在执行需要访问权限的操作,数据库就可使用凭据访问外部位置。

Transact-SQL 语法约定

语法

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)仅支持基本身份验证。

  • 若要将数据加载到 Azure Synapse Analytics,可以将任何有效的值用于 IDENTITY。
  • 在 Azure Synapse Analytics 无服务器 SQL 池中,数据库范围的凭据可以指定工作区托管标识、服务主体名称或共享访问签名(SAS)令牌。 通过 Microsoft Entra 直通身份验证启用的用户标识的访问还可以通过数据库范围的凭据进行访问,就像匿名访问公开可用的存储一样。 有关详细信息,请参阅支持的存储授权类型
  • 在 Azure Synapse Analytics 专用 SQL 池中,数据库范围的凭据可以指定共享访问签名(SAS)令牌、自定义应用程序标识、工作区托管标识或存储访问密钥。

SECRET = 'secret'

指定发送身份验证所需的机密内容。 需要 SECRET 才可从 Azure Blob 存储导入文件。 若要从 Azure Blob 存储加载到 Azure Synapse Analytics 或并行数据仓库,机密必须是 Azure 存储密钥。

警告

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. 为到 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>'
;