0

我想知道是否有人可以指出我正确的方向。我们目前正在寻求更新一个使用 SQL Server 2005 作为其数据库的 ASP.NET 应用程序。我们需要提供强大且一致的功能,以防止某些用户从数据库中创建、更新、删除某些记录。

不幸的是,该应用程序不是使用 OO 概念编写的,而是支持直接从文件后面的网页代码调用的许多数据访问存储过程。由于存储过程的数量庞大,我们更愿意研究数据库触发器来实现我们的安全性。

问题是; db 触发器是否有可能知道执行 sp 的特定应用程序用户(使用 db 中的自定义用户帐户表进行管理)?我们只需要一个id。用于连接到数据库的连接字符串对于所有用户都是相同的(取自 web.config),有没有办法连接到一些如何模拟用户或设置触发器可访问的特定变量?

4

1 回答 1

1

如果应用程序使用 SqlConnection 来“登录”用户,然后使用相同的 SqlConnection 执行数据访问/更新,那么您可以使用 CONTEXT_INFO(). 在“登录”过程中设置上下文,然后在数据访问/更新过程中检查它。请参阅使用会话上下文信息

但是,如果应用程序使用 SqlConnection 来“登录”,缓存结果(可能在 cookie 中或在 ASP 会话状态中),然后使用不同的 SqlConnection 访问数据,那么就无法访问所需的登录信息 w/o应用支持。如果您可以找到创建 SqlConnection 对象的所有位置并将其重构为使用工厂模式,那么您可以通过调用来增加每个打开的连接以设置上下文信息,然后再将其返回给调用者以供使用,这也可以使用最小的应用程序更改。

于 2012-10-22T21:01:27.897 回答