由于我们没有将应用程序的用户实现为 SQL 服务器中的用户,因此当应用程序服务器连接到数据库时,每个应用程序始终使用相同的凭据来附加到每个数据库。
这提出了一个审计问题。使用触发器,我们希望存储每个更新、插入和删除,并将每个更新、插入和删除都归因于特定用户。一种可能的解决方案是向每个表添加一个“由用户更新”列,并每次都更新它。这意味着每个表上都有一个新列,每个存储过程上都有一个新参数。这也意味着您只能进行软删除。
相反,我建议使用连接字符串的应用程序名称属性并使用触发器内的 App_Name() 属性读取它。我用一个简单的应用程序对此进行了测试,它似乎可以工作(格式可以是:App=MyApp|User=100)。
你们的问题是,这是一个坏主意吗?你们有更好的主意吗?