2010-07-16 63 views
12

我有一个数据库中有很多用户。这些用户属于数据库中的不同内置角色(例如db_ddladmin)。在SQL Server 2005中为数据库角色成员资格生成脚本

我想要生成一个脚本,用于创建具有相同角色分配的相同用户以用于不同的数据库。 SQL Management Studio似乎只为用户定义的角色生成sp_addrolemember调用,而不是内置调用。有什么办法可以让它脚本化所有角色?

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

+0

这应该通过使用系统表/视图来编写脚本。如果没有其他人发帖,我会在稍后处理。 – 2010-07-16 14:44:07

回答

21

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

select * from sys.database_principals 
select * from sys.database_role_members 

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

  • 运行在数据库中的以下查询
  • 剪切,粘贴,审查,并在数据库B

运行生成的脚本。

SELECT 'CREATE USER [' + name + '] for login [' + name + ']' 
from sys.database_principals 
where Type = 'U' 
    and name <> 'dbo' 

要配置新用户B中具有相同的角色,因为他们在一个有:

  • 运行在数据库中的以下查询
  • 剪切,粘贴,审查,并运行结果数据库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 

请务必查看这些脚本。可能会出现异常或特殊情况,而您只是不想搞乱安全性。

如果新数据库位于不同的SQL Server实例上,则必须先创建SQL登录名。如果您有用户定义的角色,则需要先重新创建它们。 (角色和分配给它们的权限非常开放式的,而且我从来没有想成为的情况下我需要做到这一点!)

+0

正是我期待的! :) – rickythefox 2010-07-18 20:38:11

+0

完美,一个脚本来创建一个脚本..我曾尝试用生成脚本脚本登录...但遇到权限问题,现在没有问题,谢谢。 – sonjz 2013-12-14 19:58:48

+0

请注意,如果您的数据库具有区分大小写的排序规则,它应该是sp_addrolemember。我编辑了上面的答案以反映这一点。 – Chris 2016-07-06 13:30:05

0

以下是来自Idera的一个选项: 它生成登录名和权限,并可能帮助您完成正在尝试的操作。

+0

我会检查这个工具,谢谢! – rickythefox 2010-07-18 20:37:53

0

对于DB用户角色

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

在写答案时,尝试格式化它们。 Stackoverflow使用降价。 – 2013-10-25 15:46:13

相关问题