我们有一个 SQL Server 2005 数据库,多年来开发的各种程序都使用它。大多数这些程序都使用 sa 登录名访问数据库。我的工作是弄清楚哪个系统出于什么目的使用数据库,以便我们可以开始创建具有适当权限的登录名或以其他方式管理访问权限。
我想知道,对于给定的连接,哪个 IP 登录了以及执行了哪些语句。我如何获取这些信息?我是否可以在不显著降低数据库服务器速度的情况下获取这些信息?
答案1
是的,我相当确定 SQL 2005 完整版附带的 SQL 探查器工具将启用跟踪该流量的客户端 IP 地址。如果您使用的是 SQL Express,请获取以下内容: http://sqlprofiler.googlepages.com。编辑配置文件跟踪,以便它记录最少的信息,然后跟踪所需的任何时间段,您应该能够弄清楚所有事情。
答案2
由于您使用的是 SQL2005,因此您可以使用 LOGON 触发器来捕获进程使用 sa 登录的时间。触发器中提供的 EVENTDATA 为您提供了有关连接的大量信息,包括连接客户端的主机名或 IP。
从那里,您可以创建服务器跟踪来了解会话正在做什么。您可能能够从触发器内部执行此操作 - 我找不到任何说您不能这样做的东西,但我自己也没有尝试过。
答案3
我不知道如何根据 IP 地址来做到这一点。
一种方法是:
- 从创建用户登录开始,赋予他们与 sa 相同的权限(无论如何他们现在都在使用 sa)。
- 使用分析器记录每个用户的操作。(这会对性能造成一定影响)
- 将用户登录的权限减少到所需的权限。
另一种方法是:
- 首先创建没有权限的用户登录
- 运行应用程序并查看会收到哪些访问被拒绝错误
- 按要求赋予用户登录的权限。