2016-09-28 72 views
3

我必须授予REFERENCES权限才能登录,例如sql_login如何将REFERENCES权限授予所有表

我可以给补助REFERENCES允许单个表像

GRANT REFERENCES ON Mytable TO sql_login 

有什么办法授予REFERENCES允许我登录到我的所有表或以任何方式是错的

回答

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) 

不知道这是实现这一

3

事实证明的理想方法,明确安全对象不需要在GRANT声明。也就是说,你可以说:

GRANT REFERENCES TO [sql_login];

注意,这不只是对其中这些引用权限适用表。从the documentation,它也适用于:

  • 骨料
  • ASSEMBLY
  • 非对称密钥
  • CERTIFICATE
  • 合同
  • DATABASE
  • FULLTEXT CATALOG
  • FULLTEXT STOPLIST
  • FUNCTION
  • MESSAGE TYPE
  • PROCEDURE
  • QUEUE
  • RULE
  • SCHEMA
  • 搜索属性列表
  • 序列对象SYMMETRIC KEY
  • SYNONYM
  • TABLE
  • TYPE
  • VIEW和
  • XML架构集合

我说,只有让你明白,你可能在你不打算使用这种方法进行对象授予权限。但好处是你不必再次管理这些权限。也就是说,如果/当您向数据库添加新表时,用户将自动获得REFERENCES权限。

+0

我只想要它的表单。谢谢您的帮助。 –