Получение логина Windows с сервера - PullRequest
2 голосов
/ 03 марта 2010

Я застрял в этом вопросе на несколько дней - любая помощь очень ценится.

У меня есть триггер SQL, который вызывает DLL, написанную на C #. В этой функции мне требуется имя входа в Windows человека, который создал команду SQL, которая запустила триггер. Неважно, получаю ли я эту информацию из C # или SQL.

К сожалению, большинство нормальных маршрутов не помогло мне.

Встроенная функция SQL NT_CLIENT () работает, только если для входа в SQL используется проверка подлинности Windows.

DLL работает на сервере, и поэтому Environment.UserName не имеет значения, а WindowsIdentity.GetCurrent (). Name возвращает пустую строку, если пользователь базы данных (создатель потока) не использовал аутентификацию Windows.

Я знаю имя домена, IP-адрес и имя рабочей станции. Из этого я понял, как получить SID в C # - могу ли я в любом случае получить имя для входа в Windows из этих битов информации с помощью C # или есть встроенная функция SQL, которую я пропустил?

EDIT: Спасибо, что сообщили мне, что SQL был неудачным решением этой проблемы. У нас есть клиент, который регистрирует всех в БД как один пользователь. В итоге мне пришлось сделать небезопасную сборку, которая вызывает функцию командной строки WMIC. Дрянное решение, но оно сделало свою работу. Еще раз спасибо за советы. :)

Ответы [ 2 ]

1 голос
/ 03 марта 2010

Вы должны передать имя пользователя из кода клиента в качестве параметра. Мы делаем это каждый звонок с нашего клиентского кода (веб-сайтов и услуг).

Однако даже тогда он не доступен в триггере, поэтому я использую CONTEXT_INFO.

Нет магии, нет серебряной пули, прости.

Еще один вариант - взглянуть на делегирование / передачу учетной записи безопасности. Поиск в Google ... есть много хороших вещей, вероятно, лучше, чем одна конкретная ссылка.

Если это невозможно, и вы говорите, что не можете изменить код клиента, то это невозможно сделать. Данные просто недоступны, и намеренно так из-за архитектуры приложения.

0 голосов
/ 03 марта 2010

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

...