카테고리 없음

전체 프로시저에서 특정 문자열 찾기

vicjung 2011. 9. 22. 20:07

흠. DB 에 있는 오브젝트로 쿼리를 이용해서 찾는 군요 ㅠ.ㅠ

전 그냥 스크립트 전체를 generate해 버려서 그 안에서 찾아버렸는데 ^^;;;

출처:전체 프로시저에서 특정 문자열 찾기

전체 데이터베이스의 각 프로시저에서 원하는 특정 문자열을 찾기 위한 쿼리입니다. 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;'




[실행결과]

1514EF354DA82831346346




[참고자료]
sys.syscomments (Transact-SQL)