Sql 如何向所有表授予引用权限

Sql 如何向所有表授予引用权限,sql,sql-server,grant,Sql,Sql Server,Grant,我必须授予引用登录权限,比如sql\u登录 我可以授予引用对单个表的权限,如 GRANT REFERENCES ON Mytable TO sql_login 有没有办法授予引用权限,让我登录到我所有的表,或者我有任何错误我自己找到了这样做的方法 DECLARE @sql VARCHAR(max) = '' SET @sql =(SELECT distinct Concat('GRANT REFERENCES ON ', TABLE_NAME, ' TO sql_login; ')

我必须授予
引用
登录权限,比如
sql\u登录

我可以授予
引用
对单个表的权限,如

GRANT REFERENCES ON Mytable TO sql_login

有没有办法授予
引用
权限,让我登录到我所有的表,或者我有任何错误

我自己找到了这样做的方法

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) 
系统表
版本

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) 

不确定这是实现这一点的理想方法,因为事实证明,
GRANT
语句中不需要显式的安全性。也就是说,你可以说:

授予对[sql_login]的引用

请注意,引用权限不仅适用于表。从,它也适用于:

  • 聚合
  • 装配
  • 非对称密钥
  • 证书
  • 合同
  • 数据库
  • 全文目录
  • 全文禁止列表
  • 作用
  • 消息类型
  • 程序
  • 排队
  • 统治
  • 模式
  • 搜索属性列表
  • 序列对象对称密钥
  • 同义词
  • 桌子
  • 类型
  • 查看和
  • XML架构集合

我这样说只是为了让您了解,您可能正在对不打算使用这种方法的对象授予权限。但好处是,您不再需要管理这些权限。也就是说,如果/当您向数据库中添加一个新表时,您的用户将自动获得该表的引用权限。

我只希望它仅用于表。谢谢你的帮助。