向数据库授予对 Azure SQL 数据库、SQL 托管实例和 Azure Synapse Analytics 的访问权限

适用于:Azure SQL 数据库Azure SQL 托管实例Azure Synapse Analytics

本文介绍:

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

重要

本文其余部分将 Azure SQL 数据库、Azure SQL 托管实例和 Azure Synapse 中的数据库统称为数据库,并且服务器指的是为 Azure SQL 数据库和 Azure Synapse 管理数据库的逻辑服务器

注意

Microsoft Entra ID 是 Azure Active Directory (Azure AD) 的新名称。 目前我们正在更新文档。

身份验证和授权

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

登录名和用户:数据库中的用户帐户可以与存储在 master 数据库中的登录名关联,也可以是存储在个人数据库中的用户名。

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

访问数据和执行各种操作所需的授权是使用数据库角色和显式权限进行管理的。 授权是指为用户分配权限,它决定了该用户可以执行哪些操作。 授权是由用户帐户的数据库角色成员身份对象级权限控制。 作为最佳实践,应向用户授予所需的最低权限。

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

首次部署 Azure SQL 时,你可以为特殊类型的管理登录(服务器管理员)指定登录名和密码。在部署期间,将在 master 数据库和用户数据库中进行以下登录名和用户配置:

  • 使用指定的登录名创建拥有管理特权的 SQL 登录名。 登录名是用于登录到 SQL 数据库、SQL 托管实例和 Azure Synapse 的单个帐户。
  • 此登录名对所有数据库拥有完全管理权限,充当服务器级主体。 此登录名具有所有可用权限,且不受限制。 在 SQL 托管实例中,会将此登录名添加到 sysadmin 固定服务器角色(Azure SQL 数据库中不存在此角色)。
  • 当此帐户登录到数据库时,它们将与每个用户数据库中存在的特殊用户帐户 dbo用户帐户)匹配。 dbo 用户拥有数据库中的所有数据库权限,并且是 db_owner 固定数据库角色的成员。 本文稍后将讨论其他固定数据库角色。

若要确定逻辑服务器的服务器管理员帐户,请打开 Azure 门户,然后浏览到服务器或托管实例的属性选项卡。

Screenshot shows the SQL Server Properties page where you can obtain the Server admin login and Microsoft Entra admin values.

Screenshot shows the SQL managed instance Properties page where you can obtain the login and Microsoft Entra admin values.

重要

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

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

此时,只是配置了使用单个 SQL 登录名和用户帐户来访问服务器或托管实例。 若要创建其他拥有完全管理权限或部分管理权限的登录名,可使用以下选项(取决于部署模式):

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

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

  • 在 SQL 托管实例中,创建拥有完全管理权限的 SQL 登录名

    注意

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

  • 在 SQL 数据库中,创建具有有限管理权限的 SQL 登录名

    • master 数据库中再创建一个 SQL 登录名。
    • 使用 ALTER SERVER ROLE 语句将登录名添加到 ##MS_DatabaseManager####MS_LoginManager####MS_DatabaseConnector##服务器级别角色

    Azure SQL 数据库的特殊 master 数据库角色的成员有权创建和管理数据库或登录名。 在属于 dbmanager 角色的成员的用户创建的数据库中,该成员将映射到 db_owner 固定数据库角色,并可以使用 dbo 用户帐户登录到该数据库以及对其进行管理。 这些角色在 master 数据库之外没有显式权限。

    重要

    无法在 Azure SQL 数据库中创建拥有完全管理权限的其他 SQL 登录名。 只有服务器管理员帐户或 Microsoft Entra 管理员帐户(可以是 Microsoft Entra 组)才能向服务器角色添加或删除其他登录名。 此内容特定于 Azure SQL 数据库。

  • 在 Azure Synapse 专用 SQL 池中,创建具有有限管理权限的 SQL 登录名

    • master 数据库中再创建一个 SQL 登录名。
    • master 数据库中创建与此新登录名关联的用户帐户。
    • 使用 sp_addrolemember 语句将用户帐户添加到 master 数据库中的 dbmanager 和/或 loginmanager 角色。
  • 在 Azure Synapse 无服务器 SQL 池中,创建具有有限管理权限的 SQL 登录名

为非管理员用户创建帐户

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

  • 创建登录名

    master 数据库中创建 SQL 登录名。 然后在用户需要访问的每个数据库中创建一个用户帐户,并将该用户帐户关联到该登录名。 如果用户必须访问多个数据库,而你希望密码保持同步,则此方法是首选方法。 但是,在与异地复制结合使用时,此方法会很复杂,因为必须同时在主服务器和辅助服务器上创建登录名。 有关详细信息,请参阅针对异地还原或故障转移配置和管理 Azure SQL 数据库的安全性

  • 创建用户帐户

    在用户需要访问的数据库中创建用户帐户(也称为包含的用户)。

    • 对于 SQL 数据库,始终可以创建这种类型的用户帐户。
    • 对于支持 Microsoft Entra 服务器主体的 SQL 托管实例,可以创建用户帐户来对 SQL 托管实例进行身份验证,而无需创建用作包含的数据库用户的数据库用户。

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

重要

若要创建映射到 Microsoft Entra 标识的包含的用户,必须使用 Azure SQL 数据库中数据库的 Microsoft Entra 帐户登录。 在 SQL 托管实例中,拥有 sysadmin 权限的 SQL 登录也可以创建 Microsoft Entra 登录名或用户。

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

提示

如需查看安全教程,包括如何在 Azure SQL 数据库中创建用户,请参阅教程:保护 Azure SQL 数据库

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

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

  • 固定数据库角色

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

  • 自定义数据库角色

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

  • 直接授予权限

    直接为用户帐户授予权限。 可以在 SQL 数据库中单独授予或拒绝 100 多种权限。 这些权限中,许多都是嵌套式的。 例如,针对架构的 UPDATE 权限包括针对该架构中每个表的 UPDATE 权限。 与大多数权限系统中的情况一样,拒绝某个权限将覆盖对该权限的授予操作。 考虑到权限的嵌套性质和数目,可能需要进行仔细的研究才能设计出适当的权限系统,以便对数据库进行恰当的保护。 一开始可以了解权限(数据库引擎)中的权限列表,然后查看这些权限的海报大小的图

使用组

有效的访问管理使用分配给 Active Directory 安全组以及固定角色或自定义角色的权限,而不使用分配给个人用户的权限。

  • 使用 Microsoft Entra 身份验证时,将 Microsoft Entra 用户放入 Microsoft Entra 安全组。 为该组创建包含数据库用户。 将一个或多个数据库用户添加为自定义或内置数据库角色的成员,这些角色具有对于该组用户而言合适的特定权限。

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

    注意

    也可以对非包含数据库用户使用组。

应该自行熟悉一下下述能够用于限制或提升权限的功能:

后续步骤

有关所有 Azure SQL 数据库和 SQL 托管实例安全功能的概述,请参阅安全概述