Как определить текущего пользователя? - PullRequest
1 голос
/ 10 мая 2010

Можно ли определить текущего пользователя?

Я нашел хранимую процедуру sp_mgGetConnectedUsers. Возвращает набор результатов с единственным уникальным полем «Адрес». Как я могу связать выполняющийся запрос с таким «адресом».

Пожалуйста, совет.

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

Ответы [ 2 ]

3 голосов
/ 11 мая 2010

При использовании словаря данных вы можете использовать скалярную функцию пользователя:

select user() from system.iota;

и сопоставьте это с полем DictionaryUser, возвращаемым из sp_mgGetConnectedUsers.

Если словарь не используется, самый простой способ - использовать sp_SetApplicationID и sp_GetApplicationID. Почему тебе не нравится этот путь? Возможно, вам будет легче помочь, если мы будем знать, какова ваша конечная цель. Если вы просто хотите увидеть пользователя, связанного с запросом, выполните процедуру sp_GetSQLStatements.

2 голосов
/ 11 мая 2010

Есть несколько способов думать о текущем пользователе. Это зависит от того, как вы используете Advantage.

Вывод sp_mgGetConnectedUsers дает следующее:
Имя пользователя - имя компьютера
Пользователь словаря - пользователь, используемый для входа в словарь ADS
Адрес - IP, IPX или IPC адрес
OSUserLoginName - имя для входа в клиентскую ОС
TS Address - IP-адрес конечного пользователя с адресом клиента.
ApplicationID - уникально настраиваемый идентификатор по умолчанию = exe name

Если вы используете словарь, и каждый человек соединяет словарь с уникальным именем, тогда пользователь словаря будет подходить (вы также можете получить это, выбрав «select user () из system.iota» (или) для сценариев SQL). так далее). Address и UserName будут IP-адресом пользователя и именем компьютера пользователя. Это также должно помочь вам однозначно идентифицировать пользователя. Если ваши пользователи заходят через Терминальный сервер, вы можете использовать Адрес TS, чтобы идентифицировать их в сочетании с OSUserLoginName. Я не буду вдаваться в подробности по ApplicationID, так как вы специально заявили, что вам не важно это решение. Но ... Хотя вы можете установить это значение как угодно, по умолчанию используется имя приложения (т.е. ARC.exe)

Часть B вашего вопроса - как связать запрос. Процедура sp_getsqlstatements вернет текущие активные запросы (или вы можете использовать информацию об удаленном сервере в ARC). Это возвращает имя соединения, которое совпадает с именем пользователя из sp_mgGetConnectedUsers. Используя эту комбинацию, вы можете указать имя компьютера, IP-адрес (или адрес терминала), имя пользователя в словаре, имя пользователя ОС клиента и имя приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...