Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将实际用户名从ASP.Net传递到SQL Server的最佳实践_Asp.net_Sql Server - Fatal编程技术网

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

将实际用户名从ASP.Net传递到SQL Server的最佳实践,asp.net,sql-server,Asp.net,Sql Server,我正在寻找在tSQL中使用实际用户名的最佳实践,同时,我的ASP.Net应用程序使用全局登录登录到SQL Server,在web.config文件的连接字符串中配置 此ASP.Net应用程序是作为SharePoint2007实现的扩展编写的。此应用的数据库是旧数据库,而不是SharePoint数据库 有问题的应用程序需要在审核(shadow)表中记录每次插入、更新和删除,包括日期和时间以及用户名。这是由触发器完成的 触发器使用SYSTEM_用户值,因此全局登录总是写入审核表 系统中大约有2700

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

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

有问题的应用程序需要在审核(shadow)表中记录每次插入、更新和删除,包括日期和时间以及用户名。这是由触发器完成的

触发器使用SYSTEM_用户值,因此全局登录总是写入审核表

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

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

我正考虑下列方案:

  • 使用综合安全;但是,如果权限只能通过应用程序授予,而不能在与其他SQL客户机连接时使用,该怎么办
  • 在每个打开的连接上设置一些全局变量;但在当前代码中,每个请求都会打开许多连接(有时是数百个连接)来处理请求
  • 在存储过程中传递用户名,在每个表中添加一个字段。触发器不仅仅是从表中读取用户名,而不是派生用户名;然而,这需要对数据库对象进行大量修改,可能会产生很多bug

  • 对这些选项或其他选项的任何评论?

    我通常使用上下文信息。与模拟集成的安全性将破坏连接池,将用户名传递给进程感觉完全错误。

    我花了一段时间才理解上下文信息引用了实际的tSQL构造。这看起来是一个很好的解决方案。