Créer et exécuter une tâche de migration SQL Server contenant des métadonnées avec une clause EXECUTE AS

Présentation

Un job de migration SQL Server ne migre pas les données de connexion de l'utilisateur de la base de données et du serveur. Par conséquent, les sources contenant des objets définis par les utilisateurs avec la clause EXECUTE AS '[database_user_name]' ne seront pas migrées vers le nouveau réplica de Cloud SQL, car les utilisateurs n'existent pas encore dans l'instance cible. Par conséquent, le processus de migration global échoue.

Exemple :

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

Cette procédure stockée ne sera pas migrée, car l'utilisateur some_user ne peut pas être migré. En effet, l'utilisateur n'existe pas dans la base de données cible.

Pour identifier les objets qui utilisent la clause EXECUTE AS '[database_user_name]' dans votre base de données source, utilisez ces requêtes et vérifiez s'il existe des utilisateurs pour eux dans la base de données de destination.

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

Pour exécuter une tâche de migration à partir d'une source qui inclut de telles métadonnées, créez les utilisateurs sur votre instance Cloud SQL de destination avant de démarrer votre tâche de migration.