如何在SqlServer中獲取前端鏈接的IP地址,計算機名等信息(轉)

如何在SqlServer中獲取前端鏈接的IP地址,計算機名等信息

 

點擊打開連接

在一些需求中,可能咱們須要知道鏈接到SqlServer的前端程序的一些系統信息,好比前端鏈接的計算機名稱,IP地址,何時開始請求鏈接,何時結束鏈接等信息。

若是你對SqlServer的系統函數或視圖不太瞭解,這個功能看起來好像比較複雜,而實際上, SqlServer的動態管理視圖已經給咱們提供了這些信息,下面咱們來看兩個動態管理視圖。html

一、Sys.dm_exec_Sessions
這個視圖中提供了全部鏈接sqlserver的客戶端的一些信息,下面是Sys.dm_exec_Sessions返回的列:前端

列名 數據類型 說明
Session_id smallint 標識與每一個活動主鏈接關聯的會話。
login_time datetime 創建會話的時間。
host_name nvarchar(128) 與會話關聯的主機。
program_name nvarchar(128) 與會話關聯的程序。
host_process_id int 與會話關聯的進程 ID。
client_version int 客戶端鏈接到服務器所用的接口版本。
client_interface_name nvarchar(32) 客戶端鏈接到服務器所用的接口名稱。
security_id varbinary(85) 與登陸名關聯的 Microsoft Windows 安全 ID。
login_name nvarchar(128) 與會話關聯的 SQL 登陸名。
nt_domain nvarchar(128) 從中創建會話鏈接的域。
nt_user_name nvarchar(128) 與會話關聯的用戶名。
status nvarchar(30) 會話的狀態。可能的值: 1,運行 - 當前正在運行一個或多個請求
2,睡眠 - 當前沒有運行任何請求
3,休眠 - 會話處於登陸前狀態
context_info varbinary(128) 會話的 CONTEXT_INFO 值。
cpu_time int 該會話所佔用的 CPU 時間(毫秒)。
memory_usage int 該會話所佔用的 8 KB 內存頁數。
total_scheduled_time int 計劃內含請求的會話的執行所耗用的總計時間(毫秒)。
total_elapsed_time int 自會話創建以來已耗用的時間(毫秒)。
endpoint_id int 與會話關聯的端點的 ID。
last_request_start_time datetime 最近一次會話請求的開始時間。這包括當前正在執行的請求。
last_request_end_time datetime 最近一次會話請求的完成時間。
reads bigint 在該會話期間該會話中的請求所執行的讀取次數。
Writes bigint 在該會話期間該會話中的請求所執行的寫入次數。
logical_reads bigint 已對該會話執行的邏輯讀取數。
is_user_process bit 若是會話是系統會話,則爲 0。不然,爲 1。
text_size int 會話的 TEXTSIZE 設置。
language nvarchar(128) 會話的 LANGUAGE 設置。
date_format nvarchar(3) 會話的 DATEFORMAT 設置。
date_first smallint 會話的 DATEFIRST 設置。
quoted_identifier bit 會話的 QUOTED_IDENTIFIER 設置。
arithabort bit 會話的 ARITHABORT 設置。
ansi_null_dflt_on bit 會話的 ANSI_NULL_DFLT_ON 設置。
ansi_defaults bit 會話的 ANSI_DEFAULTS 設置。
ansi_warnings bit 會話的 ANSI_WARNINGS 設置。
ansi_padding bit 會話的 ANSI_PADDING 設置。
ansi_nulls bit 會話的 ANSI_NULLS 設置。
concat_null_yields_null bit 會話的 CONCAT_NULL_YIELDS_NULL 設置。
transaction_isolation_level smallint 會話的事務隔離級別。 0 = 未指定 1 = 未提交讀取 2 = 已提交讀取 3 = 可重複 4 = 可序列化 5 = 快照
lock_timeout int 會話的 LOCK_TIMEOUT 設置。該值以毫秒計。
deadlock_priority int 會話的 DEADLOCK_PRIORITY 設置。
row_count bigint 到目前爲止會話返回的行數。
prev_error int 會話返回的最近一個錯誤的 ID。

好比說,咱們要看那些主機有鏈接到了sqlserver服務器,可使用下面的sql語句:node

select distinct host_name from sys.dm_exec_Sessions

 

要看那些用戶已鏈接到sqlserver服務器:sql

select distinct login_name from sys.dm_exec_Sessions

 

固然,利用上面的列,咱們能夠得到更多想要的客戶端信息安全

二、Sys.dm_exec_connections
這個視圖返回了鏈接sqlserver服務器上面的每一個鏈接的詳細信息,下面是Sys.dm_exec_connections返回的列:服務器

列名 數據類型 說明
Session_id int 標識與此鏈接關聯的會話。
most_recent_Session_id int 顯示與此鏈接關聯的最近請求的會話 ID。
connect_time datetime 鏈接創建時的時間戳。
net_transport nvarchar(40) 說明該鏈接使用的物理傳輸協議。
protocol_type nvarchar(40) 指定負載的協議類型。此參數當前可區分 TDS (TSQL) 和 SOAP。
protocol_version int 與此鏈接關聯的數據訪問協議的版本。
endpoint_id int 與此鏈接關聯的端點的惟一標識符。此 endpoint_id 可用於查詢 sys.endpoints 視圖。
encrypt_option nvarchar(40) 說明是否爲此鏈接啓用了加密的布爾值。
auth_scheme nvarchar(40) 指定與此鏈接一塊兒使用的 SQL Server/NT 身份驗證。
node_affinity smallint 顯示與此鏈接關聯的 SOS 節點。
num_reads int 此鏈接中已發生的讀包次數。
num_writes int 此鏈接中已發生的寫數據包次數。
last_read datetime 此鏈接中上一次發生讀操做的時間戳。
last_write datetime 此鏈接中上一次發生寫操做的時間戳。
net_packet_size int 用於信息和數據的網絡包的大小。
client_net_address varchar(40) 與此服務器鏈接的客戶端的主機地址。
client_tcp_port int 與該鏈接關聯的客戶機上的端口號。
local_net_address varchar(40) 顯示此鏈接的目標服務器的 IP 地址。只對使用 TCP 傳輸提供程序的鏈接可用。
local_tcp_port int 若是此鏈接使用 TCP 傳輸,則顯示該鏈接的目標服務器的 TCP 端口。
connection_id uniqueidentifier 對每一個鏈接進行惟一標識。
parent_connection_id uniqueidentifier 標識 MARS 會話正在使用的主要鏈接。
most_recent_sql_handle varbinary(64) 此鏈接上執行的上一個請求的 SQL 句柄。most_recent_sql_handle 列始終與 most_recent_Session_id 列同步。

好比,我要查看當前鏈接的客戶端IP與sqlserver所在服務器的IP,能夠用下面的sql查詢:網絡

select client_net_address '客戶端IP',local_net_address '服務器的IP' from sys.dm_exec_connections where Session_id=@@spid

 

@@spid的做用是返回當前進程的會話IDdom

相關文章
相關標籤/搜索