LCJ*_*LCJ 8 sql-server stored-procedures sql-server-2008-r2
我正在使用SQL Server 2008 R2.我需要列出数据库用户(MYUSER)具有执行权限的所有存储过程.
另外,我需要列出哪些是用户没有EXECUTE权限的存储过程 - 但是可以读取存储过程的脚本
是否有任何SQL语句或帮助函数用于这些目的?
参考:
Rem*_*anu 13
select name,
has_perms_by_name(name, 'OBJECT', 'EXECUTE') as has_execute,
has_perms_by_name(name, 'OBJECT', 'VIEW DEFINITION') as has_view_definition
from sys.procedures
Run Code Online (Sandbox Code Playgroud)
要检查其他用户的权限,请使用以下命令:
use my_db;
EXECUTE AS user = 'my_user'
SELECT SUSER_NAME(), USER_NAME();
select name,
has_perms_by_name(name, 'OBJECT', 'EXECUTE') as has_execute
from sys.procedures
where name = 'myprocname';
revert;
Run Code Online (Sandbox Code Playgroud)
适用于我的SQL Server 2012.
由于缺少权利,knb 的答案对我不起作用。(针对与当前用户不同的用户的解决方案)
无法作为数据库主体执行,因为主体“我的用户”不存在,无法模拟此类主体,或者您没有权限。
此答案显示了如何获取特定数据库用户(“我的用户”)明确授予其 EXECUTE 权限的存储过程列表:
SELECT [name]
FROM sys.objects obj
INNER JOIN sys.database_permissions dp ON dp.major_id = obj.object_id
WHERE obj.[type] = 'P' -- stored procedure
AND dp.permission_name = 'EXECUTE'
AND dp.state IN ('G', 'W') -- GRANT or GRANT WITH GRANT
AND dp.grantee_principal_id =
(SELECT principal_id
FROM sys.database_principals
WHERE [name] = 'my user')
Run Code Online (Sandbox Code Playgroud)
我修改如下以获得我需要的列表:
SELECT [name]
FROM sys.procedures
WHERE [name] NOT IN
(SELECT [name]
FROM sys.objects obj
INNER JOIN sys.database_permissions dp ON dp.major_id = obj.object_id
WHERE obj.[type] = 'P' -- stored procedure
AND dp.permission_name = 'EXECUTE'
AND dp.state IN ('G', 'W') -- GRANT or GRANT WITH GRANT
AND dp.grantee_principal_id =
(SELECT principal_id
FROM sys.database_principals
WHERE [name] = 'my user'))
Run Code Online (Sandbox Code Playgroud)
在 Microsoft SQL Server 2008 R2 上测试
归档时间: |
|
查看次数: |
31965 次 |
最近记录: |