迁移 SQL 登录名和组

已完成

若要将 SQL Server 数据库无缝、安全地转换到 Azure SQL,必须理解并有效管理安全信息的迁移。

决定何时迁移 SQL 登录名和组

假设一个大型组织拥有大量本地 SQL Server 基础结构,为各个业务部门提供服务。 每个业务部门都有自己的 SQL 登录名、用户角色和权限,根据其特定需求定制。 该组织决定将这些数据库迁移到 Azure SQL 数据库,以利用云的可伸缩性优势。

在此方案中,在数据库迁移之前预先迁移登录名可能会给测试阶段带来不必要的复杂性。

在数据库迁移项目结束时迁移登录名有助于测试,尤其是在复杂方案中。 由于数据库架构不断变化,提前迁移登录名可能会导致测试延迟。 等待迁移登录名可使安全配置与最终结构保持一致,从而简化迁移过程,在数据保护需要依赖于表的安全性时尤其如此。

挑战 解释
复杂权限结构 稍后迁移登录名,就可以随着迁移过程中数据库结构的发展而调整权限。
测试延迟 提前迁移登录名可能会减慢测试速度,使安全验证与架构更改变得复杂。
依赖于表的安全性 延迟登录名迁移可以调整安全配置,使其与迁移过程中发生变化的最终数据库结构匹配。

在我们的方案中,此方法可以让你专注于确保安全措施与最终的数据库结构完全一致,减少潜在的复杂情况,并使迁移项目更易于管理。

使用 PowerShell 或 Azure CLI 迁移登录名

可以将 Azure 数据库迁移服务与 PowerShell (Az.DataMigration 模块)或 Azure CLI 配合使用,将登录名和服务器角色从本地 SQL Server 迁移到 Azure SQL 目标。 此登录信息迁移过程将手动任务自动化,例如,同步登录信息与其对应的用户映射,并复制服务器权限和服务器角色。

当前登录迁移支持 Azure VM 目标上的 Azure SQL 托管实例或 SQL Server。

  • Azure SQL 托管实例 - Windows 帐户和 SQL 登录名。
  • Azure VM 上的 SQL Server - 仅支持 SQL 登录名。

如果尚未完成数据库迁移,并且登录名迁移过程已启动,则仍会迁移登录名和服务器角色,但登录名/角色映射不会正确执行。

以下示例演示如何使用 PowerShell 迁移登录名:

New-AzDataMigrationLoginsMigration `
    -SourceSqlConnectionString "<YourSourceConnectionString>" `
    -TargetSqlConnectionString "<YourTargetConnectionString>" `
    -ListOfLogin "login1" "login2" `
    -AADDomainName "<YourAADDomainName>"    # Required for Windows logins

对于 Azure CLI,请使用 az datamigration login-migration 以下命令:

az datamigration login-migration \
    --src-sql-connection-str "<YourSourceConnectionString>" \
    --tgt-sql-connection-str "<YourTargetConnectionString>" \
    --list-of-login "login1" "login2" \
    --aad-domain-name "<YourAADDomainName>"

对于大量登录名,可以使用 --csv-file-path 参数传递包含要迁移的登录名列表的 CSV 文件。

MoveLogins 脚本

MoveLogins 脚本有助于将登录信息从本地 SQL Server 传输到 Azure SQL 数据库或其他 PaaS 产品/服务。

MoveLogins 脚本为用户启用 Active Directory 查找,使你能够获取其用户主体名称(UPN)。

该脚本在 PowerShell 中编写,会生成一个可应用于目标 SQL 环境的 T-SQL 脚本,以传输登录名、数据库用户、角色和权限。 它不会在目标环境中执行命令。 在将生成的脚本输出应用到目标环境之前,需要仔细检查。

取决于使用的是 Azure SQL Database 还是 Azure SQL 托管实例,该脚本会生成不同的结果。 在 Azure SQL 数据库中,无法创建 Microsoft Entra 登录名和相关的数据库用户。Microsoft Entra 用户是在数据库级别创建的。 对于 Azure SQL 托管实例,它类似于具有服务器级登录名和数据库用户的本地 SQL Server。

注意

建议从 PowerShell 或 Azure CLI 开始传输登录名。 如果使用这些推荐工具时遇到任何问题,可以考虑替代方法,例如使用 MoveLogins 脚本。