จะค้นหาพอร์ตสำหรับ MS SQL Server 2008 ได้อย่างไร


107

ฉันใช้ MS SQL Server 2008 บนเครื่องภายในของฉัน ฉันรู้ว่าพอร์ตเริ่มต้นคือ 1433 แต่มีบางอย่างที่พอร์ตนี้ไม่รับฟัง SQL เป็นรุ่น Express

ฉันได้ลองบันทึก, SQL Server Management Studio, รีจิสตรีและขั้นตอนการจัดเก็บเพิ่มเติมสำหรับการค้นหาพอร์ตแล้ว แต่ฉันไม่พบ โปรดช่วยฉันด้วย ขอบคุณ.


ฉันกำลังอัปเดตคำถามด้วยแหล่งข้อมูลอื่น ๆ ที่ฉันดูเพื่อให้ฉันมีบุ๊กมาร์กของคำถามเหล่านี้และคนอื่น ๆ ก็สามารถใช้ประโยชน์ได้เช่นกัน blogs.msdn.com/sql_protocols/archive/2008/11/05/... decipherinfosys.wordpress.com/2008/01/02/... dumbledad.wordpress.com/2008/07/09/...
royalghost

ฉันใช้ TCP View เพื่อดูพอร์ตที่กำลังทำงานอยู่ ฉันแปลกใจที่เห็นว่าเซิร์ฟเวอร์ใช้พอร์ตไดนามิกแทน 1433 แม้ว่าจะติดตั้งเป็นอินสแตนซ์เริ่มต้นแล้วก็ตาม ฉันยังยกเลิกการติดตั้งรุ่นด่วนและติดตั้งฉบับเต็มหลังจากนั้นฉันเท่านั้นที่เห็นกระบวนการเป็น sqlservr.exe: 5272 และสมมติฐานของฉันคือฟังที่พอร์ต 5272
royalghost

คำตอบ:


140

คลิกที่Startปุ่มใน Windows

ไปที่ All Programs -> Microsoft SQL Server 2008 -> Configuration Tools -> SQL Server Configuration Manager

คลิกที่SQL Native Client 10.0 Configuration -> Client Protocols -> TCP/IP ดับเบิลคลิก (คลิกขวาเลือกProperties) TCP/IPบน

คุณจะพบDefault Port 1433.

ขึ้นอยู่กับการเชื่อมต่อหมายเลขพอร์ตอาจแตกต่างกันไป


บนคอมพิวเตอร์ของฉันใช้ Windows 10 และ SQL Server 2012 Express ที่ติดตั้งSQL Server Configuration Managerไม่ได้อยู่ในเมนู Start ของ Windows แต่สามารถพบได้ในการจัดการคอมพิวเตอร์ MMC snap-in ภายใต้การบริการและการประยุกต์ใช้งานกลุ่ม พอร์ตไดนามิกยังไม่อยู่ภายใต้รายการ 'SQL native client configuration' (ซึ่งเป็นเวอร์ชัน "11.0" สำหรับฉัน) แต่อยู่ภายใต้รายการการกำหนดค่าเครือข่ายเซิร์ฟเวอร์ SQL (และบนแท็บที่อยู่ IPของหน้าต่างคุณสมบัติโปรโตคอลTCP / IPที่ ด้านล่างสุดในการตั้งค่าTCP Dynamic Ports )
Kenny Evitt

คำตอบนี้หมายถึงพอร์ตไคลเอนต์ไม่ใช่พอร์ตเซิร์ฟเวอร์ซึ่งเป็นสิ่งที่ถูกถามในคำถามเดิม คำตอบจาก @ Brothers28 ด้านล่างนี้ถูกต้องกว่า
Slogmeister Extraordinaire

52

คุณยังสามารถดูด้วยไฟล์

netstat -abn

มันให้พอร์ตที่มีแอพพลิเคชั่นที่เกี่ยวข้องซึ่งทำให้พวกเขาเปิด

