I asked 另一个问题 https://stackoverflow.com/questions/370024/sql-server-2005-public-database-role-doesnt-seem-to-apply关于角色和权限,这主要暴露了我的无知。其他结果之一是建议人们通常应该避免在“公共”角色的许可下进行破坏。
好的,很好,但是如果我已经这样做了并且想要将相同的权限重新分配给自定义/“灵活”角色,那么最好的方法是什么?到目前为止,我所做的是运行脚本向导,并告诉它在不创建或删除的情况下编写对象权限脚本,然后运行查找替换,这样我就会得到很多"GRANT DELETE on [dbo.tablename] TO [newRole]"
。它完成了工作,但我觉得它可以更漂亮/更容易。有什么“最佳实践”建议吗?
从内存中工作(我的游戏'pooter上没有SQL),你可以使用sys.database_permissions http://msdn.microsoft.com/en-us/library/ms188367(SQL.90).aspx
运行此命令并将结果粘贴到新查询中。
编辑,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;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)