[英]How to get the client IP address from SQL Server 2008 itself?
我有一個插入/更新/刪除的觸發器。 那工作正常。 另外,我需要進行更改的客戶端的 IP 地址。 我需要在 T-SQL 中,這意味着,不是在任何網絡表單中,而是在 SQL/T-SQL 中,而我的觸發器將被觸發。
我也搜索了一下,發現主數據庫中有一個名為xp_cmdshell
存儲過程,當使用ipconfig
執行時,我們可以獲得 IP 地址。 我認為這僅在您具有對數據庫的管理訪問權限時才有效。 我的主機是共享主機,所以我沒有這樣的特權。 還有其他出路嗎?
請注意:我沒有 SQL Server 2008 數據庫的管理權限。 作為經過身份驗證的用戶,我需要一個解決方案。
另一個更新:
我有解決方案,適用於我的場景的查詢是
SELECT hostname, net_library, net_address
FROM sys.sysprocesses
WHERE spid = @@SPID
它根據需要執行,但只有一個問題,即 net_address 不是 IP 格式。 以下是我的結果:
hostname net_library net_address
IPC03 TCP/IP AE8F925461DE
我很想知道:
這里的 net_address 是什么? 是 MAC 地址還是某個 IP 地址等?
有沒有辦法將net_address轉換為ip?
我找到了可能對你有用的東西
CREATE FUNCTION [dbo].[GetCurrentIP] ()
RETURNS varchar(255)
AS
BEGIN
DECLARE @IP_Address varchar(255);
SELECT @IP_Address = client_net_address
FROM sys.dm_exec_connections
WHERE Session_id = @@SPID;
Return @IP_Address;
END
也看看這篇關於獲取客戶端IP地址的文章
您可以試試這個解決方案。 它甚至適用於共享主機:
select CONNECTIONPROPERTY('client_net_address') AS client_net_address
最終加入兩個系統表:
SELECT hostname,
net_library,
net_address,
client_net_address
FROM sys.sysprocesses AS S
INNER JOIN sys.dm_exec_connections AS decc ON S.spid = decc.session_id
WHERE spid = @@SPID
輸出:
hostname | net_library | net_address | client_net_address
PIERRE | TCP/IP | 0090F5E5DEFF| 10.38.168.5
它只需要一行代碼
SELECT CONVERT(char(15), CONNECTIONPROPERTY('client_net_address'))
由於上述語句的限制,我無法獲得確切的數字 IP 地址,而是獲得了 NULL 值。 限制是如果您通過 TCP/IP 連接,您只能獲得 IP 地址。 如果您在本地並使用共享內存,則這些屬性不存在。 如果您通過服務器配置管理器關閉共享內存(或除 TCP/IP 之外的任何協議),您將始終獲得任何連接的 IP 地址。
你最好堅持
SELECT SERVERPROPERTY(N'MachineName');
...它可以代替數字 IP 地址。
嘗試這個
DECLARE @IP_Address varchar(255);
SELECT @IP_Address = client_net_address
FROM sys.dm_exec_connections
WHERE Session_id = @@SPID;
select @IP_Address;
下面的查詢返回客戶端機器(不是服務器)的 IP 地址和工作站名稱。
SELECT CONNECTIONPROPERTY('client_net_address') AS IpAddress,
HOST_NAME() AS ClientMachineName
參考: https : //docs.microsoft.com/en-us/sql/t-sql/functions/host-name-transact-sql?view=sql-server-ver15
例子
下面的示例創建一個表,該表在 DEFAULT 定義中使用 HOST_NAME() 來記錄將行插入到 orders 表中的計算機的工作站名稱。
CREATE TABLE Orders_demo
(
OrderID INT PRIMARY KEY,
OrderDate DATETIME NOT NULL,
Workstation NCHAR(30) NOT NULL DEFAULT HOST_NAME()
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.