首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SSMS中是否存在SHOWPLAN权限切换

SSMS中是否存在SHOWPLAN权限切换
EN

Database Administration用户
提问于 2017-05-01 16:03:14
回答 1查看 5.6K关注 0票数 1

我正在使用Server 2008 R2。

在SSMS 2016中是否有选项可以切换登录的SHOWPLAN权限(我知道这是在数据库级别上发布的)?

是否有查询来查看除我以外的用户是否具有SHOWPLAN权限?

我知道fn_my_permissions,但我正在寻找类似的东西,可以运行在另一个用户帐户。出于安全原因,我无法使用EXECUTE作为

EN

回答 1

Database Administration用户

发布于 2017-05-01 17:55:10

是否有查询来查看除我以外的用户是否具有SHOWPLAN权限?

在回答这个问题之前,让我们先看看使用SHOWPLAN所需的特权。

您可以通过以下方式授予它:

代码语言:javascript
复制
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特权。这个脚本是从这里修改的。

代码语言:javascript
复制
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'

这是我的测试:

代码语言:javascript
复制
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之上,您将能够在底部窗口“.的权限”中看到安全性的权限(此情况是数据库名)。(首先必须将数据库添加为安全的)。

票数 4
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/172440

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档