2007~2011/SQL Server2011. 4. 16. 00:01
전체 데이터베이스의 각 프로시저에서 원하는 특정 문자열을 찾기 위한 쿼리입니다. xp_cmdshell 확장 프로시저가 포함된 저장 프로시저를 찾기 위해서 아래와 같이 테스트를 하였습니다. 


다음은 SysComments 를 사용하여 지정된 문자열을 찾는 방법입니다.

전체 데이터베이스에 포함된 각각의 프로시저에 포함된 특정 문자열을 찾기 위해 SysComments 의 Text 열에 저장되어 있는 원본 SQL 정의 문을 비교하여 찾는 방법입니다.
 

EXEC sp_MSForEachDB 'Use [?]; 
SELECT       DISTINCT DB_NAME() AS [DATABASE NAME], A.NAME
FROM         dbo.SysObjects A JOIN dbo.SysComments B ON A.ID = B.ID
WHERE        A.TYPE = ''P'' AND B.TEXT LIKE ''%xp_cmdshell%''
ORDER BY     A.NAME;'



sys.syscomments 가 추후 없어질 것을 대비해서 sys.all_sql_modules 를 사용해 확인할 수도 있습니다.

EXEC sp_MSForEachDB 'Use [?]; 
SELECT DISTINCT DB_NAME(), o.name FROM sys.sysobjects o
JOIN sys.all_sql_modules m ON o.id = m.object_id

WHERE o.type = ''P'' AND m.definition LIKE ''%xp_cmdshell%''
ORDER BY o.name;'




[실행결과]




[참고자료]
sys.syscomments (Transact-SQL)
작성자 : Lai Go / 작성일자 : 2011.04.15
Posted by Lai Go