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

Sql server 2005 为SQL Server 2005中的数据库角色成员身份生成脚本,sql-server-2005,scripting,membership,role,Sql Server 2005,Scripting,Membership,Role,我有一个数据库,里面有很多用户。这些用户属于数据库中不同的内置角色(例如DB_ddladmin) 我想生成一个脚本,创建具有相同角色分配的相同用户,以便在不同的数据库中使用。SQL Management Studio似乎只为用户定义的角色生成sp_addrolemember调用,而不是内置角色。有没有办法让它为所有角色编写脚本 也许还有其他更好的工具可以从现有数据库生成数据库脚本(最好是免费的,但不一定是免费的)?以下是Idera的一个选项: 它生成登录名和权限,并可能帮助您完成所尝试的操作。有

我有一个数据库,里面有很多用户。这些用户属于数据库中不同的内置角色(例如DB_ddladmin)

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


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

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

有关数据库用户及其角色的信息在系统视图中可用 sys.database_主体和sys.database_角色_成员。通过以下查询查看此数据:

select * from sys.database_principals
select * from sys.database_role_members
我假设您在数据库A中配置了数据库用户和角色,并且希望将它们复制到数据库B。要在目标数据库中创建用户,请执行以下操作:

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

始终检查这些脚本。可能会有例外或特殊情况发生,你只是不想搞砸安全

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

对于DB用户角色

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

调整原始答案以使用新的
ALTER-ROLE
语法:

SELECT 'ALTER ROLE  [' + roles.name + '] ADD MEMBER [' + 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
where users.name = 'MyUser'

这是特定于数据库的-在要提取角色的数据库中运行它

这应该可以通过使用系统表/视图编写脚本。如果没有其他人发帖,我以后会做一些事情。这正是我要找的!:)完美,创建脚本的脚本。。我已尝试使用生成脚本进行脚本登录。。。但是遇到了权限问题,现在没有问题,谢谢。请注意,如果您的数据库有区分大小写的排序规则,则应该是sp_addrolember。我编辑了上面的答案以反映这一点。在编写答案时,请尝试格式化它们。Stackoverflow使用降价。
SELECT 'CREATE ROLE [' + name + ']' 
  FROM sys.database_principals 
  where type='R' and is_fixed_role = 0 and name != 'public'
SELECT 'ALTER ROLE  [' + roles.name + '] ADD MEMBER [' + 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
where users.name = 'MyUser'