Je souhaite cloner mes autorisations de connexion utilisateur Amazon Relational Database Service (Amazon RDS) pour SQL Server.
Résolution
Créer des procédures stockées
Pour dupliquer RDS pour SQL Server, vous devez d'abord créer des procédures stockées dans l'environnement dans lequel vous souhaitez dupliquer l'utilisateur.
Pour créer les procédures stockées, exécutez le script MSSQL_RDS_Clone_Login. Pour plus d'informations, consultez le script MSSQL_RDS_Clone_Login sur le site Web de GitHub. Vous pouvez créer les procédures stockées dans n'importe quelle base de données utilisateur qui ne se trouve pas dans la base de données système RDS pour SQL Server.
Le script MSSQL_RDS_Clone_Login ne peut pas modifier les nouvelles connexions à moins que l'utilisateur qui exécute le script n'y ait accès pour accorder ces autorisations. Si l'utilisateur n'a pas accès pour accorder des autorisations, celles-ci n'apparaissent pas dans le script. Si vous ne disposez pas d'autorisations d'octroi et que vous essayez d'ajouter manuellement les autorisations au script, le script échoue.
Le script MSSQL_RDS_Clone_Login crée trois les procédures stockées.
- DuplicateLogin : Cette procédure duplique le nom d'utilisateur et l'utilisateur de la base de données à partir des autorisations de connexion de chaque base de données à partir de laquelle vous effectuez la copie.
- GrantUserRoleMembership : Cette procédure permet de dupliquer les autorisations et les rôles des utilisateurs de la base de données pour le nouvel utilisateur.
- DuplicateRDS : Cette procédure consolide les résultats des procédures stockées DuplicateLogin et GrantUserRoleMembership.
Exécuter les procédures stockées
Pour exécuter les procédures stockées, procédez comme suit :
-
Ouvrez une nouvelle fenêtre Transact-SQL (TSQL).
-
Appuyez sur CTRL+T pour vous assurer que les résultats sont au format texte.
-
Exécutez les scripts suivants.
Connexion SQL :
USE [DB_NAME]
EXEC DuplicateRDS @NewLogin=[duplicate_login_name]
,@NewLoginPwd = password
,@LoginToDuplicate = primary_login
,@WindowsLogin = F
,@DatabaseName=NULL
Remarque : Remplacez DB_NAME par le nom de la base de données utilisateur, duplicate_login_name par le nom de la connexion et password par votre mot de passe.
Connexion Windows :
USE [DB_NAME]
EXEC DuplicateRDS @NewLogin=[domain\duplicate_login_name]
,@LoginToDuplicate = primary_login
,@NewLoginPwd = NULL
,@WindowsLogin = T
,@DatabaseName=NULL
Remarque : Remplacez DB_NAME par le nom de la base de données utilisateur, domain par le nom du domaine et duplicate_login_name par votre nom de connexion.
-
Une fois le script généré, copiez-le depuis l'onglet Résultats, puis exécutez-le dans une nouvelle fenêtre de requête.
Remarque : Une fois le script exécuté, votre identifiant SQL Server est généré avec des autorisations de niveau serveur et base de données similaires à celles de votre identifiant principal.
-
La connexion générée exclut les autorisations SSISDB de Microsoft SQL Server Integration Services (SSIS) pour ssis_admin et ssis_logreader. Si vous avez besoin de ces autorisations, exécutez la commande suivante :
ALTER ROLE [ssis_admin] ADD MEMBER [mydomain\user_name]
ALTER ROLE [ssis_logreader] ADD MEMBER [mydomain\user_name]
GO
Remarque : Remplacez mydomain par le nom du domaine et user_name par votre nom d'utilisateur. Il est possible que vous receviez une sortie de script désordonnée en raison des tables temporaires utilisées par la procédure stockée. Dans ce cas, supprimez et recréez la procédure stockée.
-
Pour rechercher les utilisateurs orphelins, exécutez le script suivant :
Use [DB_NAME] ;
GO
exec sp_change_users_login @Action='Report' ;
GO
Remarque : Remplacez DB_NAME par le nom de la base de données utilisateur.
-
Pour supprimer les utilisateurs orphelins, exécutez le script suivant :
Use [DB_NAME] ;
GO
exec sp_revokedbaccess 'username'
GO
Remarque : Remplacez DB_NAME par le nom de la base de données utilisateur et username par votre nom d'utilisateur.
-
Si vous ne souhaitez pas conserver les procédures stockées après avoir dupliqué la connexion, exécutez le script suivant :
USE [DB_NAME] ;
GO
DROP PROCEDURE [dbo].[DuplicateRDS]
GO
DROP PROCEDURE [dbo].[DuplicateLogin]
GO
DROP PROCEDURE [dbo].[GrantUserRoleMembership]
GO
Remarque : Remplacez DB_NAME par le nom de la base de données utilisateur.