Получить имя хоста при чтении очереди компонента Service Broker (SQL Server 2005) - PullRequest
1 голос
/ 17 марта 2010

Я пытаюсь настроить аудит на моем SQL Server с помощью Service Broker. Я сделал всю конфигурацию, необходимую для захвата событий DDL (очередь, маршруты, конечные точки, уведомления о событиях). Он работает правильно, за исключением того, что я не могу получить имя хоста клиента, откуда произошло событие DDL.

Используя процедуру активации сервисного брокера, я попытался прочитать значение из message_body, но нет элемента xml, который содержит имя хоста. Я вижу значение для SPID, но не могу его использовать. Выполнение sp_who и запрос sys.processes для этого SPID не возвращает никакого значения. И запуск sp_who без параметра показывает только один процесс (я думаю, что это фоновый процесс, используемый сервисным брокером). Это все потому, что сообщение было отправлено асинхронно? Но почему это приведет к тому, что контекст активации будет видеть разные данные в представлении sys.processes?

Мне известно, что существуют триггеры DDL, которые могут достичь той же цели, но, похоже, она тесно связана с командой, которая вызывает ее срабатывание. Поэтому, если триггеры не сработают, команда также не выполнится.

ОБНОВЛЕНИЕ: Мне удалось получить имя хоста, используя комбинацию xp_cmdshell и sqlcmd (приложение командной строки). Но я также понял, что, поскольку сообщение является асинхронным, оно не всегда надежно (SPID, выдавший команду DDL, мог быть отключен уже до того, как сообщение будет прочитано из очереди).

1 Ответ

0 голосов
/ 17 марта 2010

Я не совсем уверен, что вы пытаетесь реализовать здесь, но ожидается, что активированная процедура будет видеть только подмножество строк в DMV. Это связано с контекстом активации, который часто выдает себя за другого пользователя, которого вы используете при отладке процедуры. Этот олицетворенный пользователь будет видеть только эти строки представлений уровня сервера и DMV, для которых у него есть разрешения. См. здесь и здесь для получения дополнительной информации.

...