2010-05-10 7 views
1

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

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

Прошу совета.

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

+0

sp_GetSQLStatements возвращает имя пользователя (вместе с оператором SQL) как часть его нормального вывода. Это то, что вы ищете? Кажется, вы могли бы соотнести это с UserName от sp_mgGetConnectedUsers(). –

+0

Я вижу, что это уже то, что предложил JD. Я слепой. –

ответ

3

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

select user() from system.iota; 

и соотносить, что с полем DictionaryUser вернулся из sp_mgGetConnectedUsers.

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

+0

Да, ты прав Джереми. Мое описание было не совсем описательным, извините. Все, что мне нужно, это знать, кто вызвал мой СП. И зависит от пользователя, какое должно быть поведение. Итак, ваше решение со скалярной функцией USER() - именно то, что мне нужно. Спасибо. –

2

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

Выход sp_mgGetConnectedUsers дает следующее:
UserName - Имя компьютера
словарь пользователя - User используется для входа в Словаре ADS
адрес - IP, IPX или IPC адрес
OSUserLoginName - Клиент OS регистрационное имя
TS-адрес - IP-адрес конечного пользователя адреса клиента
ApplicationID - Уникально setable ID по умолчанию = имя ехе

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

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

Смежные вопросы