【问题标题】:DDL trigger to get username in SQL Server在 SQL Server 中获取用户名的 DDL 触发器
【发布时间】:2016-08-26 11:48:37
【问题描述】:

我的一位客户提出了“谁做了什么到哪个表和时间”的要求。系统简要说明如下:

  • 没有软件源代码
  • 软件不跟踪事件
  • 所有用户在“sa”登录下使用应用程序
  • 数据库中有一个登录表,用于在应用程序启动期间验证用户凭据
  • SQL 身份验证,而不是 Windows 身份验证。无法在 SQL 中创建单独的用户/角色,因为从前端到后端的连接字符串是硬编码的,无法编辑

我的问题如下:

  • 我可以获得主机名、IP、Suser_Name()、MAC 地址等。但客户对其中任何一个都不满意
  • 我可以将 IP 地址映射到用户登录表。客户又不高兴了。

我的问题是:

无论如何我可以将登录表中的用户名链接到 DDL 触发器吗?登录表有 2 列,用户名和密码。是否有一些加入/我可能在这里忽略的任何其他操作?

系统在 SQL Server 2008 上运行

【问题讨论】:

  • 我很确定答案是否定的。如果登录例程更新了用户登录表(例如使用上次登录日期值),您可能会使用 CONTEXT_INFO 和该表上的触发器执行某些操作,但由于您的登录表只有两列,应用程序显然只读取以验证用户的身份,我觉得你倒霉了。您尝试将 IP 映射到用户登录,或获取主机名/IP/SUser_Name/MAC 地址详细信息,可能是客户端可以获得的最佳结果。
  • 在您的应用程序登录期间,将 SPID - 用户名信息保存在另一个表中。在触发时,基于 SPID 并检索用户名
  • @MartW,是的,看来我运气不好。感谢您的评论。
  • @Squirrel,我会试试这个。我想我必须为此创建一个触发器,因为我无法编辑从前端到后端的任何命令。
  • 登录表是否与AD关联?

标签: sql-server tsql triggers audit-logging


【解决方案1】:

您也许可以跟踪user/password 表的select 语句,然后加入 spid 和时间范围。

https://docs.microsoft.com/en-us/sql/relational-databases/sql-trace/sql-trace

  • 使用sp_trace_create 创建跟踪。
  • 使用sp_trace_setevent 添加项目事件。在这种情况下,Batch Complete 应该可以工作。
  • 使用sp_trace_setfilter 设置过滤器。将其过滤到您的 user/password 表中。
  • sp_trace_setstatus 开始跟踪。
  • 使用sp_trace_setstatus 停止跟踪。
  • 使用sp_trace_setstatus 关闭跟踪。

https://docs.microsoft.com/en-us/sql/relational-databases/sql-trace/create-and-run-traces-using-transact-sql-stored-procedures

【讨论】:

  • 我很想尝试这种方法,但我不再使用上述程序。这个问题是在 2016 年提出的,我找不到“关闭”它的方法。不过,这似乎是正确的方法;不知道我们可以使用这些事件来玩弄服务器分析器。
猜你喜欢
  • 2018-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多