แก้ไขหรือTCPView


คุณช่วยแจ้งให้เราทราบได้ไหมว่า MS SQL Server 2008 มีชื่อว่าอะไรเป็นแอปพลิเคชัน
royalghost

2
ควรเป็น sqlservr.exe (ฉันไม่มีให้ตรวจสอบ)
rslite

1
สิ่งนี้ได้ผลสำหรับฉัน หมายเลขพอร์ตอยู่ในบรรทัดด้านบน [sqlservr.exe]
Zane

ฉันพบมันภายใต้ Ssms.exe
ThiagoPonte

49

นี่คือ 5 วิธีที่ฉันพบ:

  • วิธีที่ 1: ตัวจัดการการตั้งค่าคอนฟิกเซิร์ฟเวอร์ SQL
  • วิธีที่ 2: Windows Event Viewer
  • วิธีที่ 3: บันทึกข้อผิดพลาดของเซิร์ฟเวอร์ SQL
  • วิธีที่ 4: sys.dm_exec_connections DMV
  • วิธีที่ 5: การอ่านรีจิสทรีโดยใช้ xp_instance_regread

วิธีที่ 4: sys.dm_exec_connections DMV
ฉันคิดว่านี่เป็นวิธีที่ง่ายที่สุด ...
สถานะเซิร์ฟเวอร์ส่งคืนDMVที่สามารถใช้เพื่อตรวจสอบอินสแตนซ์เซิร์ฟเวอร์ SQL เราสามารถใช้sys.dm_exec_connections DMV เพื่อระบุหมายเลขพอร์ตที่อินสแตนซ์เซิร์ฟเวอร์ SQL กำลังรับฟังโดยใช้โค้ด T-SQL ด้านล่าง:

SELECT local_tcp_port
FROM   sys.dm_exec_connections
WHERE  session_id = @@SPID
GO

Result Set:
local_tcp_port
61499

(1 row(s) affected)

วิธีที่ 1: ตัวจัดการการตั้งค่าคอนฟิกเซิร์ฟเวอร์ SQL

ขั้นตอนที่ 1. คลิก Start> All Programs> Microsoft SQL Server 2012> Configuration Tools> SQL Server Configuration Manager

ขั้นตอนที่ 2. ไปที่ SQL Server Configuration Manager> SQL Server Network Configuration> Protocols สำหรับ

ขั้นตอนที่ 3. คลิกขวาที่ TCP / IP และเลือก Properties

ป้อนคำอธิบายภาพที่นี่

ขั้นตอนที่ 4. ในกล่องโต้ตอบคุณสมบัติ TCP / IP ไปที่แท็บที่อยู่ IP และเลื่อนลงไปที่กลุ่ม IPAll

ป้อนคำอธิบายภาพที่นี่

หาก SQL Server หากกำหนดค่าให้ทำงานบนพอร์ตแบบคงที่จะพร้อมใช้งานในกล่องข้อความพอร์ต TCP และหากกำหนดค่าไว้บนพอร์ตไดนามิกพอร์ตปัจจุบันจะพร้อมใช้งานในกล่องข้อความ TCP Dynamic Ports ที่นี่อินสแตนซ์ของฉันกำลังฟังพอร์ตหมายเลข 61499

ดูวิธีการอื่น ๆ ได้ที่นี่: http://sqlandme.com/2013/05/01/sql-server-finding-tcp-port-number-sql-instance-is-listening-on/


1
ทำงานให้ฉัน ฉันลองใช้คุณสมบัติ TCP / IP จาก SQL Native Client Configuration และนั่นกำลังส่งคืนค่าเริ่มต้น 1433 แต่เมื่อฉันตรวจสอบพอร์ต TCP Dynamic จาก SQL Server Network Configuration ฉันพบว่าพอร์ตคือ 67244 และหลังจากนั้นฉันก็สามารถเชื่อมต่อกับพอร์ตนั้นได้สำเร็จ +1
รูเบน

