Có truy vấn nào trong SQL Server 2005 tôi có thể sử dụng để lấy IP hoặc tên của máy chủ không?SQL - Truy vấn để nhận địa chỉ IP của máy chủ
Trả lời
select @@servername
Đó là trong biến số @@SERVERNAME;
SELECT @@SERVERNAME;
Bạn có thể lấy [hostname] \ [instancename] bởi:
SELECT @@SERVERNAME;
Để có được chỉ tên máy khi bạn có hostname định dạng \ tên ví dụ:
SELECT LEFT(ltrim(rtrim(@@ServerName)), Charindex('\', ltrim(rtrim(@@ServerName))) -1)
Ngoài ra như @GilM đã chỉ ra:
SELECT SERVERPROPERTY('MachineName')
Bạn có thể nhận địa chỉ IP thực tế bằng cách sử dụng:
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
Một cách đơn giản để có được tên máy mà không \ InstanceName là:
SELECT SERVERPROPERTY('MachineName')
Các máy chủ có thể có nhiều địa chỉ IP mà nó đang lắng nghe trên. Nếu kết nối của bạn có XEM MÁY CHỦ phép máy chủ NHÀ NƯỚC cấp cho nó, bạn có thể chạy truy vấn này để có được những địa chỉ mà bạn đã kết nối với SQL Server:
SELECT dec.local_net_address
FROM sys.dm_exec_connections AS dec
WHERE dec.session_id = @@SPID;
Giải pháp này không đòi hỏi bạn phải bỏ ra cho hệ điều hành thông qua xp_cmdshell, là một kỹ thuật cần được vô hiệu hóa (hoặc ít nhất là bảo mật nghiêm ngặt) trên một máy chủ sản xuất. Nó có thể yêu cầu bạn cấp VIEW SERVER STATE cho đăng nhập thích hợp, nhưng đó là một nguy cơ bảo mật nhỏ hơn nhiều so với chạy xp_cmdshell.
Kỹ thuật được đề cập bởi GilM cho tên máy chủ được ưa thích nhất:
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
Mã đây sẽ cung cấp cho bạn địa chỉ IP;
Điều này sẽ hoạt động đối với yêu cầu máy khách từ xa đến SQL 2008 và phiên bản mới hơn.
Nếu bạn đã chia sẻ kiếp kết nối bộ nhớ cho phép, sau đó chạy trên trên máy chủ chính nó sẽ cung cấp cho bạn
- "Memory Shared" làm giá trị cho 'net_transport', và
- NULL cho 'local_net_address', và
- '
<local machine>
' sẽ được hiển thị trong 'client_net_address'.
'client_net_address' là địa chỉ của máy tính mà yêu cầu bắt nguồn từ, trong khi 'local_net_address' sẽ là máy chủ SQL (do đó NULL qua Shared Memory connections) và địa chỉ bạn sẽ cung cấp cho ai đó nếu họ có thể không sử dụng tên NetBios của máy chủ hoặc FQDN vì một số lý do.
Tôi khuyên bạn không nên sử dụng this answer. Việc kích hoạt shell out là một ý tưởng rất tồi tệ đối với một SQL Server sản xuất.
Câu trả lời tốt ngoại trừ tôi nhận được một số cổng âm (-15736) cho một cổng nên được 49800. Vì vậy, nếu tiêu cực là nó an toàn để chỉ cần thêm 65536? – crokusek
Nếu ai đó muốn đăng nhập từ xa vào máy chủ SQL của máy tính của tôi thì tôi sẽ cung cấp cho tôi địa chỉ IP nào? local_net_address hoặc client_net_address? –
Nó không hoạt động vào năm 2012 - địa chỉ là không có – scar80
Hầu hết các giải pháp để nhận được địa chỉ IP qua t-sql rơi vào hai phe này:
Run
ipconfig.exe
quaxp_cmdshell
và phân tích đầu raQuery DMV
sys.dm_exec_connections
Tôi không phải là người hâm mộ tùy chọn số 1. Việc kích hoạt xp_cmdshell có những hạn chế về bảo mật và có rất nhiều phân tích cú pháp liên quan. Đó là cồng kềnh. Tùy chọn # 2 là thanh lịch. Và đó là một giải pháp t-sql thuần túy, mà tôi hầu như luôn thích. Dưới đây là hai truy vấn mẫu cho tùy chọn # 2:
SELECT c.local_net_address
FROM sys.dm_exec_connections AS c
WHERE c.session_id = @@SPID;
SELECT TOP(1) c.local_net_address
FROM sys.dm_exec_connections AS c
WHERE c.local_net_address IS NOT NULL;
Đôi khi, các truy vấn trên không hoạt động. Truy vấn # 1 trả về NULL nếu bạn được kết nối qua bộ nhớ chia sẻ (đã đăng nhập và chạy SSMS trên máy chủ lưu trữ SQL). Truy vấn # 2 có thể trả về không có gì nếu không có kết nối bằng giao thức bộ nhớ không được chia sẻ. Kịch bản này có thể xảy ra khi được kết nối với một cá thể SQL mới được cài đặt. Giải pháp? Buộc kết nối qua TCP/IP. Để thực hiện việc này, hãy tạo một kết nối mới trong SSMS và sử dụng tiền tố "tcp:" với tên máy chủ. Sau đó chạy lại truy vấn và bạn sẽ nhận được địa chỉ IP.
Lời cảm ơn tuyệt vời dành cho mẹo! Làm việc hoàn hảo cho tôi. – Munk
Điều này sẽ cung cấp cho ipv4 .. chúng tôi có thể nhận được ipv6? –
Tôi biết đây là một bài cũ, nhưng có lẽ giải pháp này có thể có ích khi bạn muốn lấy địa chỉ IP và cổng TCP từ một kết nối chia sẻ bộ nhớ (ví dụ như từ một kịch bản chạy trong SSMS cục bộ trên máy chủ). Điều quan trọng là để mở một kết nối thứ cấp đến máy chủ SQL của bạn bằng cách sử dụng OPENROWSET, trong đó bạn chỉ định 'tcp:' trong chuỗi kết nối của bạn. Phần còn lại của mã chỉ đơn thuần là xây dựng SQL động để có được giới hạn OPENROWSET không có khả năng lấy biến làm tham số của nó.
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
bạn có thể sử dụng dòng lệnh truy vấn và thực hiện trong MSSQL:
exec xp_cmdshell 'ipconfig'
Điều đó sẽ chỉ hoạt động nếu 'xp_cmdshell' được bật trong cấu hình bảo mật máy chủ – D0dger
--Try kịch bản này nó hoạt động với nhu cầu của tôi. Định dạng lại để đọc nó.
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. Nhận địa chỉ IP của máy chủ trong ASP.NET?
- 2. Curl PHP, truy xuất Địa chỉ IP máy chủ
- 3. Nhận tên máy chủ từ địa chỉ IP
- 4. Chặn địa chỉ IP của máy chủ Appengine?
- 5. Cách lấy địa chỉ IP của máy chủ?
- 6. Cách lấy địa chỉ IP của máy chủ ứng dụng
- 7. Nhận địa chỉ IP của người dùng
- 8. Facebook API: Địa chỉ IP chặn các máy chủ Heroku
- 9. Cách nhận địa chỉ ip của khách hàng/người dùng?
- 10. Cách nhận địa chỉ IP của máy chủ mà HttpWebRequest kết nối với?
- 11. Nhận địa chỉ IP của máy chủ từ đối tượng Yêu cầu/phiên JSP
- 12. Cách lấy tên máy chủ dựa trên địa chỉ IP?
- 13. Địa chỉ IP máy chủ hiển thị PHP
- 14. chuyển đổi địa chỉ IP thành tên máy chủ
- 15. Chứng chỉ SSL có bị ràng buộc với địa chỉ IP của máy chủ không?
- 16. Trang web hiển thị khác với địa chỉ máy chủ cục bộ và địa chỉ IP
- 17. Làm cách nào để tìm địa chỉ IP của máy chủ của tôi bằng PHP (CLI)
- 18. Trong C#, làm cách nào để giải quyết địa chỉ IP của máy chủ?
- 19. SQL lỗi truy vấn máy chủ
- 20. Máy khách Windows Azure có địa chỉ IP 'XXX.XXX.XXX.XX' không được phép truy cập vào máy chủ
- 21. WCF: Cách nhận IP máy chủ hoặc tên máy chủ
- 22. Đơn giản chỉ cần tìm ra địa chỉ IP của máy chủ
- 23. Nhận địa chỉ IP của khách truy cập sau khi biểu mẫu AJAX gửi
- 24. Cách lấy địa chỉ IP của máy khách từ chính SQL Server 2008?
- 25. Gửi tiêu đề máy chủ khi truy cập địa chỉ IP trong Firefox
- 26. Hạn chế quyền truy cập vào máy chủ HTTP dựa trên Node.js theo địa chỉ IP
- 27. Làm cách nào để truy vấn địa chỉ IP hiện tại của iPhone?
- 28. Nhận địa chỉ IP của ứng dụng khách trong JSP
- 29. Python: Nhận địa chỉ IP cục bộ được sử dụng để gửi dữ liệu IP đến một địa chỉ IP từ xa cụ thể
- 30. Nhận địa chỉ IP cục bộ
Cảm ơn phản hồi này ... Tôi tin rằng đây là cách xác thực địa chỉ ip của máy chủ nếu bạn cần xác minh từ phía kết nối của máy khách, đặc biệt nếu kết nối của khách hàng được thiết lập với chuỗi kết nối chứa một bí danh SQL hoặc ví dụ được đặt tên như một nguồn dữ liệu. –
upvoted để nói rằng không chỉ để chặn xp_cmdshell nhưng để đảm bảo bảo đảm nghiêm ngặt – SheldonH