Gibt es in SQL Server 2005 eine Abfrage, mit der ich die IP-Adresse oder den Namen des Servers abrufen kann?
sql
sql-server
Seibar
quelle
quelle
Antworten:
Der Code hier gibt Ihnen die IP-Adresse;
Dies funktioniert für eine Remoteclientanforderung an SQL 2008 und höher.
Wenn Sie Shared Memory-Verbindungen zugelassen haben, erhalten Sie eine Ausführung oben auf dem Server
<local machine>
' wird in 'client_net_address' angezeigt.'client_net_address' ist die Adresse des Computers, von dem die Anforderung stammt, während 'local_net_address' der SQL-Server (also NULL über Shared Memory-Verbindungen) und die Adresse ist, die Sie jemandem geben würden, wenn dieser die NetBios des Servers nicht verwenden kann Name oder FQDN aus irgendeinem Grund.
Ich rate dringend davon ab, diese Antwort zu verwenden . Das Aktivieren der Shell ist auf einem Produktions-SQL Server eine sehr schlechte Idee.
quelle
Sie können den [Hostnamen] \ [Instanznamen] erhalten durch:
So erhalten Sie nur den Hostnamen, wenn Sie das Format Hostname \ Instanzname haben:
Alternativ, wie @GilM hervorhob:
Sie können die tatsächliche IP-Adresse folgendermaßen abrufen:
Quelle des SQL-Skripts .
quelle
Der Server verfügt möglicherweise über mehrere IP-Adressen, die er abhört. Wenn Ihrer Verbindung die Serverberechtigung VIEW SERVER STATE erteilt wurde, können Sie diese Abfrage ausführen, um die Adresse abzurufen, die Sie mit SQL Server verbunden haben:
Für diese Lösung müssen Sie nicht über xp_cmdshell an das Betriebssystem senden. Dies ist eine Technik, die auf einem Produktionsserver deaktiviert (oder zumindest streng gesichert) werden sollte. Möglicherweise müssen Sie dem entsprechenden Login VIEW SERVER STATE zuweisen. Dies ist jedoch ein weitaus geringeres Sicherheitsrisiko als das Ausführen von xp_cmdshell.
Die von GilM für den Servernamen erwähnte Technik ist die bevorzugte:
quelle
Die meisten Lösungen zum Abrufen der IP-Adresse über t-sql fallen in diese beiden Lager:
Führen Sie
ipconfig.exe
via ausxp_cmdshell
und analysieren Sie die AusgabeDMV abfragen
sys.dm_exec_connections
Ich bin kein Fan von Option 1. Das Aktivieren von xp_cmdshell hat Sicherheitsnachteile und es ist sowieso viel Parsen erforderlich. 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 jedoch keine der oben genannten Abfragen. Abfrage 1 gibt NULL zurück, wenn Sie über Shared Memory verbunden sind (angemeldet und SSMS auf dem SQL-Host ausgeführt). Abfrage Nr. 2 gibt möglicherweise nichts zurück, wenn keine Verbindungen mit einem nicht gemeinsam genutzten Speicherprotokoll bestehen. Dieses Szenario ist wahrscheinlich, wenn eine Verbindung zu einer neu installierten SQL-Instanz besteht. Die Lösung? Erzwingen Sie 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 der Abfragen erneut aus und Sie erhalten die IP-Adresse.
quelle
Es befindet sich in der Variablen @@ SERVERNAME .
quelle
Sie können die Befehlszeilenabfrage verwenden und in mssql ausführen:
quelle
xp_cmdshell
es in der Server-Sicherheitskonfiguration aktiviert ist- Versuchen Sie dieses Skript, das meinen Anforderungen entspricht. Formatieren Sie es neu, um es zu lesen.
quelle
quelle
Eine einfachere Möglichkeit, den Computernamen ohne den \ InstanceName abzurufen, ist:
quelle
Ich weiß, dass dies ein alter Beitrag ist, aber vielleicht kann diese Lösung nützlich sein, wenn Sie die IP-Adresse und den TCP-Port von einer Shared Memory-Verbindung abrufen möchten (z. B. von einem Skript, das in SSMS lokal auf dem Server ausgeführt wird). Der Schlüssel besteht darin, mit OPENROWSET eine sekundäre Verbindung zu Ihrem SQL Server herzustellen, in der Sie in Ihrer Verbindungszeichenfolge 'tcp:' angeben. Der Rest des Codes erstellt lediglich dynamisches SQL, um die Einschränkung von OPENROWSET zu umgehen, dass Variablen nicht als Parameter verwendet werden können.
quelle
Ad Hoc Distributed Queries
sein muss.