17

ฉันเจอสิ่งนี้เพราะฉันมีปัญหาในการสร้างการเชื่อมต่อระยะไกลและไม่เข้าใจว่าทำไมการตั้งค่าพอร์ต 1433 ในไฟร์วอลล์จึงไม่ทำงาน ในที่สุดฉันก็มีภาพเต็มแล้วฉันจึงคิดว่าฉันควรแบ่งปัน

ก่อนอื่นคือต้องเปิดใช้งาน "TCP / IP" โดยใช้ SQL Server Configuration Manager ภายใต้โปรโตคอลสำหรับ SQLEXPRESS!

เมื่อมีการใช้อินสแตนซ์ที่มีชื่อ ("SQLExpress" ในกรณีนี้) สิ่งนี้จะรับฟังบนพอร์ตไดนามิก ในการค้นหาพอร์ตไดนามิกนี้คุณมีสองตัวเลือก เพื่อชื่อไม่กี่:

  • การตรวจสอบERRORLOGSQL Server ที่อยู่ใน'{MS SQL Server Path}\{MS SQL Server instance name}\MSSQL\Log'(ข้างในคุณจะพบบรรทัดที่คล้ายกับสิ่งนี้: "2013-07-25 10:30:36.83 Server Server is listening on [ 'any' <ipv4> 51118]"-> ดังนั้น 51118 จึงเป็นพอร์ตไดนามิกในกรณีนี้

  • ตรวจสอบรีจิสทรี: สำหรับกรณีของฉันHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\{MSSQL instance name}\MSSQLServer\SuperSocketNetLib\Tcp\IPAllTcpDynamicPorts=51118

    แก้ไข : {MSSQL instance name}เป็นสิ่งที่ชอบ: MSSQL10_50.SQLEXPRESSไม่ใช่เท่านั้นSQLEXPRESS

แน่นอนว่าการอนุญาตให้ใช้พอร์ต TCP นี้ในไฟร์วอลล์และสร้างการเชื่อมต่อระยะไกลโดยการส่งผ่าน: "x.x.x.x,51118"(โดยที่ xxxx คือ ip ของเซิร์ฟเวอร์) ได้แก้ไขแล้ว ณ จุดนี้

แต่แล้วผมต้องการที่จะเชื่อมต่อระยะไกลโดยผ่านในชื่อของอินสแตนซ์ (เช่นx.x.x.x\SQLExpress) นี่คือเมื่อบริการ SQL Browser เข้ามามีบทบาท นี่คือยูนิตที่แก้ไขชื่ออินสแตนซ์ในพอร์ต 51118 บริการ SQL Browser ฟังบนพอร์ต UDP 1434 (มาตรฐานและแบบคงที่) ดังนั้นฉันต้องอนุญาตสิ่งนี้ในไฟร์วอลล์ของเซิร์ฟเวอร์ด้วย

หากต้องการขยายคำตอบที่แท้จริง: หากมีคนอื่นไม่ชอบพอร์ตไดนามิกและต้องการพอร์ตแบบคงที่สำหรับอินสแตนซ์ SQL Server ของเขาควรลองใช้ลิงก์นี้


1
+1 สำหรับบริการ SQL Browser นี่เป็นกุญแจสำคัญในการทำงานของ SQL Express กับหมายเลขพอร์ต
peterG

11

ในบันทึก ERROLOG สำหรับบรรทัดด้านล่าง ถ้าคุณไม่เห็นมันแสดงว่า SQL Server ไม่ได้เปิดใช้งานสำหรับการเข้าถึงระยะไกลหรือไม่ใช่แค่ผ่าน TCP คุณสามารถเปลี่ยนแปลงได้ผ่านทางตัวจัดการการตั้งค่าคอนฟิกเซิร์ฟเวอร์ SQL

Server is listening on [ 192.128.3.2 <ipv4> 1433].

ฉันไม่เห็นบันทึกนั้น แต่บน SQL Server Management Studio ภายใต้ Connections "อนุญาตการเชื่อมต่อระยะไกลไปยังเซิร์ฟเวอร์นี้" ถูกตรวจสอบ ดังนั้นความเข้าใจของฉันคืออนุญาตให้เชื่อมต่อระยะไกลได้
royalghost

@royal: นอกจาก 'อนุญาตการเชื่อมต่อระยะไกล' แล้วคุณยังต้องเปิดใช้งานโปรโตคอล TCP ด้วย ตอนนี้เซิร์ฟเวอร์น่าจะฟังเฉพาะ NP
Remus Rusanu

ดูคำตอบด้านล่างจาก @morteza เพื่ออ่านบันทึกผ่านแบบสอบถาม SQL xp_readerrorlog 0, 1, N'Server is listening on'
Tilo

8

ฉันแก้ไขปัญหาโดยการเปิดใช้งาน TCP / IP โดยใช้ตัวจัดการการกำหนดค่าเซิร์ฟเวอร์ SQL ภายใต้โปรโตคอลสำหรับ SQLEXPRESS2008 ฉันเริ่มบริการใหม่และตอนนี้ "เซิร์ฟเวอร์กำลังฟังอยู่" ปรากฏขึ้นในไฟล์ ERRORLOG


8

ลองสิ่งนี้ (ต้องมีการเข้าถึงsys.dm_exec_connections):

SELECT DISTINCT 
    local_tcp_port 
FROM sys.dm_exec_connections 
WHERE local_tcp_port IS NOT NULL

3
FYI: หากเซิร์ฟเวอร์ SQL ไม่มีการเชื่อมต่อแบบเปิดก็จะไม่แสดงอะไรเลย
Tilo

6
USE master
GO
xp_readerrorlog 0, 1, N'Server is listening on', 'any', NULL, NULL, N'asc' 
GO

[ระบุพอร์ตที่ใช้โดยอินสแตนซ์ที่มีชื่อของ SQL Server Database Engine โดยการอ่านบันทึกข้อผิดพลาดของเซิร์ฟเวอร์ SQL]


1
ขอบคุณคำแนะนำที่ดี Morteza ฉันได้รับข้อผิดพลาดจากการใช้ด้านบนใน SQL2012 แต่สิ่งต่อไปนี้เพียงพอสำหรับความต้องการของฉัน: XP_READERRORLOG 0, 1, N'Server กำลังฟังอยู่ '
mattpm

คัดลอกที่ได้รับข้อผิดพลาดกับข้อความค้นหาของคุณ แต่ใช้งานได้ xp_readerrorlog 0, 1, N'Server is listening on'
Tilo

6

คุณสามารถใช้สองคำสั่งนี้: tasklistและnetstat -oan

Tasklist.exeเหมือนtaskmgr.exeแต่อยู่ในโหมดข้อความ

ด้วยtasklist.exeหรือtaskmgr.exeคุณสามารถรับ PID ของsqlservr.exe

ด้วยnetstat -oanจะแสดง PID การเชื่อมต่อและคุณสามารถกรองได้

ตัวอย่าง:

C:\>tasklist | find /i "sqlservr.exe"
sqlservr.exe  1184 Services    0 3.181.800 KB

C:\>netstat -oan | find /i "1184"
TCP  0.0.0.0:1280  0.0.0.0:0  LISTENING  1184

ในตัวอย่างนี้พอร์ต SQLServer คือ 1280

ดึงมาจาก: http://www.sysadmit.com/2016/03/mssql-ver-puerto-de-una-instancia.html


5

ฉันใช้สคริปต์ต่อไปนี้ใน SSMS

SELECT
     s.host_name
    ,c.local_net_address
    ,c.local_tcp_port
    ,s.login_name
    ,s.program_name
    ,c.session_id
    ,c.connect_time
    ,c.net_transport
    ,c.protocol_type
    ,c.encrypt_option
    ,c.client_net_address
    ,c.client_tcp_port
    ,s.client_interface_name
    ,s.host_process_id
    ,c.num_reads as num_reads_connection
    ,c.num_writes as num_writes_connection
    ,s.cpu_time
    ,s.reads as num_reads_sessions
    ,s.logical_reads as num_logical_reads_sessions
    ,s.writes as num_writes_sessions
    ,c.most_recent_sql_handle
FROM sys.dm_exec_connections AS c
INNER JOIN sys.dm_exec_sessions AS s
    ON c.session_id = s.session_id

--filter port number
--WHERE c.local_tcp_port <> 1433

ไม่แน่ใจว่าเหตุใดจึงถูกลดคะแนนจึงไม่ได้ให้คำตอบในทันที แต่ให้คำตอบและอื่น ๆ อีกมากมาย การเพิ่มสิ่งนี้ในรายการคำถามที่มีประโยชน์ของฉัน
Tony

เช่นเดียวกับข้อความค้นหามากดูเหมือนว่าจะไม่แสดงว่าไม่มีการเปิด / สร้างการเชื่อมต่อหรือไม่
Tilo

4

นอกจากนี้ยังสามารถทำได้ผ่านการสแกนพอร์ตซึ่งเป็นวิธีเดียวที่เป็นไปได้หากคุณไม่มีสิทธิ์เข้าถึงเซิร์ฟเวอร์ระยะไกลของผู้ดูแลระบบ

การใช้ Nmap ( http://nmap.org/zenmap/ ) เพื่อทำการ "Intense TCP scan" จะให้ผลลัพธ์เช่นนี้สำหรับอินสแตนซ์ทั้งหมดบนเซิร์ฟเวอร์:

[10.0.0.1\DATABASE]    
Instance name: DATABASE
Version: Microsoft SQL Server 2008 R2 RTM    
Product: Microsoft SQL Server 2008 R2    
Service pack level: RTM    
TCP port: 49843    
Named pipe: \\10.0.0.1\pipe\MSSQL$DATABASE\sql\query

หมายเหตุสำคัญ:การทดสอบการที่มีการวิเคราะห์แบบสอบถามหรือ Studio จัดการเซิร์ฟเวอร์ MS SQL คุณต้องฟอร์มชื่อเซิร์ฟเวอร์และพอร์ตของคุณแตกต่างกว่าปกติคุณจะเชื่อมต่อกับพอร์ตผ่าน HTTP เช่นใช้เครื่องหมายจุลภาคแทนลำไส้ใหญ่

  • ชื่อเซิร์ฟเวอร์สตูดิโอจัดการ: 10.0.0.1,49843
  • สตริงการเชื่อมต่อ: Data Source=10.0.0.1,49843

อย่างไรก็ตาม

  • สตริงการเชื่อมต่อ JDBC: jdbc:microsoft:sqlserver://10.0.0.1:49843;DatabaseName=DATABASE

1

สิ่งนี้ใช้ได้กับ SQL Server 2005 - 2012 ค้นหารหัสเหตุการณ์ = 26022 ในบันทึกข้อผิดพลาดภายใต้โปรแกรมประยุกต์ ซึ่งจะแสดงหมายเลขพอร์ตของเซิร์ฟเวอร์ sql รวมถึงที่อยู่ IP ที่ได้รับอนุญาตให้เข้าถึง


1

นอกเหนือจากสิ่งที่ระบุไว้ข้างต้นฉันต้องเปิดใช้งานทั้งพอร์ต TCP และ UDP เพื่อให้ SQLExpress เชื่อมต่อจากระยะไกล เนื่องจากฉันมีอินสแตนซ์ที่แตกต่างกันสามแบบในเครื่องพัฒนาของฉันฉันจึงเปิดใช้1430-1435งานทั้ง TCP และ UDP

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.