当前位置:  开发笔记 > 数据库 > 正文

在SQL Server 2005中,是否有一种简单的方法可以将对象的权限从一个用户/角色"复制"到另一个用户/角色?

如何解决《在SQLServer2005中,是否有一种简单的方法可以将对象的权限从一个用户/角色"复制"到另一个用户/角色?》经验,为你挑选了1个好方法。

我问了另一个关于角色和权限的问题,这些问题主要是为了揭示我的无知.另一个结果是建议人们通常应该远离对"公共"角色的权限.

好的,很好,但是如果我已经这样做并且想要为自定义/"灵活"角色重新分配相同的权限,那么最好的方法是什么?到目前为止我所做的是运行Scripting向导,并告诉它在没有CREATE或DROP的情况下编写脚本对象权限,然后运行一个find-replace以便最终结束"GRANT DELETE on [dbo.tablename] TO [newRole]".它完成了工作,但我觉得它可以更漂亮/更容易.任何"最佳实践"建议?



1> gbn..:

从内存工作(我的游戏'pooter上没有SQL),你可以使用 sys.database_permissions

运行此选项并将结果粘贴到新查询中.

编辑,2012年1月.添加了OBJECT_SCHEMA_NAME.
您可能需要通过加入sys.objects来使用它来支持模式(dbo.)

SET NOCOUNT ON;
DECLARE @NewRole varchar(100), @SourceRole varchar(100);

-- Change as needed
SELECT @SourceRole = 'Giver', @NewRole = 'Taker';

SELECT
    state_desc + ' ' + 
          permission_name + ' ON ' + 
          OBJECT_SCHEMA_NAME(major_id) + '.' + OBJECT_NAME(major_id) +
          ' TO ' + @NewRole
FROM
    sys.database_permissions
WHERE
    grantee_principal_id = DATABASE_PRINCIPAL_ID(@SourceRole) 
    AND
    -- 0 = DB,  1 = object/column, 3 = schema. 1 is normally enough
    class <= 3;

推荐阅读
雯颜哥_135
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有