授予对 Azure SQL 托管实例 的数据库访问权限

适用于:Azure SQL 托管实例

在本文中,你将了解:

  • SQL 托管实例的配置选项,使用户能够执行管理任务并访问存储在这些数据库中的数据。
  • 创建新服务器后的访问权限和授权配置。
  • 如何在 master 数据库中添加登录名和用户帐户,然后向这些帐户授予管理权限。
  • 如何在用户数据库中添加用户帐户(与登录名关联或作为包含的用户帐户)。
  • 如何使用数据库角色和显式权限在用户数据库中配置具有权限的用户帐户。
  • 有关 Azure SQL 数据库,请参阅授权对 SQL 数据库的访问
  • 有关Azure Synapse Analytics,请参阅授权数据库访问Azure Synapse Analytics

注释

Microsoft Entra ID 旧称 Azure Active Directory (Azure AD)。

身份验证和授权

身份验证是证明用户所声明身份的过程。 某个用户使用用户帐户连接到数据库。

当用户尝试连接到数据库时,需要提供用户帐户和身份验证信息。 将使用以下两种身份验证方法之一对用户进行身份验证:

登录名和用户:可以将数据库中的用户帐户与数据库存储的登录名 master 相关联,也可以使其成为单个数据库存储的用户名。

  • 登录名master数据库中的一个帐户,你可以将一个或多个数据库中的用户帐户链接到该登录名。 通过使用登录,可以存储与该登录关联的用户帐户凭据信息。
  • 用户帐户是任何数据库中的一个个人帐户,可以关联到登录,但不一定必须关联。 使用未链接到登录名的用户帐户时,凭据信息将与该用户帐户一起存储。

授权通过数据库角色和显式权限来管理对数据的访问以及各种操作的执行。 授权是指分配给用户的权限,并确定允许用户执行的操作。 用户账户的数据库 角色成员资格对象级权限 决定授权。 最佳做法是向用户授予所需的最低权限。

创建新数据库后的现有登录名和用户帐户

首次部署Azure SQL资源时,请为特殊类型的管理登录名指定登录名和密码,即 Server admin。在部署期间,master 和用户数据库中的登录名和用户配置如下:

重要

不要在服务器管理员登录名字段中包括任何个人、敏感或机密信息。 在此字段中输入的数据不被视为 客户数据

  • 部署过程使用指定的登录名创建具有管理权限的 SQL 身份验证登录名。 登录名是用于登录Azure SQL 托管实例的个人帐户。
  • 部署过程会将此身份验证登录名授予所有数据库作为 服务器级主体的完整管理权限。 身份验证登录名具有所有可用权限,不能限制。 在SQL 托管实例中,部署过程将此身份验证登录名添加到 sysadmin 固定服务器角色
  • 当此帐户登录到数据库时,它与每个用户数据库中存在的特殊用户帐户 dbo用户帐户)匹配。 dbo 用户拥有数据库中的所有数据库权限,并且是 db_owner 固定数据库角色的成员。 本文稍后将讨论其他固定数据库角色。

若要标识 服务器管理员 帐户,请执行以下操作:

  1. 转到 Azure SQL hub
  2. 在资源菜单中,转到 SQL 托管实例。
  3. “设置”下,选择 “属性” 页。
  4. 查看 服务器管理员登录 的值或 Microsoft Entra 管理员 的值。

重要

创建 服务器管理员 帐户后,无法更改该帐户的名称。 若要重置密码,请转到Azure门户,选择 SQL 托管实例,然后选择“重置密码”。 也可以使用 PowerShell 或 Azure CLI。

创建拥有管理权限的其他登录名和用户

目前,你的 SQL 托管实例仅配置了一个 SQL 身份验证登录名和用户帐户。 若要创建具有完整或部分管理权限的其他登录名,请使用以下选项:

  • 创建具有完全管理权限的 Microsoft Entra 管理员帐户

    启用Microsoft Entra身份验证并添加Microsoft Entra管理员。可以将一个Microsoft Entra帐户配置为具有完全管理权限的Azure SQL部署管理员。 此帐户可以是个人帐户或安全组帐户。 如果要使用Microsoft Entra帐户连接到Azure SQL 托管实例,则必须配置Microsoft Entra管理员。 有关为所有 Azure SQL 部署类型启用 Microsoft Entra 身份验证的详细信息,请参阅以下文章:

  • 在SQL 托管实例中,创建具有完全管理权限的 SQL 身份验证登录名

    注释

    这些dbmanagerloginmanager角色与Azure SQL 托管实例部署无关。

