设为首页收藏本站

EPS数据狗论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1269|回复: 0

SQL Server如何导出db所有用户权限创建语句

[复制链接]

10

主题

85

金钱

141

积分

入门用户

发表于 2019-10-25 14:56:30 | 显示全部楼层 |阅读模式

  1. use db

  2. go

  3. DECLARE

  4. @Database varchar(255),

  5. @loginName varchar(255),

  6. @roleName varchar(255),

  7. @sql nvarchar(max);



  8. SET @sql=N'';

  9. DECLARE curLogin CURSOR LOCAL for

  10. select db_name() as dbname,dp.name as username,dpr.name as rolename

  11. from sys.database_principals dp

  12. join sys.database_role_members drm on drm.member_principal_id=dp.principal_id

  13. join sys.database_principals dpr on drm.role_principal_id=dpr.principal_id

  14. join sys.server_principals sp on sp.name=dp.name

  15. where 1=1

  16. --and dpr.is_fixed_role=1

  17. and dp.type<>'R'

  18. and dp.type in('S','U','G') --SQL USER,WINDOWS USER AND windows group

  19. order by username,rolename





  20. OPEN curLogin;

  21. FETCH NEXT FROM curLogin INTO @Database,@loginName,@roleName;



  22. WHILE @@FETCH_STATUS = 0

  23. BEGIN

  24.         SET @sql=@sql+N'

  25.         use '+@Database+';

  26.         if not exists(select * from '+@Database+'.sys.database_principals where name='''+@LoginName+''')

  27.         begin

  28.                 CREATE USER '+QUOTENAME(@LoginName)+';

  29.         end

  30.         else

  31.         begin

  32.                 ALTER USER '+QUOTENAME(@LoginName)+' with login = '+QUOTENAME(@LoginName)+'

  33.         end

  34.         ;

  35.         '

  36.         --print @sql

  37.         --exec sp_executesql @sql

  38.          

  39.         select @sql=@sql+N'

  40.         use '+@Database+';

  41.         exec sp_addrolemember '''+@roleName+''', ''' + @LoginName + ''''

  42.        

  43.         --exec sp_executesql @sql



  44.         FETCH NEXT FROM curLogin INTO @Database,@loginName,@roleName;

  45. END



  46. CLOSE curLogin

  47. DEALLOCATE curLogin

  48. ;

  49. --select len(@sql)

  50. --print @sql --this will be truncated

  51. exec sysadmin.dbo.printmax @sql

  52. go
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

客服中心
关闭
在线时间:
周一~周五
8:30-17:30
QQ群:
653541906
联系电话:
010-85786021-8017
在线咨询
客服中心

意见反馈|网站地图|手机版|小黑屋|EPS数据狗论坛 ( 京ICP备09019565号-3 )   

Powered by BFIT! X3.4

© 2008-2028 BFIT Inc.

快速回复 返回顶部 返回列表