And*_*ykh 5 security sql-server sql-server-2012
我有一个查询sys.dm_exec_requests视图的存储过程。在存储过程中,视图只返回一行,而存储过程需要查看所有行。视图上的MSDN文章说返回什么取决于用户权限:
如果用户在服务器上有 VIEW SERVER STATE 权限,用户将看到 SQL Server 实例上所有正在执行的会话;否则,用户将只能看到当前会话。
存储过程实际上是一个broker队列的激活存储过程:
CREATE QUEUE test_queue
WITH
STATUS = ON,
RETENTION = OFF ,
ACTIVATION (
STATUS = ON,
PROCEDURE_NAME = test_procedure,
MAX_QUEUE_READERS = 1,
EXECUTE AS SELF ),
POISON_MESSAGE_HANDLING (STATUS = ON)
ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)
当我阅读MSDN文章时,我改变了
EXECUTE AS SELF
Run Code Online (Sandbox Code Playgroud)
到
EXECUTE AS 'dbo'
Run Code Online (Sandbox Code Playgroud)
这没有任何区别。sys.dm_exec_requests仍然会返回一行。
我也试着做
EXECUTE AS OWNER
Run Code Online (Sandbox Code Playgroud)
这也没什么区别。据我了解,存储过程所有者是谁创建的,也就是我。由于我处于系统管理员角色中,应该可以正常工作,但事实并非如此。我将不胜感激任何故障排除提示。
特别是我想知道如何列出给定用户的服务器权限,以便我可以根据文章检查它们是否包含“查看服务器状态”权限。
令人困惑的部分是我所理解的用户是在数据库级别,所以我不清楚它如何获得服务器权限。如果你能澄清这一点,那就太好了。
有关如何正确正确签署已激活过程以便它可以利用已激活过程的 VIEW SERVER STATE 特权的示例,请参阅签署已激活过程。步骤是:
EXECUTE AS,即使模块已签名,由于 Service Broker 执行激活过程的方式,主体也无法访问主机数据库之外的内容)| 归档时间: |
|
| 查看次数: |
3283 次 |
| 最近记录: |