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

Présentation

Une tâche 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 des utilisateurs avec la clause EXECUTE AS '[database_user_name]' ne seront pas migrées vers la nouvelle réplique Cloud SQL, car les utilisateurs n'y existent pas encore. Par conséquent, le processus de migration global échouera.

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 si des utilisateurs existent 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.