【发布时间】:2016-09-29 00:54:55
【问题描述】:
我必须授予REFERENCES 登录权限,例如sql_login。
我可以授予REFERENCES 对单个表的权限,例如
GRANT REFERENCES ON Mytable TO sql_login
有什么方法可以授予REFERENCES 允许我登录所有表的权限,或者以任何方式出错
【问题讨论】:
标签: sql sql-server sql-grant
我必须授予REFERENCES 登录权限,例如sql_login。
我可以授予REFERENCES 对单个表的权限,例如
GRANT REFERENCES ON Mytable TO sql_login
有什么方法可以授予REFERENCES 允许我登录所有表的权限,或者以任何方式出错
【问题讨论】:
标签: sql sql-server sql-grant
事实证明,GRANT 语句中不需要显式安全对象。也就是说,你可以说:
GRANT REFERENCES TO [sql_login];
请注意,REFERENCES 权限不仅适用于表。来自the documentation,也适用于:
我这样说只是为了让您明白您可能会授予对您不打算使用此方法的对象的权限。但好处是您不必再管理这些权限。也就是说,如果/当您向数据库添加新表时,您的用户将自动获得它的 REFERENCES 权限。
【讨论】:
我自己找到了一种方法来做到这一点
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)
不确定这是实现此目标的理想方式
【讨论】: