Gibt es eine Abfrage in SQL Server 2005, die ich verwenden kann, um die IP oder den Namen des Servers zu erhalten?SQL - Abfrage zum Abrufen der IP-Adresse des Servers
Antwort
select @@servername
Es ist in der @@SERVERNAME Variable;
SELECT @@SERVERNAME;
Sie können die [Hostname] erhalten \ [instancename] von:
SELECT @@SERVERNAME;
nur den Hostnamen zu erhalten, wenn Sie Hostname \ Instanzname Format haben:
SELECT LEFT(ltrim(rtrim(@@ServerName)), Charindex('\', ltrim(rtrim(@@ServerName))) -1)
Alternativ als @GilM wies darauf hin:
SELECT SERVERPROPERTY('MachineName')
Sie können die tatsächliche IP-Adresse dieses:
create Procedure sp_get_ip_address (@ip varchar(40) out)
as
begin
Declare @ipLine varchar(200)
Declare @pos int
set nocount on
set @ip = NULL
Create table #temp (ipLine varchar(200))
Insert #temp exec master..xp_cmdshell 'ipconfig'
select @ipLine = ipLine
from #temp
where upper (ipLine) like '%IP ADDRESS%'
if (isnull (@ipLine,'***') != '***')
begin
set @pos = CharIndex (':',@ipLine,1);
set @ip = rtrim(ltrim(substring (@ipLine ,
@pos + 1 ,
len (@ipLine) - @pos)))
end
drop table #temp
set nocount off
end
go
declare @ip varchar(40)
exec sp_get_ip_address @ip out
print @ip
Ein einfacher Weg, um die Computernamen ohne die \ InstanceName zu bekommen ist:
SELECT SERVERPROPERTY('MachineName')
Der Server hat möglicherweise mehr IP-Adressen, die er auf zuhört. Wenn die Verbindung die VIEW SERVER STATE-Server die Berechtigung hat es gewährt, können Sie diese Abfrage ausführen, um die Adresse, die Sie SQL Server verbunden haben zu erhalten:
SELECT dec.local_net_address
FROM sys.dm_exec_connections AS dec
WHERE dec.session_id = @@SPID;
Diese Lösung nicht Sie benötigen, um das Betriebssystem zu berappen über xp_cmdshell, eine Technik, die auf einem Produktionsserver deaktiviert (oder zumindest streng gesichert) werden sollte. Es kann erforderlich sein, dass Sie VIEW SERVER STATE der entsprechenden Anmeldung erteilen, aber das ist ein weitaus kleineres Sicherheitsrisiko als das Ausführen von xp_cmdshell.
Die Technik von Gilm für den Servernamen erwähnt ist die bevorzugte ein:
SELECT SERVERPROPERTY(N'MachineName');
SELECT
CONNECTIONPROPERTY('net_transport') AS net_transport,
CONNECTIONPROPERTY('protocol_type') AS protocol_type,
CONNECTIONPROPERTY('auth_scheme') AS auth_scheme,
CONNECTIONPROPERTY('local_net_address') AS local_net_address,
CONNECTIONPROPERTY('local_tcp_port') AS local_tcp_port,
CONNECTIONPROPERTY('client_net_address') AS client_net_address
Der Code Hier finden Sie die IP-Adresse geben;
Dies funktioniert für eine Remote-Client-Anfrage an SQL 2008 und neuer.
Wenn Sie Shared Memory-Verbindungen erlaubt, dann oben auf dem Server ausgeführt selbst finden Sie
- "Shared Memory" als Wert für 'net_transport' und
- NULL für 'local_net_address' geben, und
- '
<local machine>
' wird in 'client_net_address' angezeigt.
‚client_net_address‘ ist die Adresse des Computers, der die Anforderung von entstanden, während ‚local_net_address‘ der SQL-Server (also NULL über Shared Memory-Verbindungen), und die Adresse, die Sie jemandem geben würde, wenn sie können, wäre Verwenden Sie aus irgendeinem Grund nicht den NetBios-Namen oder FQDN des Servers.
Ich rate dringend davon ab, this answer zu verwenden. Das Aktivieren der Shell ist auf einem Produktions-SQL Server eine sehr schlechte Idee.
Gute Antwort, außer ich bekomme eine negative Port-Nummer (-15736) für einen Port, der 49800 sein sollte. Wenn negativ ist es sicher, nur 65536 hinzufügen? – crokusek
Wenn jemand sich aus der Ferne in den SQL-Server meines Computers einloggen möchte, welche IP gebe ich ihm dann? local_net_address oder client_net_address? –
Es funktioniert nicht auf 2012 - Adresse ist null – scar80
Die meisten Lösungen für das Erhalten der IP-Adresse über T-SQL fallen in diesen beiden Lagern:
Run
ipconfig.exe
überxp_cmdshell
und analysieren die AusgangsAbfrage DMV
sys.dm_exec_connections
Ich bin kein Fan von Option # 1. Die Aktivierung von xp_cmdshell hat Sicherheitsnachteile, und es gibt sowieso eine Menge Parsing. Das ist umständlich. Option # 2 ist elegant. Und es ist eine reine T-SQL-Lösung, die ich fast immer bevorzuge. Hier sind zwei Beispielabfragen für Option # 2:
Manchmal funktioniert keine der obigen Abfragen, obwohl. Abfrage # 1 gibt NULL zurück, wenn Sie über Shared Memory (angemeldet und SSMS auf dem SQL-Host ausgeführt) verbunden sind. Abfrage Nr. 2 kann nichts zurückgeben, wenn keine Verbindungen ein Nicht-Shared-Memory-Protokoll verwenden. Dieses Szenario ist wahrscheinlich, wenn eine Verbindung zu einer neu installierten SQL-Instanz besteht. Die Lösung? Erzwinge eine Verbindung über TCP/IP. Erstellen Sie dazu eine neue Verbindung in SSMS und verwenden Sie das Präfix "tcp:" mit dem Servernamen. Führen Sie dann eine Abfrage erneut aus, und Sie erhalten die IP-Adresse.
Super danke für den Tipp! Arbeitete perfekt für mich. – Munk
Das wird ipv4 geben .. können wir ipv6 bekommen? –
Ich weiß, das ist eine alte Post, aber vielleicht kann diese Lösung sehr nützlich sein, wenn Sie die IP-Adresse und TCP-Port von einer Shared Memory-Verbindung (zB aus einem Skript in SSMS lokal ausgeführt abrufen mögen auf der Server). Der Schlüssel besteht darin, eine sekundäre Verbindung zu Ihrem SQL Server mit OPENROWSET zu öffnen, in dem Sie in Ihrer Verbindungszeichenfolge 'tcp:' angeben. Der Rest des Codes erstellt lediglich dynamisches SQL, um die Beschränkung von OPENROWSET zu umgehen, Variablen nicht als Parameter verwenden zu können.
DECLARE @ip_address varchar(15)
DECLARE @tcp_port int
DECLARE @connectionstring nvarchar(max)
DECLARE @parm_definition nvarchar(max)
DECLARE @command nvarchar(max)
SET @connectionstring = N'Server=tcp:' + @@SERVERNAME + ';Trusted_Connection=yes;'
SET @parm_definition = N'@ip_address_OUT varchar(15) OUTPUT
, @tcp_port_OUT int OUTPUT';
SET @command = N'SELECT @ip_address_OUT = a.local_net_address,
@tcp_port_OUT = a.local_tcp_port
FROM OPENROWSET(''SQLNCLI''
, ''' + @connectionstring + '''
, ''SELECT local_net_address
, local_tcp_port
FROM sys.dm_exec_connections
WHERE session_id = @@spid
'') as a'
EXEC SP_executeSQL @command
, @parm_definition
, @ip_address_OUT = @ip_address OUTPUT
, @tcp_port_OUT = @tcp_port OUTPUT;
SELECT @ip_address, @tcp_port
können Sie Befehlszeile Abfrage und führen in MSSQL verwenden:
exec xp_cmdshell 'ipconfig'
Das funktioniert nur, wenn 'xp_cmdshell' in der Server-Sicherheitskonfiguration aktiviert ist – D0dger
--Try dieses Skript, um es auf meine Bedürfnisse funktioniert. Reformat um es zu lesen.
SELECT
SERVERPROPERTY('ComputerNamePhysicalNetBios') as 'Is_Current_Owner'
,SERVERPROPERTY('MachineName') as 'MachineName'
,case when @@ServiceName =
Right (@@Servername,len(@@ServiceName)) then @@Servername
else @@servername +' \ ' + @@Servicename
end as '@@Servername \ Servicename',
CONNECTIONPROPERTY('net_transport') AS net_transport,
CONNECTIONPROPERTY('local_tcp_port') AS local_tcp_port,
dec.local_tcp_port,
CONNECTIONPROPERTY('local_net_address') AS local_net_address,
dec.local_net_address as 'dec.local_net_address'
FROM sys.dm_exec_connections AS dec
WHERE dec.session_id = @@SPID;
- 1. SQL-Abfrage zum Abrufen von Suchergebnissen
- 2. Abfrage Abfrage zum Abrufen des öffentlichen Schlüssels vom öffentlichen Schlüsselserver
- 3. Abrufen der IP-Adresse des Servers in ASP.NET?
- 4. Komplettes Dateisystem des Servers anzeigen und Pfad der Ordner abrufen
- 5. Alternative für die Abfrage des Kafka-Servers
- 6. SQL-Abfrage zum Anzeigen des nächsten Datums
- 7. Abrufen von Produkten aus der SQL-Abfrage
- 8. Abrufen des Dateinamens der Hochladedatei in SQL
- 9. SQL-Fehler beim Auffinden des Servers/der angegebenen Instanz
- 10. Abfragen eines verknüpften SQL-Servers
- 11. SQL Abfrage zum Abrufen von WooCommerce-Bestellpositionen und Metadaten
- 12. Firebird SQL-Anweisung zum Abrufen der Tabellendefinition
- 13. SQL-Abfrage zum Generieren der Ereignisfolge
- 14. Wie man Relay Store ohne Abfrage des Servers manuell aktualisiert?
- 15. SQL-Abfrage zum Abrufen numerischer Werte und Drucken als Wörter
- 16. Abfrage zum Abrufen aller Fremdschlüsseleinschränkungen in SQL Server 2000
- 17. Wie kann ich die Zeitzone des lokalen Servers abrufen?
- 18. Datum des MongoDB-Servers mit dem Knoten js abrufen
- 19. Deklarieren der ServeHTTP-Methode des Go-Servers
- 20. Abrufen von IllegalStateException beim Starten des Grpc-Servers
- 21. SQL-Abfrage zum Analysieren des XML-Felds und Abrufen von Werten
- 22. Wie lautet die richtige SQL-Abfrage zum Abrufen des Datumsfelds ohne Zeit? C# MS Access
- 23. SQLite rekursive Abfrage zum Zurückgeben des Dateipfads
- 24. Abfrage zum Aufrufen des SQL-Agenten Auftrag mit Übergabe des Parameters aus der Abfrage in SQL Server 2005?
- 25. Verwenden von SMO.Agent zum Abrufen des SQL-Ausführungsstatus - Sicherheitsproblem
- 26. SQL-Abfrage zum Abrufen des übergeordneten Elements (Job) ohne angegebene untergeordnete Elemente (Status)
- 27. Wie kann ich die Ortszeit des Benutzers anstelle der Zeit des Servers abrufen?
- 28. Sqlite Abfrage zum Abrufen der Anzahl der Elemente
- 29. Windows-Befehl zum Abrufen des Dienststatus?
- 30. Wie vermeidet Facebook Chat die kontinuierliche Abfrage des Servers?
Vielen Dank für diese Antwort ... Ich glaube, dass dies der richtige Weg ist der Servers-IP-Adresse zu bestimmen, ob Sie es von der Client-Anschlussseite überprüfen müssen, besonders, wenn die Verbindung des Client mit einer Verbindungszeichenfolge festgelegt wurde, dass enthielt einen SQL-Alias oder eine benannte Instanz als Datenquelle. –
upvoted für sagen, nicht nur zu blockieren xp_cmdshell, aber streng gesichert zu gewährleisten – SheldonH