通过


你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

教程:使用Microsoft Entra登录名进行保护 - Azure SQL 托管实例

applies to:Azure SQL 托管实例

在本文中,了解如何使用由 Microsoft Entra ID(formerly Azure Active Directory) 提供支持的服务器主体(登录名)来保护 Azure SQL 托管实例

本教程介绍如何执行下列操作:

  • 为 SQL 托管实例创建Microsoft Entra登录名。
  • 授予对 SQL 托管实例中的登录名的权限。
  • 通过登录创建Microsoft Entra用户。
  • 向用户分配权限并管理数据库安全性。
  • 使用身份模拟来对用户操作。
  • 对用户使用跨数据库查询。
  • 了解安全功能,例如威胁防护、审核、数据掩码和加密。

注意

Microsoft Entra ID以前称为Azure Active Directory(Azure AD)。

先决条件

若要完成本教程,请确保具备以下先决条件:

限制访问

可以通过专用 IP 地址访问 SQL 托管实例。 与隔离SQL Server环境类似,应用程序或用户需要访问SQL 托管实例网络(VNet),然后才能建立连接。 有关详细信息,请参阅 将应用程序连接到 SQL 托管实例

还可以在 SQL 托管实例上配置服务终结点,该终结点允许以与Azure SQL 数据库相同的方式进行公共连接。 有关详细信息,请参阅在 Azure SQL 托管实例中配置公共终结点

使用 SSMS 创建Microsoft Entra登录名

SQL 管理员可以创建第一个Microsoft Entra登录名,也可以创建预配期间创建的Microsoft Entra管理员。 有关详细信息,请参阅 为 SQL 托管实例配置 Microsoft Entra 管理员

有关连接到SQL 托管实例的示例,请参阅以下文章:

  1. 使用 sysadmin SQL 登录名或 Microsoft Entra 管理员,通过 SQL Server Management Studio(SSMS) 连接到 SQL 托管实例。

  2. 对象资源管理器 中,右键单击服务器并选择 New Query

  3. 在查询窗口中,使用以下语法为本地Microsoft Entra帐户创建登录名:

    USE master
    GO
    CREATE LOGIN login_name FROM EXTERNAL PROVIDER
    GO
    

    此示例为帐户 nativeuser@aadsqlmi.onmicrosoft.com 创建登录名。

    USE master
    GO
    CREATE LOGIN [nativeuser@aadsqlmi.onmicrosoft.com] FROM EXTERNAL PROVIDER
    GO
    
  4. 在工具栏上,选择“Execute”以创建登录。

  5. 通过执行以下 T-SQL 命令来检查新添加的登录名:

    SELECT *
    FROM sys.server_principals;
    GO
    

    SSMS 的对象资源管理器中“结果”选项卡的截图,显示了新添加的登录名的名称、principal_id、sid、类型和type_desc。

有关详细信息,请参阅 CREATE LOGIN

授予用于创建登录名的权限

现有登录名必须具有适当的权限,或者是相应服务器角色的一部分才能创建其他Microsoft Entra登录名。

SQL 身份验证登录名

如果登录是基于 SQL 身份验证的服务器主体,则必须为其分配 sysadmin 角色才能为 Microsoft Entra 帐户创建新的登录。

Microsoft Entra身份验证登录名

  • 如果登录是 Microsoft Entra 服务器主体,则必须为其分配 sysadmin 服务器角色或 securityadmin 服务器角色,以便为其他 Microsoft Entra 用户、组和应用程序创建登录。
  • 至少必须授予 ALTER ANY LOGIN 权限才能创建其他Microsoft Entra登录名。
  • 默认情况下,master 中新创建的Microsoft Entra登录名的标准权限为 CONNECT SQLVIEW ANY DATABASE
  • sysadmin 服务器角色可以授予 SQL 托管实例中的许多 Microsoft Entra 登录名。

