SQL Server:修改“应用程序名称”属性以进行审计

时间:2008-11-27 11:09:52

标签: sql-server triggers connection-string audit

由于我们没有将应用程序的用户实现为SQL Server中的用户,因此当应用程序服务器连接到数据库时,每个应用程序始终使用相同的凭据附加到每个数据库。

这提出了审计问题。使用触发器,我们希望存储每个更新,插入和删除以及将每个更新属于特定用户。一种可能的解决方案是向每个表添加“按用户更新”列,并每次更新。这意味着每个表上都有一个新列,每个存储过程都有一个新参数。这也意味着你只能进行软删除。

而不是这个我建议使用连接字符串的Application Name属性并使用触发器内的App_Name()属性读取它。我用一个简单的应用程序测试了它,它似乎工作(格式可能如此:App = MyApp | User = 100)。

对你们这个问题是,这是一个坏主意,你有更好的想法吗?

3 个答案:

答案 0 :(得分:10)

我使用SET CONTEXT_INFO。这正是你所需要的。

答案 1 :(得分:2)

这看起来似乎是一个可行的解决方案,尽管每次应用程序加载时都需要将用户名注入连接字符串。请注意,此解决方案可能不适用于Web应用程序,因为每次连接字符串都不同,这可能会导致巨大的连接池问题。

另一种选择是检索主机名/ IP地址(SELECT host_name())并存储它。

您不一定需要在每个存储过程上使用新参数,因为您可以修改每个存储过程(或触发器)以自动插入App_Name / Hostname。

一个潜在的缺点是,通过Management Studio执行的任何修改都不会具有自定义App_Name,您将被留下“Microsoft Management Studio”作为用户。

答案 2 :(得分:1)

我们使用Application Name属性来控制审计触发器并且没有看到任何使用它的问题,并且没有注意到任何速度问题(尽管在我们的例子中,我们特别没有审计某些应用程序,因此很难衡量不做某事的时间:))