挿入/更新/削除のトリガーがあります。それはうまく機能しています。また、変更が行われるクライアントの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
私は知りたいと思っています:
ここで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
から SQL ServerでクライアントIPアドレスを取得する方法
クライアントIPアドレスの取得 に関するこの記事もご覧ください。
このソリューション を試すことができます。共有ホスティングでも動作します:
select CONNECTIONPROPERTY('client_net_address') AS client_net_address
必要なコードは1行だけです
SELECT CONVERT(char(15), CONNECTIONPROPERTY('client_net_address'))
最終的に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
正確な数値の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;