2010-07-16 19 views
12

Tengo una base de datos con muchos usuarios. Esos usuarios pertenecen a diferentes funciones integradas en la base de datos (por ejemplo, db_ddladmin).Generación de scripts para la membresía de la función de base de datos en SQL Server 2005

Quiero generar un script que cree esos mismos usuarios con las mismas asignaciones de roles para usar en una base de datos diferente. SQL Management Studio parece que solo genera llamadas sp_addrolemember para roles definidos por el usuario, no para los integrados. ¿Hay alguna forma de hacer que script todos los roles?

Quizás haya alguna otra herramienta mejor para generar scripts de bases de datos de una base de datos existente (preferiblemente, pero no necesariamente, gratis)?

+0

Esto debería ser secuenciable mediante el uso de las tablas/vistas del sistema. Si nadie más publica, trabajaré más tarde. –

Respuesta

21

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!)

+0

¡Justo lo que estaba buscando! :) – rickythefox

+0

perfecto, un script para crear un script ... había intentado iniciar sesión con Generate Script ... pero me encontré con problemas de permisos, no hay problemas ahora, gracias. – sonjz

+0

Solo una nota, si su base de datos tiene una intercalación sensible a mayúsculas y minúsculas, debería ser sp_addrolemember. Edité la respuesta anterior para reflejar eso. – Chris

0

Aquí hay una opción de Idera: Genera inicios de sesión y permisos y puede ayudarlo a lograr lo que está intentando.

+0

Comprobaré la herramienta, ¡gracias! – rickythefox

0

Para las funciones de usuario DB

SELECT 'CREATE ROLE [' + name + ']' 
    FROM sys.database_principals 
    where type='R' and is_fixed_role = 0 and name != 'public' 
+0

Al escribir respuestas, intente formatearlas. Stackoverflow utiliza el descuento. –

Cuestiones relacionadas