sql-server - 在 Azure SQL 中检索服务器状态数据的权限

标签 sql-server azure-sql-database

我正在尝试在存储过程中运行此查询:

DECLARE @Params NVARCHAR(MAX)
SELECT  @Params = event_info 
FROM    sys.dm_exec_input_buffer(@@SPID, CURRENT_REQUEST_ID())

为了捕获存储过程的执行参数并在必要时打印它们(对于调试非常有用)。因此,对于我的 [dbo] 用户来说,工作得很好,但问题是当 [AppUser] (具有有限权限)尝试执行相同的存储过程时,会出现此错误:

VIEW SERVER PERFORMANCE STATE permission was denied on object 'server', database 'master'.

我尝试在 master 中创建用户并分配给他:

  1. 将 View 数据库状态授予 [AppUser]:不起作用
  2. RANT VIEW SERVER STATE TO [AppUser]:Azure SQL 不支持
  3. ALTER SERVER ROLE ##MS_ServerStateReader## ADD MEMBER [AppUser]:不起作用。

我知道我可以自己打印执行参数或将其记录到例如dbo.traceTable,事实上这就是我所做的,直到我发现这个查询非常简单且更容易使用。

那么,我是否可以向 [AppUser] 分配任何权限,以便有权检索查询数据?

提前致谢!

编辑:

似乎我必须在角色分配后重新登录:ALTER SERVER ROLE ##MS_ServerStateReader## ADD MEMBER [AppUser]才能进行更改。

现在我的问题是初始查询无法与 dapper 正常工作,但这是另一个故事......

最佳答案

我使用管理员身份验证创建了 Azure sql 数据库的登录名,并使用以下代码在 master 数据库中创建了新的登录名:

create login1 with password = '<password>'

我在所需的数据库中创建了一个具有上述登录名的用户,并为该用户分配了角色。

USE [database]
GO
CREATE USER <user> FOR LOGIN <login>
GO
ALTER ROLE db_owner ADD MEMBER <user>
GO

enter image description here

我使用新用户登录数据库并尝试执行以下代码:

DECLARE @Params NVARCHAR(MAX)
SELECT  @Params = event_info 
FROM    sys.dm_exec_input_buffer(@@SPID, CURRENT_REQUEST_ID())

我收到以下错误:

enter image description here

我使用管理员身份验证登录主数据库,并将以下角色添加到新登录

ALTER SERVER ROLE ##MS_ServerStateReader##
  ADD MEMBER login1;  
GO

enter image description here

我通过使用新的登录身份验证连接主数据库而不是我的数据库来查询相同的内容,它成功执行,没有任何错误:

enter image description here

关于sql-server - 在 Azure SQL 中检索服务器状态数据的权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75679803/

相关文章:

azure-sql-database - Azure SQL - 用户登录失败

azure - Windows Azure + SQL - 爱好者网站

sql-server - SQL Server 存储过程 可空参数

sql - 将 Access TRANSFORM/PIVOT 查询转换为 SQL Server

sql - 在 SP 中搜索

.net - Azure 与 SQL 迁移的持续集成

sql-server - 基于 SQL AAD token 的身份验证 - 用户“NT AUTHORITY\ANONYMOUS LOGON”登录失败

sql-server - 用于本地开发的 SQL Server Developer/Standard/Enterprise?

php - 如何在以前的 SQL 查询结果的 SQL 查询中传递 PHP 变量?

azure - 如何向客户公开 SQL Azure 数据库的子集以进行报告?