sp_migrate_user_to_contained (Transact-SQL)

Convertit un utilisateur de la base de données mappé à un compte de connexion SQL Server, en utilisateur de base de données à relation contenant-contenu avec mot de passe. Dans une base de données à relation contenant-contenu, utilisez cette procédure pour supprimer les dépendances sur l'instance de SQL Server où la base de données est installée. sp_migrate_user_to_contained sépare l'utilisateur du compte de connexion SQL Server d'origine, afin que les paramètres tels que le mot de passe et la langue par défaut puissent être administrés séparément pour la base de données à relation contenant-contenu. sp_migrate_user_to_contained peut être utilisé avant de déplacer la base de données à relation contenant-contenu vers une instance différente du Moteur de base de données SQL Server afin d'éliminer les dépendances sur les comptes de connexion de l'instance SQL Server actuels.

Remarque Cette procédure est utilisée uniquement dans une base de données à relation contenant-contenu. Pour plus d'informations, consultez Bases de données à relation contenant-contenu.

Syntaxe

sp_migrate_user_to_contained [ @username = ] N'user' , 
    [ @rename = ] { N'copy_login_name' | N'keep_name' } , 
    [ @disablelogin = ] { N'disable_login' | N'do_not_disable_login' } 

Arguments

  • [@username = ] N'user'
    Nom d'un utilisateur dans la base de données à relation contenant-contenu actuelle mappée à un compte de connexion authentifié SQL Server. La valeur est sysname, NULL étant la valeur par défaut.

  • [@rename = ] N'copy_login_name' | N'keep_name'
    Lorsqu'un utilisateur de la base de données basé un compte de connexion a un nom d'utilisateur différent du nom de connexion, utilisez keep_name pour conserver le nom d'utilisateur de la base de données pendant la migration. Utilisez copy_login_name pour créer l'utilisateur de base de données à relation contenant-contenu avec le nom du compte de connexion, au lieu de l'utilisateur. Lorsqu'un utilisateur de la base de données basé sur un compte de connexion a le même nom d'utilisateur que le nom de connexion, les deux options créent l'utilisateur de base de données à relation contenant-contenu sans modifier le nom.

  • [@disablelogin = ] N'disable_login' | N'do_not_disable_login'
    disable_login désactive le compte de connexion dans la base de données master. Pour se connecter lorsque le compte de connexion est désactivé, la connexion doit fournir le nom de base de données à relation contenant-contenu en tant que initial catalog dans le cadre de la chaîne de connexion.

Valeurs des codes de retour

0 (réussite) ou 1 (échec)

Notes

sp_migrate_user_to_contained crée l'utilisateur de base de données à relation contenant-contenu avec mot de passe, indépendamment des propriétés ou des autorisations du compte de connexion. Par exemple, la procédure peut réussir si le compte de connexion est désactivé ou si l'autorisation CONNECT à la base de données est refusée à l'utilisateur.

sp_migrate_user_to_contained présente les restrictions suivantes.

  • Le nom d'utilisateur ne doit pas déjà exister dans la base de données.

  • Les utilisateurs intégrés, par exemple dbo et guest, ne peuvent pas être convertis.

  • L'utilisateur ne peut pas être spécifié dans la clause EXECUTE AS d'une procédure stockée signée.

  • L'utilisateur ne peut pas posséder une procédure stockée qui inclut la clause EXECUTE AS OWNER.

  • sp_migrate_user_to_contained ne peut pas être utilisé dans une base de données système.

Sécurité

Lorsque vous migrez des utilisateurs, veillez à ne pas désactiver ou supprimer tous les comptes de connexion de l'administrateur dans l'instance de SQL Server. Si tous les comptes de connexion sont supprimés, consultez Se connecter à SQL Server lorsque les administrateurs système n'y ont plus accès.

Si le compte de connexion BUILTIN\Administrateurs est présent, les administrateurs peuvent se connecter en démarrant leur application à l'aide de l'option Exécuter en tant qu'administrateur.

Autorisations

Requiert l'autorisation CONTROL SERVER.

Exemples

A.Migration d'un seul utilisateur

L'exemple suivant migre un compte de connexion SQL Server nommé Barry, vers un utilisateur de base de données à relation contenant-contenu avec mot de passe. L'exemple ne modifie pas le nom d'utilisateur et conserve le compte de connexion actif.

sp_migrate_user_to_contained 
@username = N'Barry',
@rename = N'keep_name',
@disablelogin = N'do_not_disable_login' ;

B.Migration de tous les utilisateurs de la base de données avec des comptes de connexion vers des utilisateurs de base de données à relation contenant-contenu sans comptes de connexion

L'exemple suivant migre tous les utilisateurs basés sur des comptes de connexion SQL Server vers des utilisateurs de base de données à relation contenant-contenu avec mots de passe. L'exemple exclut les comptes de connexion qui ne sont pas activés. L'exemple doit être exécuté dans la base de données à relation contenant-contenu.

DECLARE @username sysname ;
DECLARE user_cursor CURSOR
    FOR 
        SELECT dp.name 
        FROM sys.database_principals AS dp
        JOIN sys.server_principals AS sp 
        ON dp.sid = sp.sid
        WHERE dp.authentication_type = 1 AND sp.is_disabled = 0;
OPEN user_cursor
FETCH NEXT FROM user_cursor INTO @username
    WHILE @@FETCH_STATUS = 0
    BEGIN
        EXECUTE sp_migrate_user_to_contained 
        @username = @username,
        @rename = N'keep_name',
        @disablelogin = N'disable_login';
    FETCH NEXT FROM user_cursor INTO @username
    END
CLOSE user_cursor ;
DEALLOCATE user_cursor ;

Voir aussi

Concepts

Migrer vers une base de données partiellement à relation contenant-contenu

Bases de données à relation contenant-contenu