我有一个数据库中有很多用户。这些用户属于数据库中的不同内置角色(例如db_ddladmin)。在SQL Server 2005中为数据库角色成员资格生成脚本
我想要生成一个脚本,用于创建具有相同角色分配的相同用户以用于不同的数据库。 SQL Management Studio似乎只为用户定义的角色生成sp_addrolemember调用,而不是内置调用。有什么办法可以让它脚本化所有角色?
也许有任何其他更好的工具来从现有数据库生成数据库脚本(最好但不一定是免费的)?
我有一个数据库中有很多用户。这些用户属于数据库中的不同内置角色(例如db_ddladmin)。在SQL Server 2005中为数据库角色成员资格生成脚本
我想要生成一个脚本,用于创建具有相同角色分配的相同用户以用于不同的数据库。 SQL Management Studio似乎只为用户定义的角色生成sp_addrolemember调用,而不是内置调用。有什么办法可以让它脚本化所有角色?
也许有任何其他更好的工具来从现有数据库生成数据库脚本(最好但不一定是免费的)?
有关数据库用户及其分配角色的信息可在系统视图 sys.database_principals和sys.database_role_members中使用。这些查询查看该数据:
select * from sys.database_principals
select * from sys.database_role_members
我假设你有数据库用户和角色在数据库中的配置,您希望他们复制到数据库B.要创建在目标数据库中的用户:
运行生成的脚本。
SELECT 'CREATE USER [' + name + '] for login [' + name + ']'
from sys.database_principals
where Type = 'U'
and name <> 'dbo'
要配置新用户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登录名。如果您有用户定义的角色,则需要先重新创建它们。 (角色和分配给它们的权限非常开放式的,而且我从来没有想成为的情况下我需要做到这一点!)
正是我期待的! :) – rickythefox 2010-07-18 20:38:11
完美,一个脚本来创建一个脚本..我曾尝试用生成脚本脚本登录...但遇到权限问题,现在没有问题,谢谢。 – sonjz 2013-12-14 19:58:48
请注意,如果您的数据库具有区分大小写的排序规则,它应该是sp_addrolemember。我编辑了上面的答案以反映这一点。 – Chris 2016-07-06 13:30:05
对于DB用户角色
SELECT 'CREATE ROLE [' + name + ']'
FROM sys.database_principals
where type='R' and is_fixed_role = 0 and name != 'public'
在写答案时,尝试格式化它们。 Stackoverflow使用降价。 – 2013-10-25 15:46:13
这应该通过使用系统表/视图来编写脚本。如果没有其他人发帖,我会在稍后处理。 – 2010-07-16 14:44:07