Quiero clonar mi Amazon Relational Database Service (Amazon RDS) para obtener los permisos de inicio de sesión de los usuarios de SQL Server.
Resolución
Creación de procedimientos almacenados
Para duplicar tu RDS para SQL Server, primero debes crear procedimientos almacenados en el entorno en el que deseas duplicar el usuario.
Para crear los procedimientos almacenados, ejecuta el script MSSQL_RDS_Clone_Login. Para obtener más información, consulta el script MSSQL_RDS_Clone_Login en el sitio web de GitHub. Puedes crear los procedimientos almacenados en cualquier base de datos de usuario que no esté dentro de la base de datos del sistema de RDS par SQL Server.
El script MSSQL_RDS_Clone_Login no puede realizar cambios en los nuevos inicios de sesión a menos que el usuario que ejecuta el script tenga acceso para conceder esos permisos. Si el usuario no tiene acceso para conceder permisos, los permisos no se muestran en el script. Si no tienes permisos de concesión e intentas agregar manualmente los permisos al script, el script fallará.
El script MSSQL_RDS_Clone_Login crea tres procedimientos almacenados:
- DuplicateLogin: Este procedimiento duplica el inicio de sesión y el usuario de la base de datos de los permisos de inicio de sesión de cada base de datos desde la que estás copiando.
- GrantUserRoleMembership: Este procedimiento duplica los permisos y roles de los usuarios de la base de datos para el nuevo usuario.
- DuplicateRDS: Este procedimiento consolida los resultados de los procedimientos almacenadosDuplicateLogin y GrantUserRoleMembership.
Ejecución de los procedimientos almacenados
Para ejecutar los procedimientos almacenados, completa los pasos siguientes:
-
Abre una nueva ventana de Transact-SQL (TSQL).
-
Pulsa CTRL+T para asegurarte de que los resultados están en formato de texto.
-
Ejecuta los siguientes scripts.
Inicio de sesión de SQL:
USE [DB_NAME]
EXEC DuplicateRDS @NewLogin=[duplicate_login_name]
,@NewLoginPwd = password
,@LoginToDuplicate = primary_login
,@WindowsLogin = F
,@DatabaseName=NULL
Nota: Sustituye DB_NAME por el nombre de la base de datos del usuario, duplicate_login_name por tu nombre de inicio de sesión y password por tu contraseña.
Inicio de sesión en Windows:
USE [DB_NAME]
EXEC DuplicateRDS @NewLogin=[domain\duplicate_login_name]
,@LoginToDuplicate = primary_login
,@NewLoginPwd = NULL
,@WindowsLogin = T
,@DatabaseName=NULL
Nota: Sustituye DB_NAME por el nombre de la base de datos del usuario, domain por tu nombre de dominio y duplicate_login_name por tu nombre lógico.
-
Una vez generado el script, cópialo de la pestaña Resultados y, a continuación, ejecútalo en una nueva ventana de consulta.
Nota: Una vez que se ejecuta el script, tu inicio de sesión de SQL Server se genera con permisos de nivel de servidor y base de datos similares a los de tu inicio de sesión principal.
-
El inicio de sesión generado excluye los permisos SSISDB de Microsoft SQL Server Integration Services (SSIS) para ssis_admin y ssis_logreader. Si necesitas estos permisos, ejecuta el siguiente comando:
ALTER ROLE [ssis_admin] ADD MEMBER [mydomain\user_name]
ALTER ROLE [ssis_logreader] ADD MEMBER [mydomain\user_name]
GO
Nota: Sustituye mydomain por tu nombre de dominio y user_name por tu nombre de usuario. Es posible que recibas un resultado de script desordenado debido a las tablas temporales que utiliza el procedimiento almacenado. Si esto ocurre, elimina y vuelve a crear el procedimiento almacenado.
-
Para comprobar si hay usuarios huérfanos, ejecuta el siguiente script:
Use [DB_NAME] ;
GO
exec sp_change_users_login @Action='Report' ;
GO
Nota: Sustituye DB_NAME por el nombre de la base de datos del usuario.
-
Para eliminar los usuarios huérfanos, ejecuta el siguiente script:
Use [DB_NAME] ;
GO
exec sp_revokedbaccess 'username'
GO
Nota: Sustituye DB_NAME por el nombre de la base de datos del usuario y username por tu nombre de usuario.
-
Si no deseas conservar los procedimientos almacenados después de duplicar el inicio de sesión, ejecuta el siguiente script:
USE \[DB\_NAME\] ;
GO
DROP PROCEDURE \[dbo\].\[DuplicateRDS\]
GO
DROP PROCEDURE \[dbo\].\[DuplicateLogin\]
GO
DROP PROCEDURE \[dbo\].\[GrantUserRoleMembership\]
GO
Nota: Sustituye DB_NAME por el nombre de la base de datos del usuario.