יצירה והרצה של משימת העברה של SQL Server שמכילה מטא-נתונים עם פסקה של EXECUTE AS

סקירה כללית

משימת העברה של 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 לפני שמתחילים את משימת ההעברה.