我想允许用户执行存储过程。存储过程从sys.indexes
中选择数据。
但是,对存储过程授予EXECUTE
权限不起作用,我仍然会收到错误
用户无权执行此操作。
由于用户无法访问sys.indexes
。
我可以做什么(不让用户直接SELECT
访问sys.indexes表?)
答案 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。正如您在文档中看到的那样,它已被弃用,但还有其他选择。