检查内置存储过程的 SQL 权限(例如 xp_msver)
Inspect SQL permissions on built-in stored procedures (e.g. xp_msver)
我需要检查 SQL 中某些内置存储过程的权限。在 Management Studio 中,我看到了自定义 SP 的权限,但看不到系统 SP 的权限。此外,从 Management Studio 的对象资源管理器查看,'System Stored Procedures' 中未显示许多 SP。我可以导航到 SQL Management Studio 中的特定位置,或者特定的 SQL 查询;什么是明智的。
问题:如何检查应用到存储过程的权限,例如 "xp_msver"?特别是 'Execute' 权限。
P.S。 - 如果你看不出来,我就不是 SQL 大师。希望这个问题是有道理的。
您可以使用以下脚本。
USE master
SELECT CASE dp.state_desc
WHEN 'GRANT_WITH_GRANT_OPTION'
THEN 'GRANT'
ELSE dp.state_desc
END + ' ' + dp.permission_name + ' ON ' + CASE dp.class
WHEN 0
THEN 'DATABASE::[' + DB_NAME() + ']'
WHEN 1
THEN 'OBJECT::[' + SCHEMA_NAME(o.schema_id) + '].[' + o.[name] + ']'
WHEN 3
THEN 'SCHEMA::[' + SCHEMA_NAME(dp.major_id) + ']'
END + ' TO [' + USER_NAME(grantee_principal_id) + ']' + CASE dp.state_desc
WHEN 'GRANT_WITH_GRANT_OPTION'
THEN ' WITH GRANT OPTION;'
ELSE ';'
END + CHAR(10) + 'GO' COLLATE DATABASE_DEFAULT
FROM sys.database_permissions dp
LEFT JOIN sys.all_objects o ON dp.major_id = o.OBJECT_ID
WHERE dp.class < 4
-- AND major_id >= 0
AND grantee_principal_id <> 1
AND o.name = 'xp_msver';
要获取所有系统对象的权限,您可以注释掉最后一行"AND o.name = 'xp_msver'"。要仅获取非系统对象的权限,请取消注释 "AND major_id >= 0 " 行。
我需要检查 SQL 中某些内置存储过程的权限。在 Management Studio 中,我看到了自定义 SP 的权限,但看不到系统 SP 的权限。此外,从 Management Studio 的对象资源管理器查看,'System Stored Procedures' 中未显示许多 SP。我可以导航到 SQL Management Studio 中的特定位置,或者特定的 SQL 查询;什么是明智的。
问题:如何检查应用到存储过程的权限,例如 "xp_msver"?特别是 'Execute' 权限。
P.S。 - 如果你看不出来,我就不是 SQL 大师。希望这个问题是有道理的。
您可以使用以下脚本。
USE master
SELECT CASE dp.state_desc
WHEN 'GRANT_WITH_GRANT_OPTION'
THEN 'GRANT'
ELSE dp.state_desc
END + ' ' + dp.permission_name + ' ON ' + CASE dp.class
WHEN 0
THEN 'DATABASE::[' + DB_NAME() + ']'
WHEN 1
THEN 'OBJECT::[' + SCHEMA_NAME(o.schema_id) + '].[' + o.[name] + ']'
WHEN 3
THEN 'SCHEMA::[' + SCHEMA_NAME(dp.major_id) + ']'
END + ' TO [' + USER_NAME(grantee_principal_id) + ']' + CASE dp.state_desc
WHEN 'GRANT_WITH_GRANT_OPTION'
THEN ' WITH GRANT OPTION;'
ELSE ';'
END + CHAR(10) + 'GO' COLLATE DATABASE_DEFAULT
FROM sys.database_permissions dp
LEFT JOIN sys.all_objects o ON dp.major_id = o.OBJECT_ID
WHERE dp.class < 4
-- AND major_id >= 0
AND grantee_principal_id <> 1
AND o.name = 'xp_msver';
要获取所有系统对象的权限,您可以注释掉最后一行"AND o.name = 'xp_msver'"。要仅获取非系统对象的权限,请取消注释 "AND major_id >= 0 " 行。