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:
Qu'est-ce que net_address ici? Est-ce une adresse MAC ou une adresse IP, etc.?
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. :)
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
Vous pouvez essayer cette solution . Il fonctionne même sur l'hébergement mutualisé:
select CONNECTIONPROPERTY('client_net_address') AS client_net_address
il n'a besoin que d'une seule ligne de code
SELECT CONVERT(char(15), CONNECTIONPROPERTY('client_net_address'))
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
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.
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;