在SQL Server 2005中为数据库角色成员身份生成脚本

ric*_*fox 13 membership scripting sql-server-2005 role

我有一个包含大量用户的数据库.这些用户属于DB中不同的内置角色(例如db_ddladmin).

我想生成一个脚本,该脚本创建具有相同角色分配的相同用户以在不同的数据库中使用.SQL Management Studio似乎只为用户定义的角色生成sp_addrolemember调用,而不是内置角色.有没有办法让它编写脚本所有角色?

也许还有其他更好的工具可以从现有数据库生成数据库脚本(最好是,但不一定是免费的)?

Phi*_*ley 22

有关数据库用户及其分配角色的信息在系统视图sys.database_principals和sys.database_role_members中可用.使用以下查询查看此数据:

select * from sys.database_principals
select * from sys.database_role_members
Run Code Online (Sandbox Code Playgroud)

我假设你有数据库用户和角色在数据库中的配置,您希望他们复制到数据库B.要创建在目标数据库中的用户:

  • 在数据库A中运行以下查询
  • 剪切,粘贴,查看并在数据库B中运行生成的脚本

.

SELECT 'CREATE USER [' + name + '] for login [' + name + ']'
 from sys.database_principals
 where Type = 'U'
  and name <> 'dbo'
Run Code Online (Sandbox Code Playgroud)

要使用与A中相同的角色配置B中的新用户:

  • 在数据库A中运行以下查询
  • 剪切,粘贴,查看并在数据库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
Run Code Online (Sandbox Code Playgroud)

始终查看这些脚本.可能存在异常或特殊情况,您只是不想破坏安全性.

如果新数据库位于不同的SQL Server实例上,则必须首先创建SQL登录.如果您有用户定义的角色,则需要先重新创建它们.(角色和分配给他们的权限是非常开放的,我不希望处于我需要这样做的情况!)