1

我们目前为我们的 ASP.Net MVC 应用程序设置了一个 SQL Server 2008 实例,并且 SQL Server 实例使用内置审计(我相信 CDC?)

我们还将我们的 ASP.Net 应用程序设置为使用web.config 中为整个应用程序指定的一个连接字符串,无论谁登录(大约 50 个用户)

问题:我们希望能够在审计信息中包含进行特定更改的用户的用户名。

看起来我们只能通过以下两种方式之一来做到这一点:

  1. 更改我们的应用程序设置,以便每个用户都有自己的数据库登录。这将要求我们使用动态连接字符串(也许不是太糟糕),但此外,向系统添加新用户会很痛苦,并且管理员不能再通过应用程序的界面自动执行此操作(我认为)。
  2. 使用 ASP.Net 应用程序本身的另一个解决方案。这将允许我们在我们希望的应用程序中简单地添加任何信息,但将涉及废弃整个内置解决方案,并且基本上从头开始需要付出巨大的努力。

在进行审计之前一定有人遇到过这个问题——#1 可行吗?或者#2是我们可以去这里的唯一途径吗?

谢谢

4

1 回答 1

1

选项 #1 对管理员来说很痛苦,“动态”连接字符串的代码有点复杂,并且调用 sp_addlogin 来创建用户。但最糟糕的是,每个用户的单独数据库登录也允许他们直接查询数据库(如果他们知道实例和数据库名称,这可能会以任何方式泄漏给他们并通过网络“看到”数据库服务器)。直接访问数据库可能会使每个应用程序崩溃。不要这样做,除非您非常确定用户无法直接访问数据库服务器。

关于#2。如何将“LastModifiedLogin”列添加到每个表中,在每次插入/更新期间将登录用户的登录信息放在其中?这不应该让 CDC 崩溃,你得到了你想要的。但是审计删除问题不大,因为您发出语句并且不再有可以放置登录名的行。您可以组织单独的“DeleteAudit”表,在其中将表名、行标识符和用户登录名放在每次删除时,但这只是粗略的想法。

如果您使用 NHibernate 进行数据访问,我建议您考虑将 CDC 切换到 NHibernate Envers,这是一个非常简洁的解决方案。

于 2012-10-17T20:22:01.417 回答