Расширение SSMS/addin - получение текущей базы данных и сервера

Я пытаюсь написать SSMS addin для пользовательского требования аудита (необходимо проверить все запросы, выполняемые пользователями в рабочей среде). У меня есть файл .addin, расположенный в соответствующих папках, и он попадает на точки останова в моем методе Connect.Exec, и я могу получить запросы запроса под выбор из активного документа. Однако я не уверен, есть ли какое-либо свойство или метод, который я мог бы найти, чтобы получить имя базы данных и сервер, к которому был подключен пользователь?

2 ответа

Некоторое проскальзывание через codeplex в течение 4 часов, загрузка каждого проекта и анализ кода дали мне ответ, который мне нужен. Я надеюсь, что кому-нибудь это поможет (хотя я согласен с @Mitch, если SQL Server Audit работает для вас, вы должны попробовать это сначала).

Добавьте ссылку на Microsoft.SqlServer.RegSrvrEnum.dll и SqlWorkBench.Interfaces(расположенные где-то на вашем C:\ProgramFiles..\SQL Server.. -). Убедитесь, что вы установили SDK для инструментов. Я тестировал это только для SQL Server Management Studio 2014.

Затем нижеприведенный код должен сделать трюк (ваш прием!)

IScriptFactory scriptFactory = ServiceCache.ScriptFactory;
CurrentlyActiveWndConnectionInfo connectionIfno = scriptFactory.CurrentlyActiveWndConnectionInfo;
UIConnectionInfo conn = connectionIfno.UIConnectionInfo;
Debug.WriteLine("{0}::{1}", conn.ServerName, conn.AdvancedOptions["DATABASE"]);


... необходимо выполнить аудит всех запросов, выполняемых пользователями в рабочей среде

Что то, что SQL Server Audit предназначалось для (SQL Server 2008):

Аудит экземпляра SQL Server Database Engine или отдельная база данных включает в себя отслеживание и протоколирование событий, которые происходят на механизм базы данных. Аудит SQL Server позволяет создавать проверки сервера, который может содержать спецификации аудита сервера для событий уровня сервера, и спецификации аудита базы данных для событий уровня базы данных. Проверенные события могут быть записаны в журналы событий или для проверки файлов.

Любое решение аудита должно выполняться в базе данных, а не в клиентах (по понятным причинам!).

Кроме того, обычные пользователи должны иметь (не более) доступ для чтения к Production через SSMS (через разрешения входа/роли), тем самым гарантируя, что они ничего не могут изменить. Это кажется предпочтительным для регистрации факта после того, как это произошло.

licensed under cc by-sa 3.0 with attribution.