我们正在使用SQL 2005,并希望识别单个用户,以便我们可以追踪他们的SQL以达到性能目的,但我们发现难以唯一识别谁是谁。
我们将SQL 2005与连接池一起使用,因此每个用户在Activity Monitor中都有相同的用户。他们的NT用户名似乎没有设置 - 可能是因为我们使用的是SQL Server用户而不是域用户,我们也使用Citrix,因此没有设置单独的IP地址。在这个(非常常见的)环境中,您如何识别个人用户?
答案 0 :(得分:1)
如果每个人都使用相同的用户名并来自同一个IP,您将无法区分它们。除非您使用Windows身份验证,否则MSSQL甚至不会被告知用户连接的Windows上的用户名。
您是否考虑过更改设置以使其使用Windows身份验证?这似乎是问题的合理解决方案。要么为SQL上的每个人设置单独的登录,要么复制您的Active Directory用户列表......
答案 1 :(得分:0)
为了识别SQL事件探查器中的用户,您需要以某种方式将这些信息提供给SQL Server,或者作为连接上下文的一部分。一种方法是以不同的用户身份进行连接,但如果您有数千个用户,则需要数千个帐户(SQL Auth或Windows Auth),并且很快就会无法管理。
更好的方法是将连接字符串中的Application Name
参数设置为用户名。设置后,您可以在SQL事件探查器中过滤该字段:Data Source=.;Initial Catalog=Northwind;Integrated Security=SSPI;Application Name=RickNZ
此方法的缺点是连接池(默认情况下启用)仅在连接字符串逐字节相同时才共享连接。因此,如果每个用户使它们不同,那么您将拥有更多连接,从而对性能产生影响。在高度多线程的环境中,您可能还会耗尽可用的池连接。即便如此,它可能对短期调试很有用。
答案 2 :(得分:0)
通过跟踪Sql Profiler中的客户端进程ID解决了该问题。我们可以在Citrix内部识别特定用户及其PID,或在正常设置中识别任务管理器。然后通过该PID过滤Sql Profile中的输出。
当您使用数据库但无法访问应用程序源时,这非常棒。通常需要更改标准报告,SP已修复等,但如果您不知道正在运行什么,那么它就是大海捞针 - 使用Sql Profile跟踪用户,捕获Sql,分析/调试 - 修复移动。< / p>