0

일부 내장 스토어드 프로 시저에서 SQL의 권한을 검사해야합니다. Management Studio에서 사용자 지정 SP에 대한 사용 권한을 볼 수 있지만 System SP에는 사용할 수 없습니다. 또한 Management Studio의 개체 탐색기에서 볼 때 '시스템 저장 프로 시저'에는 표시되지 않는 많은 SP가 있습니다. SQL Management Studio의 특정 위치 또는 특정 SQL 쿼리로 이동할 수 있습니다. 현명한 것은 무엇이든.내장 스토어드 프로 시저 (예 : xp_msver)에서 SQL 권한 검사

질문 : "xp_msver"와 같은 저장 프로 시저에 적용되는 사용 권한을 검사하려면 어떻게해야합니까? 특히 '실행'권한.

P. 당신이 말할 수 없다면 저는 SQL 전문가가 아닙니다. 다행히도 질문은 의미가 있습니다.

답변

1

다음 스크립트를 사용할 수 있습니다.

USE master 
 
SELECT CASE dp.state_desc 
 
\t \t WHEN 'GRANT_WITH_GRANT_OPTION' 
 
\t \t \t THEN 'GRANT' 
 
\t \t ELSE dp.state_desc 
 
\t \t END + ' ' + dp.permission_name + ' ON ' + CASE dp.class 
 
\t \t WHEN 0 
 
\t \t \t THEN 'DATABASE::[' + DB_NAME() + ']' 
 
\t \t WHEN 1 
 
\t \t \t THEN 'OBJECT::[' + SCHEMA_NAME(o.schema_id) + '].[' + o.[name] + ']' 
 
\t \t WHEN 3 
 
\t \t \t THEN 'SCHEMA::[' + SCHEMA_NAME(dp.major_id) + ']' 
 
\t \t END + ' TO [' + USER_NAME(grantee_principal_id) + ']' + CASE dp.state_desc 
 
\t \t WHEN 'GRANT_WITH_GRANT_OPTION' 
 
\t \t \t THEN ' WITH GRANT OPTION;' 
 
\t \t ELSE ';' 
 
\t \t 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 
 
\t -- AND major_id >= 0 
 
\t AND grantee_principal_id <> 1 
 
\t AND o.name = 'xp_msver';

모든 시스템 개체에 대한 권한, 당신은 마지막 줄에 "AND o.name = 'xp_msver'를"주석 수 있습니다 얻으려면. 비 시스템 오브젝트에서만 사용 권한을 얻으려면 "AND major_id> = 0"행의 주석 처리를 제거하십시오.