将实际用户名从ASP.Net传递到SQL Server的最佳实践

时间:2011-10-28 13:48:26

标签: asp.net sql-server

我正在寻找使用tSQL中实际用户名的最佳实践,同时,我的ASP.Net应用程序使用全局登录登录到SQL Server,并在web.config文件的连接字符串中配置。

此ASP.Net应用程序是作为SharePoint2007实现的扩展编写的。适用的数据库是旧数据库,而不是SharePoint数据库。

有问题的应用程序需要记录审计(影子)表中的每个插入,更新和删除,包括日期和时间以及用户名。这是通过触发器完成的。

触发器使用SYSTEM_USER值,因此全局登录始终写入审计表。

系统中有大约2700个存储过程,我猜其中有一半存在执行DML语句。

更改应用程序以便记录实际用户名的最佳方法是什么?我的ASP.Net应用程序知道用户名。事实上,我的所有用户都使用Active Directory帐户登录ASP.Net应用程序。

我正在考虑以下选项:

  1. 使用集成安全性;但是应该只通过应用程序授予权限,而不是在与其他SQL客户端连接时使用的权限呢?
  2. 在每个打开的连接上设置一些全局变量;但在当前代码中,每个请求都会打开许多​​连接,有时会有数百个连接来处理请求。
  3. 在存储过程中传递用户名,向每个表添加一个字段。触发器不仅仅是从表中读取用户名而不是从中获取它;但是,这需要对数据库对象进行大量修改,否则可能会产生大量错误。
  4. 对这些选项或可能考虑的其他选项有何评论?

1 个答案:

答案 0 :(得分:2)

我通常使用上下文信息。带模拟的集成安全性会破坏连接池并将用户名传递给procs只是感觉完全错误。