CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL)
适用于:SQL Server Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics Analytics Platform System (PDW)
创建数据库凭据。 数据库凭据不会映射到服务器登录或数据库用户。 只要数据库在执行需要访问权限的操作,数据库就可使用凭据访问外部位置。
语法
CREATE DATABASE SCOPED CREDENTIAL credential_name
WITH IDENTITY = 'identity_name'
[ , SECRET = 'secret' ]
[ ; ]
参数
credential_name
指定创建的数据库范围凭据的名称。 credential_name 不能以数字 (#
) 符号开头。 系统凭据从 ##
. credential_name的最大长度为 128 个字符。
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。 应使用强密码加密 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 目录视图中查看有关数据库范围凭据的信息。
以下是数据库范围凭据的一些应用:
SQL Server 使用数据库范围的凭据访问非公共 Azure Blob 存储或受 Kerberos 保护的使用 PolyBase 的 Hadoop 群集。 有关详细信息,请参阅 CREATE EXTERNAL DATA SOURCE (Transact-SQL)。
Azure Synapse Analytics 使用数据库范围的凭据访问使用 PolyBase 的非公共 Azure Blob 存储。 有关详细信息,请参阅 CREATE EXTERNAL DATA SOURCE (Transact-SQL)。 有关 Azure Synapse 存储身份验证的详细信息,请参阅将外部表与 Synapse SQL 配合使用。
SQL 数据库为其弹性查询功能使用数据库范围的凭据。 这是跨多个数据库分片查询的能力。
SQL 数据库使用数据库范围的凭据将扩展的事件文件写入 Azure Blob 存储。
SQL 数据库 将数据库范围凭据用于弹性池。 有关详细信息,请参阅使用弹性数据库控制爆炸式增长
BULK INSERT 和 OPENROWSET 使用数据库范围的凭据访问 Azure Blob 存储中的数据。 有关详细信息,请参阅批量访问 Azure Blob 存储中数据的示例。
将数据库范围的凭据与 PolyBase 配合使用,并Azure SQL 托管实例数据虚拟化功能。
对于 BACKUP TO URL 和 RESTORE FROM URL,请改为通过 CREATE CREDENTIAL(Transact-SQL) 使用服务器级凭据。
权限
需要针对数据库的 CONTROL 权限。
SQL Server 2022
从 SQL Server 2022 (16.x) 开始,引入了一种新型连接器,使用 REST-API 调用替换 HADOOP。 对于 Azure Blob 存储和 Azure Data Lake Gen 2,唯一受支持的身份验证方法是 SHARED ACCESS SIGNATURE
。
有关详细信息,请参阅 CREATE EXTERNAL DATA SOURCE。
示例
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 和 OPENROWSET)的外部数据源。
-- 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>'
;