Crea ed esegui un job di migrazione di SQL Server contenente metadati con una clausola EXECUTE AS

Panoramica

Un job di migrazione di SQL Server non esegue la migrazione dei dati di accesso utente e del server del database. Pertanto, la migrazione delle origini che contengono oggetti definiti dagli utenti con la clausola EXECUTE AS '[database_user_name]' non verrà eseguita nella nuova replica Cloud SQL, perché gli utenti non esistono ancora lì. Di conseguenza, il processo di migrazione complessivo non andrà a buon fine.

Ad esempio:

CREATE OR ALTER PROCEDURE dbo.example
WITH EXECUTE AS 'some_user'
AS BEGIN
…
END

Non verrà eseguita la migrazione di questa procedura memorizzata perché non è possibile eseguire la migrazione dell'utente some_user. Questo accade perché l'utente non esiste nel database di destinazione.

Per identificare gli oggetti che utilizzano la clausola EXECUTE AS '[database_user_name]' nel database di origine, utilizza queste query e controlla se sono presenti utenti nel database di destinazione.

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

Per eseguire un job di migrazione da un'origine che include questi metadati, crea gli utenti nell'istanza Cloud SQL di destinazione prima di avviare il job di migrazione.