代码之家  ›  专栏  ›  技术社区  ›  Chris Simpson

SQL Server:为审核目的修改“应用程序名称”属性

  •  12
  • Chris Simpson  · 技术社区  · 16 年前

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

    这是一个审计问题。使用触发器,我们希望存储每个更新、插入和删除,并为每个特定用户赋予属性。一种可能的解决方案是在每个表中添加一个“由用户更新”列,并每次更新。这意味着每个表上都有一个新列,每个存储过程上都有一个新参数。这也意味着您只能进行软删除。

    我建议使用连接字符串的application name属性,并使用触发器内的app_name()属性读取该属性。我用一个简单的应用程序测试了它,它似乎可以工作(格式可以是这样的:app=myapp user=100)。

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

    3 回复  |  直到 12 年前
        1
  •  10
  •   Dave Markle    12 年前

    我用 SET CONTEXT_INFO 为此。这正是你需要的。

        2
  •  2
  •   Jim McLeod    16 年前

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

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

    您不必在每个存储过程上都需要一个新的参数,因为您可以修改每个存储过程(或触发器)以自动插入app_name/hostname。

    一个潜在的缺点是,通过Management Studio执行的任何修改都不会有自定义的应用程序名称,您将保留“Microsoft Management Studio”作为用户。

        3
  •  1
  •   David Wengier    16 年前

    我们使用application name属性来控制审计触发器,使用它时没有发现任何问题,也没有注意到任何速度问题(尽管在我们的例子中,我们专门没有审计某些应用程序,因此很难衡量不做某件事需要多少时间:)