#sql #sql_server
Возможно ли в запросе получить имя учетки не той от чего имени выполняется запрос, а той под кем залогинены на ПК? С БД работает ПО от единого прописанного пользователя, на столбец повесил триггер и хочу понимать какой юзер выполняет действия, к исходному коду ПО доступа нет.
Ответы
Ответ 1
Ответ на ваш вопрос - нет. Штатными средствами - никак. Логика такая - сервер, это отдельная изолированная сущность, которая знать не знает ничего о том, кто и под каким именем работает на компьютере. Грубо говоря, для выполнения запросов нужно подключиться к серверу. После подключения вся работа с сервером выполняется от имени того пользователя, который был подключен к серверу. Сам сервер знает имя и пароль этого пользователя, и не более. Для того, что бы сервер смог вам выдать имя пользователя, который у вас залогинен в операционной системе, MS SQL должен уметь опрашивать на этот счет операционную систему. Но зачем это ему? Так что сервер не умеет опрашивать винду и узнавать какой пользователь там залогинен, ибо как это вообще относится к функциям сервера и базам данных? Никак. Но есть один момент, когда для подключению к серверу используется механизм аутентификации Windows. В этом случае система аутентификации Windows и MS-SQL взаимодействуют. В этом случае для авторизации на сервере используются учетные данные Windows. И только в этом случае имя пользователя в Windows и на MS SQL Server совпадают. Но вот уже дальнейшие распределения прав на объекты внутри сервера обеспечиваются самим сервером, вне зависимости от роли учетной записи Windows. Итого, получаем, что варианты у нас крайне ограничены: Подключаться к БД через windows-аутентификацию, тогда имя домена и учетной записи будет передано внутрь сервера. Но это не всегда возможно. Передавать серверу имя домена и пользователя из клиента самостоятельно (нужно подумать, каким именно способом). 2а. Можно попробовать заставлять сервер самостоятельно, каждый раз при подключении пользователя выполнять какой-то внешний инструмент (программу), которая получала бы имя пользователя Windows, подключалась к серверу, и записывала бы в отдельную таблицу имя виндового пользователя, который подключился к серверу. Но п. 2 и 2а сами по себе мне кажутся очень неудобными, громоздкимии кривыми костылями.Ответ 2
Вы можете попытаться определить машину пользователя, с которой пришло подключение SELECT HOST_NAME() AS HostName и таким образом идентифицировать того, кто работает с БД на этой машине. Однако это не всегда будет работать, поскольку хост может определиться, как имя программы, типа "Microsoft Office" и т.п.
Комментариев нет:
Отправить комментарий