web-dev-qa-db-ja.com

SQL Server 2008自体からクライアントIPアドレスを取得する方法は?

挿入/更新/削除のトリガーがあります。それはうまく機能しています。また、変更が行われるクライアントのIPアドレスが必要です。 T-SQLで必要なこと、つまり、Webフォームではなく、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形式ではないという問題が1つだけあります。以下は私の結果です:

hostname    net_library     net_address
IPC03       TCP/IP          AE8F925461DE  

私は知りたいと思っています:

  1. ここでnet_addressとは何ですか? MACアドレスまたはIPアドレスなどですか?

  2. Net_addressをipに変換する方法はありますか?

謙虚なリクエスト

回答/コメント/ダウン投票する前に、まず、徹底的に質問に答えるようお願いします。質問に適切に回答せずにコメント/ダウン投票をした人がいることがわかりました。問題はありません。誰もが間違いを犯します。しかし、毎回間違えるわけではありません。 :)

27
user240141

私はあなたのために働くかもしれない何かを見つけました

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

から SQL ServerでクライアントIPアドレスを取得する方法

クライアントIPアドレスの取得 に関するこの記事もご覧ください。

37
huMpty duMpty

このソリューション を試すことができます。共有ホスティングでも動作します:

select CONNECTIONPROPERTY('client_net_address') AS client_net_address 
25
Dmitry

必要なコードは1行だけです

 SELECT CONVERT(char(15), CONNECTIONPROPERTY('client_net_address'))
6

最終的に2つのシステムテーブルを結合します。

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
6
Pierre

正確な数値のIPアドレスを取得できませんでしたが、代わりに上記のステートメントの制限のためにNULL値を取得しました。制限は、TCP/IP経由で接続している場合にのみIPアドレスを取得することです。ローカルで共有メモリを使用している場合、これらの属性は存在しません。サーバー構成マネージャーを使用して共有メモリ(またはTCP/IP以外のプロトコル)をオフにすると、接続のIPアドレスが常に取得されます。

あなたは最高にこだわっています

SELECT SERVERPROPERTY(N'MachineName');

...数値のIPアドレスの代わりに機能できます。

1
Chagbert

これを試して

DECLARE @IP_Address varchar(255);
SELECT @IP_Address = client_net_address
FROM sys.dm_exec_connections
WHERE Session_id = @@SPID;

select @IP_Address;
0
Kovid Purohit