概览
SQL Server 迁移作业不会迁移数据库用户和服务器登录数据。因此,包含用户用 EXECUTE AS '[database_user_name]' 子句定义的对象的数据源将不会迁移到新的 Cloud SQL 副本,因为那里尚不存在用户。因此,整个迁移过程将失败。
例如:
CREATE OR ALTER PROCEDURE dbo.example WITH EXECUTE AS 'some_user' AS BEGIN … END
此存储过程不会迁移,因为 some_user 用户无法迁移。这是因为目标数据库中不存在该用户。
如需确定源数据库中有哪些对象使用了 EXECUTE AS '[database_user_name]' 子句,请使用以下查询,并检查目标数据库中是否存在这些对象对应的用户。
SELECT s.name AS schema_name, o.name AS object_name, p.name AS user_name
FROM sys.sql_modules m
INNER JOIN sys.objects o ON o.object_id = m.object_id
INNER JOIN sys.schemas s ON s.schema_id = o.schema_id
INNER JOIN sys.database_principals p ON p.principal_id = m.execute_as_principal_id
如需从包含此类元数据的源运行迁移作业,请在开始迁移作业之前,在目标 Cloud SQL 实例上创建用户。