SQL Server 2008 정책(Policies) 기능을 이용하여 저장 프로시저 이름 명명 조건을 부여하는 방법에 대해서 아래와 같이 정리하였습니다.
[시나리오]
LAIGO 데이터베이스에서 저장 프로시저를 생성할 때, 이름을 'usp_' 형식으로 지정하지 않을 경우 트랜잭션 롤백 정책
[설정방법]
1. SSMS - Management - 정책 관리 - Conditions - New Condition
2. 새 조건 만들기
가. Name : 저장 프로시저 이름
나. Facet : Stored Procedure
다. Expression : @Name / LIKE / 'usp_%'
3. 다시 하나 더 '새 조건 만들기'
가. Name : 대상 데이터베이스
나. Facet : Database
다. Expression : @Name / = / 'LAIGO'
\
4. SSMS - Management - 정책 관리 - Policies - New Policy
5. 새 정책 만들기
가. Name : 저장 프로시저 이름 규칙
나. Check condition : 저장 프로시저 이름
다. Against targets : Every StoredProcedure in 대상 데이터베이스 Database
6. 정책 활성화
[결과확인]
LAIGO 데이터베이스에서 저장 프로시저 이름을 정책에 맞지 않게 get_Version 으로 생성할 경우 아래와 같이 트리거가 발생하여 트랜잭션이 롤백됩니다.
[시나리오]
LAIGO 데이터베이스에서 저장 프로시저를 생성할 때, 이름을 'usp_' 형식으로 지정하지 않을 경우 트랜잭션 롤백 정책
[설정방법]
1. SSMS - Management - 정책 관리 - Conditions - New Condition
2. 새 조건 만들기
가. Name : 저장 프로시저 이름
나. Facet : Stored Procedure
다. Expression : @Name / LIKE / 'usp_%'
3. 다시 하나 더 '새 조건 만들기'
가. Name : 대상 데이터베이스
나. Facet : Database
다. Expression : @Name / = / 'LAIGO'
\
4. SSMS - Management - 정책 관리 - Policies - New Policy
5. 새 정책 만들기
가. Name : 저장 프로시저 이름 규칙
나. Check condition : 저장 프로시저 이름
다. Against targets : Every StoredProcedure in 대상 데이터베이스 Database
6. 정책 활성화
[결과확인]
LAIGO 데이터베이스에서 저장 프로시저 이름을 정책에 맞지 않게 get_Version 으로 생성할 경우 아래와 같이 트리거가 발생하여 트랜잭션이 롤백됩니다.
USE LAIGO
GO
CREATE PROC get_Version
AS
select @@version
GO
[수행결과]
Policy '저장프로시저이름규칙' has been violated by 'SQLSERVER:\SQL\LAIGO-PC\DEFAULT\Databases\LAIGO\StoredProcedures\dbo.get_Version'.
This transaction will be rolled back.
Policy condition: '@Name LIKE 'usp_%''
Policy description: ''
Additional help: '' : ''
Statement: 'CREATE PROC get_Version
AS
select @@version
'.
Msg 3609, Level 16, State 1, Procedure sp_syspolicy_dispatch_event, Line 65
트리거가발생하여트랜잭션이종료되었습니다. 일괄처리가중단되었습니다.
해당 정책의 View History 메뉴를 사용하면 정책 적용 성공/실패 기록을 조회할 수 있습니다.
[참고자료]
SQL Server 2008 Policy-Based Management
http://msdn.microsoft.com/en-us/library/dd938891.aspx
작성자 : Lai Go / 작성일자 : 2009.12.23