Nganku Junior Ответов: 2

Как получить текущего вошедшего пользователя в C# с базой данных MSSQL


Всем привет! У меня тут ситуация. Мне нужно быть в состоянии определить, кто подключается к программному обеспечению с базовым сервером MSSQL. таким образом, я могу отслеживать, кто вошел в программное обеспечение на основе каждого имени пользователя.

Что я уже пробовал:

поэтому я использовал коды:
System.Security.Principal.WindowsIdentity.GetCurrent().Name
но это вернуло имя пользователя базы данных, а не имя пользователя, вошедшего в программное обеспечение.
Затем я попробовал:
Environment.UserName
но при этом выбирается имя пользователя, вошедшего в операционную систему.

Идея заключается в том, что при запуске программного обеспечения пользователь должен войти в систему. Мне нужно иметь возможность получить имя пользователя этого пользователя и, возможно, метки времени входа и выхода из системы.

для меток времени, которые я использую
GetTimestamp(DateTime.Now)

[no name]

"пользователь должен войти в систему", если ваше программное обеспечение запущено, вы уже знаете эту информацию. Так в чем же опять вопрос?

Dave Kreskowiak

Ваш вопрос не имеет особого смысла. Является ли этот код C# написанным в пользовательской функции SQL Server, хранимой процедуре или триггере, или он только в коде приложения?

Обычно для доступа к базе данных используется выделенная учетная запись пользователя, а не учетная запись пользователя, запускающего приложение на рабочей станции. В этом случае к SQL Server каждый доступ к базе данных осуществляется от одного и того же "человека".

Nganku Junior

вопрос в том, как получить эту информацию (имя пользователя) даже после входа в систему. Так что я могу определить кто что и когда сделал

[no name]

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

Nganku Junior

Я создал базу данных для программного обеспечения, чтобы хранить в ней информацию. Учетные записи пользователей также были созданы и сохранены в некоторой таблице в базе данных, связанной с программным обеспечением.таким образом, эти учетные записи пользователей являются единственными, способными пройти аутентификацию по процедуре входа в систему, а затем получить доступ к программному обеспечению. Я хочу знать, как отслеживать, кто вошел в систему, когда и, возможно, прошел какую транзакцию...

2 Ответов

Рейтинг:
2

#realJSOP

Это даст вам имя текущего пользователя базы данных. Если вы используете Windows login, это будет имя текущего пользователя windows. Если вы используете логин базы данных, то это будет имя пользователя БД, который вошел в базу данных.

SELECT CURRENT_USER;


Рейтинг:
19

OriginalGriff

Различные комментарии говорят о том, что ваш код C# знает, кто вошел в систему, потому что он отвечает за процесс входа в систему для этого программного обеспечения.
SQL не знает, "кто вошел" в определенную часть программного обеспечения или даже в конкретный компьютер, потому что это серверная система, а это означает, что код, который фактически обращается к базе данных и обслуживает данные обратно в ваше приложение, обычно находится на другом компьютере (и даже не работает как "вошедший пользователь" для этой системы, он работает под специальной учетной записью пользователя, созданной специально для самого приложения MsSql).

Поэтому, когда ваше приложение запустится, войдите в систему и помните, каким пользователем он был.
Затем вы можете передать эту информацию SQL либо в виде временной метки"вход"/" выход", либо непосредственно в виде журнала действий пользователя. Но SQL не может этого сделать, если вы не создадите отдельную учетную запись пользователя в SQL для каждого пользователя вы входите в свою систему - что, вероятно, не очень хорошая идея в системе с большим количеством пользователей!


Nganku Junior

Спасибо за ваше приземленное объяснение. У меня уже есть решение, не очень далекое от того, что вы советуете. На самом деле я создал три строки подключения, которые открыл непосредственно перед использованием и закрыл сразу после. Один обрабатывает логин, другой обрабатывает "штамп входа пользователя", а третий обрабатывает "штамп выхода пользователя".

Спасибо снова

OriginalGriff

Пожалуйста!