若要将登录名添加到 sysadmin 服务器角色,请执行以下操作:

  1. 再次登录 SQL 托管实例,或使用现有连接,通过拥有 sysadmin 权限的 Microsoft Entra 管理员或 SQL 主体进行登录。

  2. 对象资源管理器 中,右键单击服务器并选择 New Query

  3. 使用以下 T-SQL 语法将 Microsoft Entra 登录授予 sysadmin 服务器角色:

    ALTER SERVER ROLE sysadmin ADD MEMBER login_name
    GO
    

    以下示例将 sysadmin 服务器角色授予登录名 nativeuser@aadsqlmi.onmicrosoft.com

    ALTER SERVER ROLE sysadmin ADD MEMBER [nativeuser@aadsqlmi.onmicrosoft.com]
    GO
    

使用 SSMS 创建其他Microsoft Entra登录名

创建 Microsoft Entra 登录名并授予 sysadmin 权限后,该登录名可以使用 FROM EXTERNAL PROVIDERCREATE LOGIN 子句创建其他登录名。

  1. 通过在 SQL Server Management Studio (SSMS) 中选择 Connect 连接到 Server,使用 Microsoft Entra 登录名连接到 SQL 托管实例。

    1. 服务器名称 中输入 SQL 托管实例的主机名。
    2. 对于 Authentication,请选择 Microsoft Entra MFA以显示多重身份验证登录窗口。 登录。 有关详细信息,请参阅通用身份验证(SSMS 支持多重身份验证)
  2. 对象资源管理器 中,右键单击服务器并选择 New Query

  3. 在查询窗口中,使用以下语法为另一个Microsoft Entra帐户创建登录名:

    USE master
    GO
    CREATE LOGIN login_name FROM EXTERNAL PROVIDER
    GO
    

    此示例为 Microsoft Entra 用户 bob@aadsqlmi.net 创建登录,其域 aadsqlmi.net 与 Microsoft Entra aadsqlmi.onmicrosoft.com联合

    执行以下 T-SQL 命令。 Microsoft Entra联合帐户是用于替代本地Windows登录名和用户的SQL托管实例。

    USE master
    GO
    CREATE LOGIN [bob@aadsqlmi.net] FROM EXTERNAL PROVIDER
    GO
    
  4. 使用 CREATE DATABASE 语法在 SQL 托管实例中创建数据库。 在下一部分,此数据库将用于测试用户登录名。

    1. 对象资源管理器 中,右键单击服务器并选择 New Query

    2. 在查询窗口中,使用以下语法创建名为 MyMITestDB 的数据库。

      CREATE DATABASE MyMITestDB;
      GO
      
  5. 为Microsoft Entra ID中的组创建SQL 托管实例登录名。 在将登录名添加到SQL 托管实例之前,组需要存在于Microsoft Entra ID中。 请参阅 使用 Microsoft Entra ID 创建基本组并添加成员。 创建组 mygroup,并将成员添加到此组。

  6. 在SQL Server Management Studio中打开新的查询窗口。

    此示例假定Microsoft Entra ID中存在名为 mygroup 的组。 执行以下命令:

    USE master
    GO
    CREATE LOGIN [mygroup] FROM EXTERNAL PROVIDER
    GO
    
  7. 作为测试,使用新创建的登录名或组登录到 SQL 托管实例。 打开与 SQL 托管实例的新连接,并在进行身份验证时使用新登录名。

  8. 对象资源管理器 中,右键单击服务器并选择新连接的 New Query

  9. 通过执行以下命令检查新创建的Microsoft Entra登录的服务器权限:

    SELECT * FROM sys.fn_my_permissions (NULL, 'DATABASE')
    GO
    

Azure SQL对Microsoft Entra主体作为用户和登录的支持也扩展到Microsoft Entra 外部 ID的内部和外部来宾用户。 来宾用户,无论是单独还是作为组的一部分,都可以与Azure SQL中的任何其他Microsoft Entra用户相同。 如果希望来宾用户能够创建其他Microsoft Entra服务器登录名或数据库用户,他们必须有权读取Microsoft Entra目录中的其他标识。 此权限在目录级别配置。 有关详细信息,请参阅 Microsoft Entra ID 中的访客访问权限

从Microsoft Entra登录名创建Microsoft Entra用户

