我需要清楚地看到什么 IP 地址对 SQL 服务器进行了什么 sql 查询。我正在尝试使用 SQL Profiler,但似乎我无法以某种方式区分查询来自的机器(浏览器)。它只有 web server 和 sql server 之间的通信细节。我有什么方法(任何未知的日志?)可以让我看到查询来自的原始机器的标识吗?
感谢您的任何建议。
高频
我需要清楚地看到什么 IP 地址对 SQL 服务器进行了什么 sql 查询。我正在尝试使用 SQL Profiler,但似乎我无法以某种方式区分查询来自的机器(浏览器)。它只有 web server 和 sql server 之间的通信细节。我有什么方法(任何未知的日志?)可以让我看到查询来自的原始机器的标识吗?
感谢您的任何建议。
高频
您可以获取当前连接的主机名,或者从sysprocesses表中获取任何信息
SELECT hostname FROM sys.sysprocesses WHERE spid = @@SPID
如果这是您要查找的内容,这显然无法获取网络主机的 IP 地址。
就像@joshperry 所说,您可以使用检索客户端地址和服务器地址
SELECT client_net_address, local_net_address
FROM sys.dm_exec_connections
WHERE session_id = @@SPID
就 SQL Server 而言,请求将始终来自您的网络服务器。您需要在 Web 应用程序中捕获并记录 IP 地址。
SELECT r.client_net_address,sqltext.Text
FROM sys.dm_exec_requests req left join sys.dm_exec_connections as r on req.session_id=r.session_id
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS sqltext
如果您不在应用程序中编写代码以将客户端地址从 Web 服务器传递到数据库,您将不得不查看 Web 日志 - 它们将提供客户端的 IP 地址。
SELECT * FROM sys.dm_exec_connections
返回有关与此 SQL Server 实例建立的连接的信息以及每个连接的详细信息 ( https://msdn.microsoft.com/en-us/library/ms181509%28v=sql.120%29.aspx )