我正在使用Server 2008 R2。
在SSMS 2016中是否有选项可以切换登录的SHOWPLAN权限(我知道这是在数据库级别上发布的)?
是否有查询来查看除我以外的用户是否具有SHOWPLAN权限?
我知道fn_my_permissions,但我正在寻找类似的东西,可以运行在另一个用户帐户。出于安全原因,我无法使用EXECUTE作为
发布于 2017-05-01 17:55:10
是否有查询来查看除我以外的用户是否具有SHOWPLAN权限?
在回答这个问题之前,让我们先看看使用SHOWPLAN所需的特权。
您可以通过以下方式授予它:
GRANT SHOWPLAN
TO <database_principal> [ , ...n ]Sysadmin、dbcreator和db_owners角色成员自动获得使用SHOWPLAN的特权。详细信息这里这里。
对于SELECT、INSERT、UPDATE、DELETE、EXEC stored_prodedure和EXEC user_defined_function语句,需要下列权限才能生成显示计划:执行Transact-user_defined_function语句的适当权限。对包含Transact-SQL语句引用的对象的所有数据库(如表、视图等)的SHOWPLAN权限。
现在回答您关于“查询以查看用户(除我以外)是否具有SHOWPLAN权限”的问题?
您需要查找用户是否是这3个角色中任何一个的成员,或者是否显式授予了SHOWPLAN特权。
exec sp_helpuser 'test'将给出用户是其成员的角色列表。对于显式特权,您可以使用它并检查是否显式地处理了SHOWPLAN特权。这个脚本是从这里修改的。
SELECT
USER_NAME(dppriper.grantee_principal_id) AS [UserName],
dppri.type_desc AS principal_type_desc,
dppriper.class_desc,
OBJECT_NAME(dppriper.major_id) AS object_name,
dppriper.permission_name,
dppriper.state_desc AS permission_state_desc
FROM sys.database_permissions dppriper
INNER JOIN sys.database_principals dppri
ON dppriper.grantee_principal_id = dppri.principal_id
WHERE USER_NAME(dppriper.grantee_principal_id) ='TEST'这是我的测试:
USE [master] GO CREATE LOGIN test WITH PASSWORD ='tes545###45454545454t'
GO
USE [WideWorldImporters]
GO
CREATE USER test FOR LOGIN test
GO
GRANT SHOWPLAN TO test现在运行上面的查询,您将看到用户测试的显式SHOWPLAN权限。
一旦您运行在tsql之上,您将能够在底部窗口“.的权限”中看到安全性的权限(此情况是数据库名)。(首先必须将数据库添加为安全的)。

https://dba.stackexchange.com/questions/172440
复制相似问题