Получение имени исполняемого файла приложения из хранимой процедуры T-SQL - PullRequest
0 голосов
/ 22 мая 2009

Можно ли из хранимой процедуры в SQL Server получить имя исполняемого файла (например, MyApp.exe), которому принадлежит соединение? Я знаю, что есть APP_NAME (), но, похоже, он просто возвращает любую строку, переданную в параметр «Имя приложения» в строке подключения.

Если это возможно, как это можно сделать? Спасибо.

Ответы [ 6 ]

4 голосов
/ 22 мая 2009

Если вы не измените свою хранимую процедуру для передачи имени приложения, вы застряли с результатами APP_NAME (). Надеемся, что разработчики помещают туда значимые значения, а не просто принимают значение по умолчанию, которое обычно указывает на инструмент разработки, используемый для сборки приложения.

Надеюсь, это поможет,

Bill

2 голосов
/ 22 мая 2009

К сожалению, я не знаю ничего подобного - помните, что соединение происходит с совершенно другой машины, скорее всего.

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

1 голос
/ 27 мая 2009

Вы можете получить компьютер и информацию из строки подключения, но это в основном все.

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

0 голосов
/ 16 мая 2011

Вы также можете получить идентификатор процесса на клиентском компьютере, поэтому, если у вас был какой-то волшебный способ сопоставить это с именем процесса, вы могли бы это сделать.

0 голосов
/ 10 июля 2009

Я понимаю, что это не совсем то, что вы ищете. Но вы можете определить немного стека вызовов, используя DBCC INPUTBUFFER. Если вы поместите подобную логику в процедуру магазина и войдите в нее где-нибудь, вы можете получить некоторую информацию о вызывающем абоненте.

            CREATE TABLE #dbc
                (
                  EventType VARCHAR(15),
                  Parameters INT,
                  EventInfo VARCHAR(255)
                )
              DECLARE @execStr VARCHAR(500)
              SET @ExecStr = 'DBCC INPUTBUFFER(' + STR(@@SPID) + ')'



              INSERT    INTO #dbc
                        EXEC ( @execStr
                            )

              SELECT    *
              FROM      #dbc
0 голосов
/ 27 мая 2009

Oracle может дать вам имя exe, но SQL Server не может - другая архитектура.

...