由于我们没有实现我们的应用程序的用户在SQL Server用户,当应用程序服务器连接到每个应用程序总是使用相同的凭据附加到每个数据库的数据库。

此提供了一个审计问题。使用触发器,我们想存储每一次更新,插入和删除,并每个属性给特定用户。一个可能的解决方案是“更新的用户”列添加到每个表和更新每次都是这样。这意味着,每次表的新列,并在每一个存储过程的新参数。这也意味着你只能做软删除。

代替此我建议使用连接字符串的应用程序的名称属性,并与触发器内部的APP_NAME()属性阅读本。我用一个简单的应用程序测试这一点,它似乎工作(格式可以为这样:应用= MyApp的|用户= 100)。

为你们的问题是,这是一个坏主意,你有一个更好的?

有帮助吗?

解决方案

我使用 SET CONTEXT_INFO 获得这一点。这正是你需要的。

其他提示

这当然似乎是一个可行的解决方案,但你需要的用户名注入到每一次的连接字符串您的应用程序加载。请注意,这种解决方案可能不会有一个Web应用程序的工作,因为你的连接字符串每次都不同,这可能导致巨大的连接池的问题会。

另一种选择是检索的主机名/ IP地址(SELECT HOST_NAME())和商店,而不是

您不一定需要一个新的参数上的每个存储过程,因为可以修改每个存储过程(或触发)来自动插入APP_NAME /主机名。

有一个潜在的缺点是通过Management Studio中进行任何修改不会有自定义APP_NAME,你会留下“Microsoft管理工作室”作为用户。

我们使用的应用程序名称属性来控制审计触发器和使用它没有看到任何问题,还没有发现任何速度问题(虽然在我们的例子中,我们没有专门审计对于某些应用,所以它很难测量有多少时间没有做的事情发生:))

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top