[47편] 차단된 SQL 실행을 알림으로 받아봤다
2026년 11월 13일
앞선 실습에서 권한 없는 SQL이 차단되는 것은 확인했다. 운영하는 입장에서는 그다음도 궁금했다. 누군가 권한 밖의 작업을 시도했을 때, 담당자가 감사 화면을 열어보지 않아도 알 수 있을까?
이번에는 QueryPie의 Alerts로 차단된 SQL 실행을 알림으로 받아봤다. 조회만 허용된 계정으로 UPDATE를 실행하고, 그때 도착한 메시지를 감사 기록과 비교했다. SQL을 막는 것에서 담당자에게 상황을 전달하는 것까지 연결되는 모습을 볼 수 있었다.
알림을 받을 곳부터 연결했다
General의 Channels에서 HTTP 채널을 하나 만들었다. 이번 실습에서는 맥 안에 간단한 HTTP 수신함을 띄우고 그 주소를 등록했다. 아래 수신함 화면은 QueryPie가 실제 전송한 내용을 보여주기 위해 만든 실습용 화면이다.
Body Template은 기본값인 {{message}}를 사용했다. Alerts에서 작성한 메시지가 이 채널을 통해 전달되도록 구성했다.

이번 DB에서 차단된 SQL만 받도록 정했다
Alerts에서 알림 유형을 Prevented SQL Execution으로 선택했다. 대상은 이전에 만든 실습 연결인 DB Privilege Account Lab 하나로 지정했다. 특정 DB에서 발생한 권한 밖 실행 시도에만 집중할 수 있는 설정이었다.
메시지에는 사용자 이름, DB 연결, 실행 시각, SQL 유형과 원문을 넣었다. 화면에서 제공하는 템플릿 변수를 사용하니 실제 이벤트가 발생했을 때 그 값이 채워지는 방식이었다. 알림을 받은 사람이 바로 상황을 파악할 수 있도록 필요한 정보를 골라 넣었다.

조회는 되고, 변경은 차단됐다
테스트 사용자에게는 해당 연결의 Read-Only 권한만 부여했다. 먼저 주문 41001번을 조회했다. 상태는 READY, 금액은 25,000원으로 정상 조회됐다.

같은 연결에서 상태를 EP47_BLOCKED로 바꾸는 UPDATE를 실행했다. 이번에는 No permission to execute UPDATE statement라는 안내가 나왔다. 조회 권한으로 접속했으므로 데이터 변경은 QueryPie에서 차단됐다.

다시 조회하니 주문 상태는 READY 그대로였다. 서버의 실제 데이터도 같은 값이었다. 업무에 필요한 조회는 계속할 수 있었고, 허용하지 않은 변경은 반영되지 않았다.

차단된 그 SQL이 알림으로 도착했다
수신함을 열어보니 알림 한 건이 와 있었다. 정상 조회 두 번 사이에 실행한 UPDATE가 대상이었다. 메시지에는 Demo Developer, DB Privilege Account Lab, 실제 DB 계정과 실행한 UPDATE 원문이 들어 있었다.

실행 시각은 13시 28분 31초였고 수신함에도 같은 초에 도착한 것으로 표시됐다. 이 실습에서는 별도 테스트 메시지를 보내지 않았다. 실제 SQL 차단으로 발생한 알림이었다.
사용자와 SQL 원문을 함께 볼 수 있다는 점이 유용했다. 단순히 “오류가 발생했다”는 통지만 받는 것보다 어떤 연결에서 누가 어떤 작업을 하려 했는지 훨씬 빨리 파악할 수 있었다.
발송 결과와 감사 기록까지 이어서 봤다
QueryPie 알림 상세의 Logs에서도 발송 결과를 확인했다. 수신처의 응답은 ok, 발송 상태는 Success였고 시각은 13시 28분 31초였다. 알림을 설정해두는 것뿐 아니라 실제 전달 결과까지 확인할 수 있었다.

Query Audit에서는 같은 시각의 UPDATE 기록을 열었다. 사용자는 Demo Developer, 적용 권한은 Read-Only였다. 앞뒤 SELECT는 Success였고, UPDATE는 Failure와 Prevented로 기록돼 있었다.

상세 화면 아래에는 알림으로 받은 SQL과 동일한 원문, UPDATE 실행 권한이 없다는 오류가 남아 있었다. 수신 메시지에서 확인한 작업을 감사 화면에서도 그대로 따라갈 수 있었다.

이번 실습에서는 조회를 허용하면서 변경을 막고, 그 변경 시도를 알림으로 전달하는 데까지 이어졌다. 담당자가 모든 감사 기록을 계속 들여다보지 않아도 필요한 사건을 먼저 받아볼 수 있다는 점이 좋았다. 도입 담당자에게는 접근 통제와 운영 중 확인 업무를 함께 줄여주는 기능으로 보였다.
![[46편] 서버 계정 비밀번호를 QueryPie에서 바꿔봤다](/assets/content/acp-lab-notes/password-provisioning/01.webp)
![[48편] 외부 유지보수 담당자에게 필요한 작업만 맡겨봤다](/assets/content/acp-lab-notes/external-maintenance-access/01.webp)