¿Cómo puedo duplicar o clonar mis permisos de inicio de sesión de usuario de RDS para SQL Server?

4 minutos de lectura
0

Quiero clonar mi Amazon Relation Database (Amazon RDS) para los permisos de inicio de sesión de los usuarios de Microsoft SQL Server. ¿Cómo puedo hacerlo?

Resolución

Nota: Este script no realiza ningún cambio 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 aparecen en el script. Esto se debe a que el inicio de sesión utilizado para acceder al script no tiene privilegios de visualización. Además, en caso de que intente añadir el script de permisos manualmente sin tener privilegios de concesión, el script fallará.

1.    Copie y ejecute el script MSSQL_RDS_Clone_Login para crear un procedimiento almacenado en el entorno en el que desee duplicar al usuario. Este procedimiento almacenado se utilizará más tarde para crear un duplicado del inicio de sesión de usuario, del usuario de la base de datos, y de los permisos a nivel del servidor y de la base de datos.

Puede crear el procedimiento almacenado en cualquier base de datos de usuario que no esté dentro de la base de datos del sistema de Amazon RDS para SQL Server. Sustituya [DB_NAME] por el nombre de la base de datos de usuarios, según su caso de uso.

El siguiente script crea tres procedimientos almacenados:

  • DuplicateLogin: duplica el inicio de sesión y duplica el usuario de la base de datos para aquellos inicios de sesión en cada base de datos que contenga los permisos de inicio de sesión de los que está copiando.
  • GrantUserRoleMembership: duplica los permisos y roles del usuario de la base de datos para el nuevo usuario.
  • DuplicateRDS: consolida los resultados de los procedimientos almacenados DuplicateLogin y GrantUserRoleMembership.

2.    Después de crear el procedimiento almacenado, abra una nueva ventana TSQL y ejecute el procedimiento almacenado con el siguiente formato.

Nota: antes de ejecutar el script, asegúrese de que los resultados están en formato de texto pulsando CTRL+T en el teclado.

--SQL login
EXEC    DuplicateRDS @NewLogin=[<duplicate_login_name>]
         ,@NewLoginPwd = password
    ,@LoginToDuplicate = master_login
    , @WindowsLogin  = F
    ,@DatabaseName=NULL
-- Windows login
EXEC    DuplicateRDS @NewLogin=[<domain\duplicate_login_name>]
    ,@LoginToDuplicate = master_login
    ,@NewLoginPwd = NULL
    , @WindowsLogin  = T
    ,@DatabaseName=NULL

3.    Una vez generado el script, cópielo de la pestaña Results (Resultados) y ejecútelo en una nueva ventana de consulta. Después de la ejecución del script, su inicio de sesión en SQL Server se genera con permisos de nivel de servidor y de base de datos similares a los de su inicio de sesión maestro.

Nota: Este ejemplo excluye los permisos de SSISDB para ssis_admin y ssis_logreader. Si necesita estos permisos, proporciónelos por separado.

ALTER ROLE [ssis_admin] ADD MEMBER [mydomain\user_name]
ALTER ROLE [ssis_logreader] ADD MEMBER [mydomain\user_name]
GO

Nota: Es posible que los resultados de la secuencia de comandos se produzcan de forma desordenada debido a que se utilizan tablas temporales en el procedimiento almacenado. En caso de que ocurra esto, elimine y vuelva a crear el procedimiento almacenado para que tenga el formato correcto.

4.    Si tiene usuarios huérfanos, ejecute el siguiente script. Este script comprueba si hay usuarios huérfanos en las bases de datos y si el script ha fallado, elimina esos usuarios huérfanos.

El siguiente script comprueba si hay usuarios huérfanos:

Use [DB_NAME] ; 
GO 
exec sp_change_users_login @Action='Report' ;
GO

El siguiente script descarta a los usuarios huérfanos:

Use [DB_NAME] ;
GO
exec sp_revokedbaccess 'username'
GO

5.    Si no desea mantener los procedimientos almacenados después de duplicar el inicio de sesión (por ejemplo, debido a la conformidad), ejecute el siguiente script:

USE [DB_NAME]
GO
DROP PROCEDURE [dbo].[DuplicateRDS]
GO
DROP PROCEDURE [dbo].[DuplicateLogin]
GO
DROP PROCEDURE [dbo].[GrantUserRoleMembership]
GO