如何在SqlServer中獲取前端連線的IP地址,計算機名等資訊 如何在SqlServer中獲取前端連線的IP地址,計算機名等資訊
轉自:https://blog.csdn.net/josonweng/article/details/81126239
如何在SqlServer中獲取前端連線的IP地址,計算機名等資訊
sql server 連線在一些需求中,可能我們需要知道連線到SqlServer的前端程式的一些系統資訊,比如前端連線的計算機名稱,IP地址,什麼時候開始請求連線,什麼時候結束連線等資訊。
如果你對SqlServer的系統函式或檢視不太瞭解,這個功能看起來好像比較複雜,而實際上, SqlServer的動態管理檢視已經給我們提供了這些資訊,下面我們來看兩個動態管理檢視。
1、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語句:
select distinct host_name from sys.dm_exec_Sessions
要看那些使用者已連線到sqlserver伺服器:
select distinct login_name from sys.dm_exec_Sessions
當然,利用上面的列,我們可以獲得更多想要的客戶端資訊
2、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 [email protected]@spid
@@spid的作用是返回當前程序的會話ID
在一些需求中,可能我們需要知道連線到SqlServer的前端程式的一些系統資訊,比如前端連線的計算機名稱,IP地址,什麼時候開始請求連線,什麼時候結束連線等資訊。
如果你對SqlServer的系統函式或檢視不太瞭解,這個功能看起來好像比較複雜,而實際上, SqlServer的動態管理檢視已經給我們提供了這些資訊,下面我們來看兩個動態管理檢視。
1、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語句:
select distinct host_name from sys.dm_exec_Sessions
要看那些使用者已連線到sqlserver伺服器:
select distinct login_name from sys.dm_exec_Sessions
當然,利用上面的列,我們可以獲得更多想要的客戶端資訊
2、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 [email protected]@spid
@@spid的作用是返回當前程序的會話ID