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 = “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中的文件中导入表。

  • 在 SQL Server 2022(16.x)及更高版本中,REST-API 连接器取代了 HADOOP。 对于 Azure Blob 存储和 Azure Data Lake Gen 2,唯一支持的身份验证方法是共享访问签名。 有关详细信息,请参阅 CREATE EXTERNAL DATA SOURCE

  • 在 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 托管实例、使用 Azure Arc 的 SQL Server 2025 要启用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 1 在 Azure Synapse 中,请参见 User sign-in with Microsoft Entra pass-through authentication
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 及更高版本

1 在 Microsoft Fabric 的 SQL 数据库中,如果你没有指定数据库范围的凭证,认证方法默认为“用户身份”,并使用 Microsoft Entra ID 用户账户作为上下文。

SECRET = “秘密

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

Warning

SAS 密钥值可能以问号 (?) 开头。 使用 SAS 密钥时,请删除前导 ?

Remarks

数据库范围凭据是一个记录,其中包含连接到 SQL Server 以外的资源所需的身份验证信息。 多数凭据包括一个 Windows 用户和一个密码。

若要保护数据库范围内凭据内的敏感信息,需要数据库主密钥(DMK)。 DMK 是一个对称密钥,用于加密数据库范围的凭据中的机密。 数据库必须先有DMK,才能创建任何数据库范围的凭据。 用强密码加密DMK。 Azure SQL Database 在创建数据库范围凭证或创建服务器审计时,创建带有强密码的随机选择 DMK。

用户无法在逻辑 master 数据库上创建 DMK。 DMK密码对Microsoft来说是未知的,创建后也无法被发现。 在创建数据库范围的凭据之前,先创建一个DMK。 有关详细信息,请参阅 CREATE MASTER KEY

IDENTITY 是Windows用户时,秘密可以是密码。 该秘密通过服务主密钥(SMK)进行加密。 如果你重新生成SMK,秘密会用新的SMK重新加密。

在授予共享访问签名(SAS)用于PolyBase外部表的权限时,请同时选择容器和对象作为允许的资源类型。 如果你不授予这些权限,尝试访问外部表时可能会收到错误16535或16561。

有关数据库范围的凭据信息,请参见 sys.database_scoped_credentials 目录视图。

以下是数据库范围凭据的一些应用:

Permissions

需要对数据库拥有 CONTROL 权限。

Examples

A. 为应用程序创建数据库范围的凭据

以下示例创建名为 AppCred 的数据库范围凭据。 数据库范围凭据包含 Windows 用户 Mary5 和一个密码。

如果还没有DMK,就创建一个。 不要使用空密码。 请使用强密码。

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';

创建数据库范围认证:

CREATE DATABASE SCOPED CREDENTIAL AppCred
WITH IDENTITY = 'Mary5',
     SECRET = '<password>';

B. 为共享访问签名创建数据库范围的凭据

以下示例创建了一个数据库范围的凭证,你可以用它来创建 外部数据源。 该凭证可以执行批量作,如 BULK INSERTOPENROWSET BULK

如果还没有DMK,就创建一个。 不要使用空密码。 请使用强密码。

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';

创建数据库范围的凭据。 将 <key> 替换为相应的值。

CREATE DATABASE SCOPED CREDENTIAL MyCredentials
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
     SECRET = '<key>';

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 和密钥。

如果还没有DMK,就创建一个。 不要使用空密码。 请使用强密码。

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';

创建数据库范围的凭据。 将 <key> 替换为相应的值。

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 的托管身份信息,请参见 “Azure Arc 启用的 SQL Server 管理身份”。

EXECUTE sp_configure 'allow server scoped db credentials', 1;
RECONFIGURE;
GO

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

E. 使用 Microsoft Entra ID 创建数据库范围的凭证

适用于Azure SQL 数据库,Microsoft Fabric 中的 SQL 数据库

Azure SQL 数据库 和 Microsoft Fabric 中的 SQL 数据库中,你可以使用自己的 Microsoft Entra ID 账户来认证外部数据源。

在 Microsoft Fabric 的 SQL 数据库中,如果你没有指定数据库范围的凭证,认证方法会默认并 USER IDENTITY 使用 Entra ID 用户账户作为上下文。

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