如何向所有表授予REFERENCES权限

5

我需要授予登录名为 sql_login 的用户 REFERENCES 权限。

我可以像这样单独授予某个表的 REFERENCES 权限:

GRANT REFERENCES ON Mytable TO sql_login

我是否有办法将REFERENCES权限授予我的登录用户以访问所有表格,或者我错了吗?

2个回答

12
事实证明,在 GRANT 语句中不需要显式指定可保护的对象。也就是说,你可以这样写:GRANT REFERENCES TO [sql_login];请注意,REFERENCE 权限不仅适用于表格,根据文档,它还适用于:
  • 聚合函数
  • 程序集
  • 非对称密钥
  • 证书
  • 契约
  • 数据库
  • 全文目录
  • 全文停用词列表
  • 函数
  • 消息类型
  • 存储过程
  • 队列
  • 规则
  • 架构
  • 搜索属性列表
  • 序列对象
  • 对称密钥
  • 同义词
  • 用户定义类型
  • 视图和
  • XML SCHEMA COLLECTION。
我之所以这么说,是为了让你意识到这种方法可能会授予你不打算授予权限的对象的权限。但好处是你将不再需要管理这些权限。也就是说,如果/当你向数据库添加新表时,你的用户将自动获得对它的 REFERENCE 权限。

我只需要它用于表格。感谢您的帮助。 - Pரதீப்

4
我自己找到了一种方法来实现这个。
DECLARE @sql VARCHAR(max) = ''

SET @sql =(SELECT distinct Concat('GRANT REFERENCES ON ', TABLE_NAME, ' TO sql_login; ')
           FROM   INFORMATION_SCHEMA.TABLE_CONSTRAINTS
           WHERE  CONSTRAINT_TYPE IN ( 'PRIMARY KEY', 'UNIQUE' )
                  AND table_name IS NOT NULL
           FOR xml path(''))

--print @sql
EXEC (@sql) 

sys.tables 版本

DECLARE @sql VARCHAR(max) = ''

SET @sql =(SELECT Concat('GRANT REFERENCES ON ', name, ' TO sql_login; ')
           FROM   sys.tables
           WHERE  Objectproperty(OBJECT_ID, 'TableHasPrimaryKey') = 1
                  AND type = 'u'
           FOR xml path(''))

--print @sql
EXEC (@sql) 

不确定这是实现这个目标的理想方式


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接