在 SQL 托管实例 中,对单个数据库的授权与 SQL Server 中的数据库类似。 可以从数据库中已存在的登录名创建用户,该登录名已被授予该数据库的权限或已被添加到数据库角色。

创建名为 MyMITestDB 的数据库和仅具有默认权限的登录名后,下一步是从该登录名创建用户。 目前,登录可以连接到 SQL 托管实例并查看所有数据库,但无法操作数据库。 如果使用具有默认权限的 Microsoft Entra 帐户登录并尝试展开新创建的数据库,将看到以下错误:

 从SSMS 对象资源管理器的一个错误消息的截图,该消息显示“数据库 MyMITestDB 不可访问。(ObjectExplorer)”。

有关授予数据库权限的详细信息,请参阅 Getting Started with 数据库引擎 Permissions

创建Microsoft Entra用户并创建示例表

注意

当用户作为Microsoft Entra组的一部分登录时,存在一些限制。 例如,调用 SUSER_SID 将返回 NULL,因为给定Microsoft Entra用户不属于 sys.server_principals 表。 因此,在这种情况下,对某些存储过程或已授予权限列表的访问可能会受到限制。

  1. 使用 SQL Server Management Studio 中的 sysadmin 帐户登录到 SQL 托管实例。

  2. 对象资源管理器 中,右键单击服务器并选择 New Query

  3. 在查询窗口中,使用以下语法从Microsoft Entra登录名创建用户:

    USE <Database Name> -- provide your database name
    GO
    CREATE USER user_name FROM LOGIN login_name
    GO
    

    以下示例基于登录名 bob@aadsqlmi.net 创建用户 bob@aadsqlmi.net

    USE MyMITestDB
    GO
    CREATE USER [bob@aadsqlmi.net] FROM LOGIN [bob@aadsqlmi.net]
    GO
    
  4. 还支持通过属于某个组的Microsoft Entra登录名创建Microsoft Entra用户。

    以下示例为存在于 Microsoft Entra 租户中的 Microsoft Entra 组 mygroup 创建登录:

    USE MyMITestDB
    GO
    CREATE USER [mygroup] FROM LOGIN [mygroup]
    GO
    

    属于 mygroup 的所有用户都可以访问 MyMITestDB 数据库。

    重要

    从Microsoft Entra登录创建USER时,请将user_name指定为与LOGIN相同的登录名。

    有关详细信息,请参阅 CREATE USER

  5. 在新查询窗口中,使用以下 T-SQL 命令创建测试表:

    USE MyMITestDB
    GO
    CREATE TABLE TestTable
    (
    AccountNum varchar(10),
    City varchar(255),
    Name varchar(255),
    State varchar(2)
    );
    
  6. 在 SSMS 中使用创建的用户创建连接。 你会注意到,你看不到之前由 sysadmin 创建的表 TestTable。 我们需要向该用户提供读取数据库中的数据的权限。

  7. 可以执行以下命令来检查用户当前拥有的权限:

    SELECT * FROM sys.fn_my_permissions('MyMITestDB','DATABASE')
    GO
    

在数据库级角色中添加用户

要使用户能够查看数据库中的数据,我们可以向该用户提供数据库级角色

  1. 使用 SQL Server Management Studio 通过 sysadmin 帐户登录 SQL 托管实例。

  2. 对象资源管理器 中,右键单击服务器并选择 New Query

  3. 使用以下 T-SQL 语法向用户授予 Microsoft Entra db_datareader 数据库角色:

    Use <Database Name> -- provide your database name
    ALTER ROLE db_datareader ADD MEMBER user_name
    GO
    

    以下示例为用户 bob@aadsqlmi.net 和组 mygroup 提供了 db_datareader 权限,到MyMITestDB数据库:

    USE MyMITestDB
    GO
    ALTER ROLE db_datareader ADD MEMBER [bob@aadsqlmi.net]
    GO
    ALTER ROLE db_datareader ADD MEMBER [mygroup]
    GO
    
  4. 通过执行以下命令检查数据库中创建的Microsoft Entra用户是否存在:

    SELECT * FROM sys.database_principals
    GO
    
  5. 使用已被添加到 db_datareader 角色的用户,创建与 SQL 托管实例的新连接。

  6. 对象资源管理器 中展开数据库以查看表。

    SSMS 中 对象资源管理器 的屏幕截图,显示了 MyMITestDB 中表的文件夹结构,其中 dbo.TestTable 文件夹被高亮显示。

  7. 打开新的查询窗口并执行以下 SELECT 语句:

    SELECT *
    FROM TestTable
    

    是否能够看到表中的数据? 您应该会看到返回的列,如以下屏幕截图所示:

     SSMS 对象资源管理器 中“结果”选项卡的截图,显示了表格列标题 AccountNum、City、Name 和 State。

