La información sobre los usuarios de una base de datos y las funciones a las que están asignados están disponibles en las vistas del sistema sys.database_principals y sys.database_role_members. Revisar estos datos con estas consultas:
select * from sys.database_principals
select * from sys.database_role_members
que asumiremos que tiene los usuarios de bases de datos y las funciones configuradas en la base de datos A, y desea que copian en la base de datos B. Para crear los usuarios en la base de datos destino:
- ejecute la consulta siguiente en la base de datos Una
- Cortar, pegar, revisar y ejecutar la secuencia de comandos lo que resulta en la base de datos B
.
SELECT 'CREATE USER [' + name + '] for login [' + name + ']'
from sys.database_principals
where Type = 'U'
and name <> 'dbo'
Para configurar los nuevos usuarios en B con los mismos papeles, ya que tienen en A:
- Ejecutar la consulta siguiente en la base de datos Una
- Cortar, pegar, revisar y ejecutar el resultante secuencia de comandos en la base de datos B
.
SELECT 'EXECUTE sp_addrolemember ''' + roles.name + ''', ''' + users.name + ''''
from sys.database_principals users
inner join sys.database_role_members link
on link.member_principal_id = users.principal_id
inner join sys.database_principals roles
on roles.principal_id = link.role_principal_id
siempre revisar estos scripts. Puede haber excepciones o casos especiales, y simplemente no quiere estropear la seguridad.
Si la nueva base de datos está en una instancia diferente de SQL Server, primero deberá crear los inicios de sesión de SQL. Si tiene funciones definidas por el usuario, , deberá volver a crearlas primero. (Roles y los permisos asignados a ellos son muy de composición abierta, y yo no quiero volver a estar en una situación en la que había necesidad de hacer eso!)
Esto debería ser secuenciable mediante el uso de las tablas/vistas del sistema. Si nadie más publica, trabajaré más tarde. –