通过存储过程授予对sys对象的访问权限

时间:2014-09-03 05:25:39

标签: sql-server

我想允许用户执行存储过程。存储过程从sys.indexes中选择数据。

但是,对存储过程授予EXECUTE权限不起作用,我仍然会收到错误

  

用户无权执行此操作。

由于用户无法访问sys.indexes

我可以做什么(不让用户直接SELECT访问sys.indexes表?)

1 个答案:

答案 0 :(得分:1)

您需要授予用户访问该表的权限:

GRANT System Object Permissions (Transact-SQL)

GRANT SELECT ON sys.indexes TO yourUser

如果您不想授予对该表的访问权限,则可以使用所有权链接。问题是sys.indexes的所有者是securityadmin

SELECT * FROM sys.schemas AS S
INNER JOIN sys.server_principals AS SP 
ON S.principal_id = SP.principal_id
WHERE S.name = 'sys'

因此,问题是您需要创建一个所有者为securityadmin的过程。为此,您可以创建它,然后使用ol'好sp_changeobjectowner。正如您在文档中看到的那样,它已被弃用,但还有其他选择。