Service Broker를 사용하여 SQL Server에서 감사를 구성하려고합니다. DDL 이벤트 (큐, 라우트, 엔드 포인트, 이벤트 통지)를 캡처하는 데 필요한 모든 구성을 수행했습니다. DDL 이벤트의 출처에서 클라이언트의 호스트 이름을 가져올 수 없다는 점을 제외하면 올바르게 작동합니다.Service Broker 큐를 읽을 때 호스트 이름 가져 오기 (SQL Server 2005)
서비스 브로커의 활성화 절차를 사용하여 message_body에서 값을 읽으려고했으나 호스트 이름이 포함 된 xml 요소가 없습니다. SPID 값을 볼 수는 있지만 사용할 수는 없습니다. sp_who를 실행하고이 SPID에 대해 sys.processes를 쿼리해도 값이 반환되지 않습니다. 그리고 매개 변수없이 sp_who를 실행하면 프로세스가 하나만 표시됩니다 (서비스 브로커가 사용하는 백그라운드 프로세스라고 생각합니다). 메시지가 비동기 적으로 전송 되었기 때문에 모두입니까? 그런데 왜 활성화 컨텍스트가 sys.processes 뷰에서 다른 데이터를 볼 수 있습니까?
동일한 목표를 달성 할 수있는 DDL 트리거가 있음을 알고 있지만 해당 명령이 실행되는 것과 밀접하게 결합 된 것 같습니다. 따라서 트리거가 실패하면 명령도 실패합니다.
업데이트 : xp_cmdshell과 sqlcmd (명령 줄 앱)의 조합을 사용하여 호스트 이름을 검색 할 수있었습니다. 그러나 메시지가 비동기 적이기 때문에 메시지가 항상 대기열에서 읽히기 전에 DDL 명령을 발행 한 SPID가 이미 연결이 끊어져있을 수도 있습니다.
내 질문을 읽을 때 이벤트 알림 메시지가 다른 SQL 서버에서 온 것일 수 있으므로 호스트 이름을 확인하기 위해 SPID를 사용한다면 그 서버를 사용하여 해결해야합니다. – Darnell