如何为所有表授予REFERENCES权限

时间:2016-09-28 12:30:56

标签: sql sql-server grant

我必须向登录sql_login授予REFERENCES权限。

我可以将授予GRANT REFERENCES ON Mytable TO sql_login 权限授予个人表格,例如

REFERENCES

有没有办法授予time_end = ((Date.today + 1).to_time - 1/1001).utc.iso8601(3) => "2016-09-28T21:59:59.999Z" 我登录所有桌面的权限,或者以任何方式出错?

2 个答案:

答案 0 :(得分:3)

我自己找到了一种方法来做到这一点

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) 

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

答案 1 :(得分:3)

事实证明,GRANT语句中不需要明确的安全措施。也就是说,你可以说:

GRANT REFERENCES TO [sql_login];

请注意,不仅仅是REFERENCES权限适用的表。从the documentation起,它也适用于:

  • AGGREGATE
  • ASSEMBLY
  • ASYMMETRIC KEY
  • CERTIFICATE
  • 合同
  • DATABASE
  • FULLTEXT目录
  • FULLTEXT STOPLIST
  • 功能
  • MESSAGE TYPE
  • PROCEDURE
  • QUEUE
  • RULE
  • SCHEMA
  • 搜寻物业清单
  • SEQUENCE OBJECT SYMMETRIC KEY
  • SYNONYM
  • TYPE
  • 查看和
  • XML SCHEMA COLLECTION

我这样说只是为了让您感谢您可能会授予您不希望使用此方法的对象的权限。但好处是你不必再次管理这些权限。也就是说,如果/当您向数据库添加新表时,您的用户将自动获得它的REFERENCES权限。