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

2024-03-15

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(使用前将#替换为@)

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

  • IN SQL Server 是 CLR 线程安全的

    我在 SQL Server 和 Exchange Web 服务之间的 CLR 中有一个接口 用于在应用程序之间同步和发送电子邮件 在测试中它可以正常工作 没有任何问题 我们在生产环境中发现了零星问题 其中较长的 Web 服务任务似乎重叠 我
  • 什么是“具有指定instance_id的DacInstance不存在。(Microsoft SQL Server,36004)”?

    我正在尝试使用 dacpac 升级远程 SQL Server 2012 数据库 但收到以下消息 指定instance id 的DacInstance 不存在 微软 SQL Server 36004 我试图在互联网上搜索但找不到任何东西 有任
  • Power Query 根据 Excel 列列表过滤 SQL 视图

    有没有办法使用 Power Query 根据 Excel 表列中的值列表过滤 SQL 视图 我有一个返回大量数据 数百万条记录或属性 的 SQL 视图 用户希望根据属性 ID 的 Excel 表格列进行过滤 我知道我可以根据 Power 查
  • 基于 SQl Server 2008 中的 2 列的唯一键?

    SQL Server 是否可以拥有基于 2 列的唯一键 我可以在两列中都有重复项 但不能同时存在 MfgID CustNum 1 Cust01 1 Cust02 2 Cust02 1 Cust03 3 Cust03 3 Cust04 1 C
  • 链接到 SQL 表时如何在 Access 中获得“查找”功能?

    我正在构建一个 SQL 数据库 该数据库将具有 Access 2010 前端 我希望在 Access 中查找某些字段 即用户单击 Access 中的字段并填充下拉列表 在 Access 中使一个字段成为另一个表的查找相当简单 但我似乎不知道
  • CDC 已启用,但未填充 cdc.dbo_CT 表

    我已使用以下步骤启用 CDC exec sys sp cdc enable db exec sys sp cdc enable table source schema N dbo source name N table name role
  • 从sql server 2005中的列中获取查询的xml节点

    我有一个包含 2 列的表 第一个是带有主键的整数列 第二个是带有数据的 xml 列 数据列包含xml如下
  • 如何将 ROW_NUMBER() 分配给列?

    看完之后这个问题 https stackoverflow com questions 1293390 sql to output line number in results of a query 我还有一个类似的问题 有没有一种简单的方法
  • 如何从代码获取复制状态

    我已经在 SQL Server 2005 数据库上完成了复制 现在我想从我的 GUI 显示状态 可以是 C 或其他 是否有任何方法或 API 可以让我监控复制状态 这是为了客户端确认复制正在工作 Thanks 像这样的事情 http www
  • 触发器定义中的 DELETE 语句问题

    我创建了一个插入 更新触发器 旨在根据插入的数据更新不同表中的信息 触发器执行 或应该执行 的最后一件事是从目标表中删除所有数据 这些数据的条件在触发器的插入部分期间可能已更改 除了最后的之外 一切似乎都在触发DELETE陈述 它正在执行D
  • MS SQL 2005 备份能否恢复到 MS SQL 2008 实例上?

    是否可以将 SQL Server 2005 数据库的备份恢复到 SQL Server 2008 的实例上 我需要重建一台服务器 因为它变得相当糟糕 所以我计划借此机会升级到 SQL 2008 并想知道我是否能够正常恢复我的备份 从 2005
  • 查找每个客户组的最新帐户

    我有一个包含客户信息的表 每个客户都会分配一个客户 ID 他们的 SSN 他们在开设更多帐户时会保留该 ID 两个客户可能使用同一个帐户 每个客户都有自己的 ID 帐号不按日期排序 我想找到每个客户或客户组的最新帐户 如果两个客户曾经一起使
  • 在sql server中,sys.types中的user_type_id和system_type_id有什么区别

    sql server中sys types视图中的user type id和system type id有什么区别 我想将sys columns与sys types进行内连接以获取用户表中列的数据类型 但这两个视图都有两个字段user typ
  • 更改 SQL Server 中所有表的所有列的排序规则

    我导入了一个包含一些数据的数据库 以便与另一个数据库进行比较 目标数据库有排序规则Latin1 General CI AS并且源数据库有SQL Latin1 General CP1 CI AS 我确实将源数据库的排序规则更改为Latin1
  • 如何使用存储过程 SQL SERVER 2008 R2(mssql) 插入 PHP 数组值

    我有这个数组 REV Array 0 gt 240 1 gt 241 2 gt 242 3 gt 243 4 gt 249 我现在使用下面的代码进行插入 将每个数组的元素存储在带有 id userID Type 和 Date 的行中 if
  • 工厂模式数据库连接

    我正在尝试使用 MySQL 实现数据库连接上的工厂模式 SQL Server 面临奇怪的错误 你调用的对象是空的 在 SQL 命令对象上 internal class SqlServerDB IDatabase private SqlCon
  • 检测目录中是否有某些内容被修改,如果是,则备份 - 否则不执行任何操作

    我有一个 数据 目录 我通过 shell 脚本定期同步到远程 NAS 但是 我想让这变得更有效率 我想在运行 rsync 之前检测 数据 中是否发生了变化 这样我就不会不必要地唤醒 NAS 上的驱动器 我正在考虑修改 shell 脚本以获取
  • 没有 DateAdd() 的 SSIS 表达式前一个日期

    目前正在开发一个包 它将表达式从先前的日期传递到文件名 我当前的代码如下作为字符串变量 DT WSTR 20 DATEPART YYYY Dateadd DD 1 dateadd MM datediff MM DT DATE 1900 01
  • SQL限制数据库中的最小值和最大值

    CREATE TABLE TBL CD CDnr int identity 1 1 CDTitel nvarchar 80 NOT NULL CDduur int CDprijs smallmoney 所以我正在创建这个表 有什么方法可以将
  • 无法在 SSIS 查找中选择 ODBC 源

    我正在创建一个用于更新 SQL Server 中的表的包 要更新的详细信息是从 MySQL 数据库获取的 为此 我使用 ODBC 连接管理器连接到 MySQL 但此 ODBC 连接管理器未在 OLE DB 连接管理器中列出 我可以在 Too

随机推荐