练习 - 配置身份验证

已完成

在本练习中,你将创建登录名、用户和管理员,以及像对待 SQL Server 中的普通用户一样授予 Microsoft Entra 用户访问数据库的权限。

  1. 打开 SQL Server Management Studio (SSMS),并连接到 Azure SQL 数据库逻辑服务器(如果尚未连接)。

  2. 配置并连接到数据库后,下一步可能会是添加其他用户并授予他们访问权限。 与在 SQL Server 中一样,可以添加新的登录名和用户。

    在 SSMS 中,右键单击“数据库服务器”,选择“新建查询”,通过以下命令创建一个新查询。 选择“执行”以运行查询

    -- Create a new SQL login and give them a password
    CREATE LOGIN ApplicationUser WITH PASSWORD = 'YourStrongPassword1';
    

    提示

    对于 Azure SQL 数据库中的大多数查询,必须在 Azure SQL 数据库逻辑服务器中右键单击数据库。 在 SQL Server 和 Azure SQL 托管实例中,可以在服务器级别进行查询并使用 USE <DatabaseName>,但在 Azure SQL 数据库中,必须直接查询数据库。 这是因为不支持 USE 语句。 在 Azure SQL 数据库中查询数据库时有几个例外,其中之一是登录名。 必须连接到虚拟 master 数据库才能创建和更改登录名。

    现在,你拥有服务器级别的登录名。 下一步是在 AdventureWorks 数据库中创建用户,并为他们提供读/写访问权限(如果需要)。 右键单击 AdventureWorks 数据库并选择“新建查询”。 使用以下命令创建新查询,然后选择“执行”

    -- Create a new SQL user from that login
    CREATE USER ApplicationUser FOR LOGIN ApplicationUser;
    
    -- Until you run the following two lines, ApplicationUser has no access to read or write data
    ALTER ROLE db_datareader ADD MEMBER ApplicationUser;
    ALTER ROLE db_datawriter ADD MEMBER ApplicationUser;
    

    用户将只能登录到 AdventureWorks 数据库,而不是整个服务器。

    最佳做法是在数据库级别创建非管理员帐户,除非用户需要能够执行管理员任务。

  3. 在 SQL Server 中,你可能熟悉包含的数据库用户的概念。 这意味着用户只能访问特定数据库,而没有服务器的登录名。 在 Azure SQL 数据库中,可以使用 SQL 身份验证或 Microsoft Entra 身份验证创建包含的数据库用户。 你需要位于要在其中创建用户访问权限的用户数据库的上下文中(而不是在 master 数据库中)。 在 SSMS 中,右键单击数据库并选择“新建查询”。 使用以下命令创建新查询,然后选择“执行”

    CREATE USER MyDatabaseUser WITH PASSWORD = 'C0mpl3xPa55word!'
    
  4. 选择对象资源管理器左上角的“连接”,然后选择“数据库引擎”。 配置主页,以便连接到 Azure SQL 数据库逻辑服务器。 对于“登录名”,请输入 MyDatabaseUser,对于“密码”,请输入 C0mpl3xPa55word!。

  5. 还必须设置数据库名称,可以通过转到“选项”>“其他连接参数”(可以在其中输入 Initial Catalog=AdventureWorks)来完成此操作。 必须手动执行此操作,因为 MyDatabaseUser 无权通过扫描服务器来选择数据库。

  6. 选择“连接”,然后确认可以访问数据库。

  7. 作为清理步骤,右键单击来自 MyDatabaseUser 的连接,然后选择“断开连接”

向其他 Microsoft Entra 用户授予访问权限

可以使用 CREATE USER [anna@contoso.com] FROM EXTERNAL PROVIDER T-SQL 语法以包含的数据库用户的身份从 Microsoft Entra 帐户创建登录名。 包含的数据库用户映射到与该数据库关联的 Microsoft Entra 目录中的标识,并且在 master 数据库中没有登录名。

在 Azure SQL 数据库中引入 Microsoft Entra 服务器登录名后,可以在 SQL 数据库的虚拟 master 数据库中从 Microsoft Entra 主体创建登录名。 可以根据 Microsoft Entra 用户、组和服务主体创建 Microsoft Entra 登录名。 有关详细信息,请参阅 Microsoft Entra 服务器主体

此外,Azure 门户只能用于创建管理员,且 Azure 基于角色的访问控制角色不会传播到 Azure SQL 数据库逻辑服务器。 必须使用 Transact-SQL (T-SQL) 授予其他服务器和数据库权限。