Страницы

Поиск по вопросам

воскресенье, 16 февраля 2020 г.

Как получить имя доменой учетной записи в MS SQL

#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" и т.п.

Комментариев нет:

Отправить комментарий