- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们的 Intranet 上运行着一个 .NET 4 Web 应用程序。当用户启动应用程序时,系统会检查用户的 Windows 凭据,以确保用户是正确的 Active Directory 组的成员。如果一切顺利,用户将被发送到我们的应用程序页面,他们可以开始工作。
Web 应用程序通过通用服务帐户(作为通用用户执行操作的能力有限的帐户)连接到数据库。系统运行良好。用户编辑被记录。
问题是正在记录的用户名。记录的用户名是服务帐户的名称,而不是用户的名称。正如您可以想象的那样,这使得审计变得毫无用处。是的,我们可以知道进行了更改、何时进行了更改,甚至更改了什么,但我们无法知道是谁进行了更改。
一些背景 - 这个项目是几年前开始的,当时是基于 SQL Server 2005 构建的。当时,首席开发人员得出结论,不可能将 Windows 用户名传递到数据库并使其记录到日志中用户名正确。当我们迁移到 SQL Server 2008 时,我们决定“接受它”并重新评估。
所以,我们现在使用的是 SQL Server 2008,我正在重新评估。首席开发人员已不在。
如何继续使用我的服务帐户但记录 Windows 帐户名称?我们不想为每个用户创建 SQL 帐户。
更新 1 - 我遗漏了一个关键细节。我们生成的所有更改日志都是基于触发器的。每当发生更改时,数据库都会通过触发器生成审核记录,而不是通过 Web 应用程序中的 SQL 代码。
最佳答案
您需要通过 Intranet 上的代码来完成此操作。由于 ASP.Net 在其自己的 w3worker 进程上下文中运行,因此它将始终显示为 SQL Server 的该帐户。
使用 Page.User.Identity.Name 或更完整的 System.Web.HttpContext.Current.User.Identity.Name。
Get the username of the user accessing ASP.NET intranet page within local network
关于asp.net - 如何将 Windows 用户(而不是服务帐户)登录到数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9082358/
我是一名优秀的程序员,十分优秀!