创建并运行包含包含 EXECUTE AS 子句的元数据的 SQL Server 迁移作业

概览

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 实例上创建用户。