web-dev-qa-db-fra.com

Comment obtenir l'adresse IP du client à partir de SQL Server 2008 lui-même?

J'ai un déclencheur pour insérer/mettre à jour/supprimer. Cela fonctionne bien. De plus, j'ai besoin de l'adresse IP du client à partir de laquelle les modifications sont apportées. Ce dont j'ai besoin dans T-SQL, cela signifie, pas dans n'importe quelle forme Web, mais dans SQL/T-SQL pendant que mon déclencheur sera déclenché.

De plus, j'ai fait une recherche et j'ai constaté qu'il existe une procédure stockée dans la base de données principale nommée xp_cmdshell qui, lorsqu'il est exécuté avec ipconfig, nous pouvons obtenir l'adresse IP. Je pense que cela ne fonctionnera que lorsque vous aurez un accès administratif à la base de données. L'hébergement de mine est un hébergement partagé, donc je n'ai pas un tel privilège. Y a-t-il une autre issue?

Veuillez aider

Merci d'avance

Veuillez noter: Je n'ai pas de privilèges administratifs sur ma base de données SQL Server 2008. J'ai besoin d'une solution en tant qu'utilisateur authentifié.

ne autre mise à jour:

J'ai la solution, la requête qui fonctionnera pour mon scénario est

SELECT hostname, net_library, net_address
FROM sys.sysprocesses 
WHERE spid = @@SPID

Il s'exécute selon les besoins, mais il n'y a qu'un seul problème, à savoir que net_address n'est pas au format IP. ci-dessous est mon résultat:

hostname    net_library     net_address
IPC03       TCP/IP          AE8F925461DE  

J'ai hâte de savoir:

  1. Qu'est-ce que net_address ici? Est-ce une adresse MAC ou une adresse IP, etc.?

  2. Existe-t-il un moyen de convertir net_address en ip?

Humble demande:

Avant de répondre/commenter/voter en aval, je vous demanderais de passer en revue la question, d'abord, en profondeur. J'ai trouvé des gars commentés/dévalorisés sans passer correctement par la question. Aucun problème, tout le monde fait des erreurs. Mais ne vous trompez pas à chaque fois. :)

27
user240141

J'ai trouvé quelque chose qui pourrait vous convenir

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

De Comment obtenir l'adresse IP du client dans SQL Server

Consultez également cet article sur Obtenir l'adresse IP du client

37
huMpty duMpty

Vous pouvez essayer cette solution . Il fonctionne même sur l'hébergement mutualisé:

select CONNECTIONPROPERTY('client_net_address') AS client_net_address 
25
Dmitry

il n'a besoin que d'une seule ligne de code

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

Joignez finalement les deux tables système:

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

Sortie:

hostname | net_library | net_address | client_net_address    
PIERRE   | TCP/IP      | 0090F5E5DEFF| 10.38.168.5
6
Pierre

Je n'ai pas pu obtenir l'adresse IP numérique exacte, mais j'ai obtenu une valeur NULL en raison de la limitation des instructions ci-dessus. La limite est que vous n'obtenez des adresses IP que si vous êtes connecté via TCP/IP. Si vous êtes local et utilisez la mémoire partagée, ces attributs n'existent pas. Si vous désactivez la mémoire partagée (ou tout autre protocole à l'exception de TCP/IP) via Server Configuration Manager, vous obtiendrez toujours l'adresse IP pour toute connexion.

Vous êtes mieux coincé avec

SELECT SERVERPROPERTY(N'MachineName');

... qui peut remplacer une adresse IP numérique.

1
Chagbert

essaye ça

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