sql-server-2005 – 为SQL Server 2005中的数据库角色成员生成脚本

我有一个数据库,其中有很多用户.这些用户属于DB中不同的内置角色(例如db_ddladmin).

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

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

解决方法

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

我假设您在数据库A中配置了数据库用户和角色,并希望将其复制到数据库B.要创建目标数据库中的用户

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

.

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

要在B中配置与A中具有相同角色的新用户

>在数据库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

总是查看这些脚本.可能有例外或特殊情况,您只是不想搞砸安全.

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

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 &#39;EastRiver&#39; 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...