如何在 ASP.NET 中检查 SqlClient 用于 SSPI 集成安全的当前活动目录用户

How to check current active directory user used by SqlClient for SSPI Integrated Security in ASP.NET

小问题:当用户是Active Directory域用户强制通过"runas"命令时,如何检查集成安全SqlClient连接使用的当前用户调试环境。在类似问题中发现的所有 .NET 方法都报告不正确的结果。

长问题

我有一个 ASP.NET 应用程序使用 System.Data.SqlClient 库连接到 SqlServer 数据库。

通过 "Integrated Security = SSPI" 与 Active Directory 域用户进行连接。

我 运行 在我未加入 Active Directory 域的 PC 上从 VisualStudio Community 2017 进行调试,但我可以通过 [=45= 将我的 Active Directory 域用户连接到数据库]通过 "RunAs" 命令像这样使用 VisualStudio:

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

以这种方式,VisualStudio 进程 运行s 与我 PC 上的域用户(尽管任务管理器将 运行ning 用户显示为本地 "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 = 

有没有想过发数据库

select ORIGINAL_LOGIN()

故意检查用于启动连接的登录名。 (我假设您这样做只是为了帮助您在当前环境中进行调试)