伪装Microsoft Entra登录

SQL 托管实例支持模拟Microsoft Entra登录名。

测试身份模拟

  1. 使用 sysadmin 帐户通过 SQL Server Management Studio 登录到 SQL 托管实例。

  2. 对象资源管理器 中,右键单击服务器并选择 New Query

  3. 在查询窗口中,使用以下命令创建新的存储过程:

    USE MyMITestDB
    GO
    CREATE PROCEDURE dbo.usp_Demo
    WITH EXECUTE AS 'bob@aadsqlmi.net'
    AS
    SELECT user_name();
    GO
    
  4. 使用以下命令来查看执行该存储过程时模拟的用户是否为 bob@aadsqlmi.net

    Exec dbo.usp_Demo
    
  5. EXECUTE AS LOGIN 语句进行模拟测试:

    EXECUTE AS LOGIN = 'bob@aadsqlmi.net'
    GO
    SELECT SUSER_SNAME()
    REVERT
    GO
    

注意

只有属于 sysadmin 角色的 SQL Server 级登录才能执行以下针对Microsoft Entra主体的操作:

  • EXECUTE AS USER
  • EXECUTE AS LOGIN

使用跨数据库查询

Microsoft Entra具有Microsoft Entra登录名的帐户支持跨数据库查询。 为了测试 Microsoft Entra 组的跨数据库查询,我们需要创建另一个数据库和表。 如果已存在一个数据库和表,则无需额外创建。

  1. 使用 sysadmin 帐户通过 SQL Server Management Studio 登录到 SQL 托管实例。

  2. 对象资源管理器 中,右键单击服务器并选择 New Query

  3. 在查询窗口中,使用以下命令创建名为 MyMITestDB2 的数据库和名为 TestTable2 的表。

    CREATE DATABASE MyMITestDB2;
    GO
    USE MyMITestDB2
    GO
    CREATE TABLE TestTable2
    (
    EmpId varchar(10),
    FirstName varchar(255),
    LastName varchar(255),
    Status varchar(10)
    );
    
  4. 在新查询窗口中,执行以下命令,在新数据库 MyMITestDB2 中创建用户 mygroup,并向 SELECT 授予对该数据库的权限:

    USE MyMITestDB2
    GO
    CREATE USER [mygroup] FROM LOGIN [mygroup]
    GO
    GRANT SELECT TO [mygroup]
    GO
    
  5. 使用 SQL Server Management Studio 登录到 SQL 托管实例,作为 Microsoft Entra 组 mygroup 的成员。 打开新的查询窗口并执行跨数据库 SELECT 语句:

    USE MyMITestDB
    SELECT * FROM MyMITestDB2..TestTable2
    GO
    

    应会看到 TestTable2 的表结果。

其他受支持方案

  • Microsoft Entra登录支持 SQL 代理管理和作业执行。
  • Microsoft Entra登录名可以执行数据库备份和还原操作。
  • 对与Microsoft Entra登录和身份验证事件相关的所有语句进行审计。
  • Microsoft Entra登录的专用管理员连接,这些登录是sysadmin服务器角色成员。
  • 使用 sqlcmd 实用工具SQL Server Management Studio工具支持 Microsoft Entra 登录。
  • 来自 Microsoft Entra 登录系统的登录事件支持登录触发器。
  • 可以使用Microsoft Entra登录名配置Service Broker和DB邮件。