我问了另一个关于角色和权限的问题,这些问题主要是为了揭示我的无知.另一个结果是建议人们通常应该远离对"公共"角色的权限.
好的,很好,但是如果我已经这样做并且想要为自定义/"灵活"角色重新分配相同的权限,那么最好的方法是什么?到目前为止我所做的是运行Scripting向导,并告诉它在没有CREATE或DROP的情况下编写脚本对象权限,然后运行一个find-replace以便最终结束"GRANT DELETE on [dbo.tablename] TO [newRole]"
.它完成了工作,但我觉得它可以更漂亮/更容易.任何"最佳实践"建议?
从内存工作(我的游戏'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;