【问题标题】:Inspect SQL permissions on built-in stored procedures (e.g. xp_msver)检查内置存储过程的 SQL 权限(例如 xp_msver)
【发布时间】:2017-09-17 17:00:48
【问题描述】:

我需要检查一些内置存储过程的 SQL 权限。在 Management Studio 中,我看到了自定义 SP 的权限,但没有看到系统 SP。此外,从 Management Studio 的对象资源管理器中查看的“系统存储过程”中未显示许多 SP。我可以导航到 SQL Management Studio 中的特定位置,也可以导航到特定的 SQL 查询;什么是明智的。

问题:如何检查应用于“xp_msver”等存储过程的权限?特别是“执行”权限。

附: - 如果你看不出来,我不是 SQL 专家。希望这个问题有意义。

【问题讨论】:

    标签: sql-server sql-server-2008 security stored-procedures database-permissions


    【解决方案1】:

    您可以使用以下脚本。

    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” 行。

    【讨论】:

      猜你喜欢
      • 2021-10-26
      • 1970-01-01
      • 2011-09-22
      • 1970-01-01
      • 1970-01-01
      • 2012-06-02
      • 2012-04-22
      • 2010-11-28
      • 2013-06-10
      相关资源
      最近更新 更多