为非管理员用户创建帐户

使用以下方法之一为非管理员用户创建帐户:

  • 创建登录名

    master 数据库中创建 SQL 身份验证登录名。 然后在用户需要访问的每个数据库中创建一个用户帐户,并将该用户帐户与登录名相关联。 当用户需要访问多个数据库并且想要保持密码同步时,请使用此方法。 但是,此方法在异地复制中使用时非常复杂,因为必须在主服务器和辅助服务器上创建登录名。

  • 创建用户帐户

    在数据库中创建一个用户帐户,用户需要访问该帐户。

    支持 Microsoft Entra 服务器主体的 SQL 托管实例允许创建用户帐户,不需要将数据库用户创建为包含的数据库用户,即可对 SQL 托管实例进行身份验证。

    通过使用此方法,用户身份验证信息存储在每个数据库中,并自动复制到异地复制的数据库。 但是,如果多个数据库中存在同一帐户并且正在使用 SQL 身份验证,则必须手动同步密码。 此外,如果用户在不同的数据库中具有密码不同的帐户,则可能会很难记住这些密码。

重要

若要创建映射到SQL 托管实例中Microsoft Entra标识的包含用户,请使用具有sysadmin权限的 SQL 身份验证登录名来创建Microsoft Entra身份验证登录名或用户。

有关如何创建登录名和用户的示例,请参阅:

使用固定数据库角色和自定义数据库角色

在数据库中创建用户帐户后,可以授权该用户基于登录名或以包含的用户身份执行各种操作及访问特定数据库中的数据。 使用以下方法来授权访问:

  • 固定数据库角色

    将用户帐户添加到固定数据库角色。 有 9 个固定数据库角色,每个角色都有一组定义的权限。 最常用的固定数据库角色为:db_owner、db_ddladmin、db_datawriter、db_datareader、db_denydatawriter 和 db_denydatareader。 使用 db_owner 仅向少数用户授予完全权限。 其他固定数据库角色可用于快速获取开发中的简单数据库,但不建议用于大多数生产数据库。 例如,db_datareader 固定数据库角色授予用户对数据库中每个表的读取访问权限,这超出了必要的范畴。

  • 自定义数据库角色

    使用 CREATE ROLE 语句创建自定义数据库角色。 使用自定义角色可以创建自己的用户定义数据库角色,并根据业务需求慎重地向每个角色授予所需的最低权限。 然后将用户添加到自定义角色。 如果用户是多个角色的成员,则会聚合所有这些角色的权限。

  • 直接授予权限

    直接为用户帐户授予权限。 可以单独授予或拒绝 100 多个权限。 这些权限中,许多都是嵌套式的。 例如,针对架构的 UPDATE 权限包括针对该架构中每个表的 UPDATE 权限。 大多数权限系统中,拒绝权限会优先于授予权限。 考虑到权限的嵌套性质和数目,可能需要进行仔细的研究才能设计出适当的权限系统,以便对数据库进行恰当的保护。 从权限(数据库引擎)中的权限列表开始,并查看这些权限的海报尺寸图示

使用组

高效的访问管理将权限分配给Microsoft Entra安全组和固定角色或自定义角色,而不是分配给单个用户。

  • 使用 Microsoft Entra 身份验证时,将 Microsoft Entra 用户放入 Microsoft Entra 安全组。 为该组创建受限的数据库用户。 将一个或多个数据库用户作为成员添加到具有相应用户组的特定权限的自定义或内置数据库角色。

  • 使用 SQL 身份验证时,请在数据库中创建包含的数据库用户。 将一个或多个数据库用户分配到一个自定义数据库角色,该角色具有适合该用户组的特定权限。

    注释

    还可以将组用于非容器数据库用户。

熟悉可用于限制或提升权限的以下功能:

后续步骤