Как проверить текущего пользователя активного каталога, используемого SqlClient для SSPI Integrated Security в ASP.NET - PullRequest
0 голосов
/ 02 октября 2019

Краткий вопрос : Как проверить текущего пользователя, который используется подключением SqlClient с интегрированной безопасностью, если пользователь является пользователем домена Active Directory, принудительно введенным с помощью команды "runas" в среде отладки. Все методы .NET, обнаруженные в похожих вопросах, дают неверные результаты.

Длинный вопрос

У меня есть приложение ASP.NET, использующее библиотеку System.Data.SqlClient для подключения кБаза данных SqlServer.

Соединение выполняется через "Integrated Security = SSPI" с пользователями домена Active Directory.

Я запускаю отладку из VisualStudio Community 2017 на моем ПК, который не присоединен к Active Directoryдомена, но я могу подключиться с моим пользователем домена Active Directory к базе данных, запустив VisualStudio с помощью команды «RunAs», например:

C:\Windows\System32\runas.exe /user:<domain>\<user> /netonly "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\devenv.exe"

Таким образом, процесс VisualStudio запускается с пользователем доменана моем ПК (хотя диспетчер задач показывает работающего пользователя как локального пользователя "mariano.paniga"). Это позволяет запускать сеанс отладки IIS Express с тем же пользователем домена, и подключение к базе данных работает нормально.

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

Это команда подключения

SqlConnection sqlConn = new SqlConnection("Initial Catalog = WL; Integrated Security = SSPI; Data Source = <DB_Machine>");

Это способы, которыми я пытался проверить текущего пользователя иих реальные результаты в моей среде отладки:

sb.Append(string.Format("{0} - Started handling insert from user {1}\n", DateTime.Now
, System.Security.Principal.WindowsIdentity.GetCurrent().Name));
sb.Append(string.Format("{0} - Debug HttpContext.Current.User.Identity.Name = {1}\n", DateTime.Now
, HttpContext.Current.User.Identity.Name));
sb.Append(string.Format("{0} - Debug System.Environment.UserName = {1}\n", DateTime.Now
, System.Environment.UserName));
sb.Append(string.Format("{0} - Debug Thread.CurrentPrincipal.Identity.Name = {1}\n", DateTime.Now
, Thread.CurrentPrincipal.Identity.Name));

Результаты:

02/10/2019 10:08:51 - Started handling insert from user <MYPC-NAME>\mariano.paniga
02/10/2019 10:08:51 - Debug HttpContext.Current.User.Identity.Name = 
02/10/2019 10:08:51 - Debug System.Environment.UserName = mariano.paniga
02/10/2019 10:08:51 - Debug Thread.CurrentPrincipal.Identity.Name = 

1 Ответ

1 голос
/ 24 октября 2019

Задумывались ли вы об отправке базы данных

select ORIGINAL_LOGIN()

Чтобы нарочно проверить логин, использованный для установления соединения. (Я предполагаю, что вы просто сделаете это, чтобы помочь вашей отладке в ее текущей среде)

...