2009-08-15 18 views
10

का पोर्ट नंबर मैं सोच रहा हूं कि SQL सर्वर डेटाबेस इंजन द्वारा किन पोर्ट्स का उपयोग किया जाता है? मुझे सुरक्षित बनाने के लिए SQL सर्वर के साथ स्थापित मशीन के विशिष्ट पोर्ट तक पहुंच प्रदान करने के लिए कॉन्फ़िगरेशन स्क्रिप्ट लिखने के लिए ऐसे पोर्ट नंबर की आवश्यकता है। एक संबंधित सवाल यह है कि क्या SQL सर्वर डेटाबेस इंजन सभी क्लाइंट अनुरोधों को पूरा करने के लिए एक स्थिर पोर्ट नंबर का उपयोग करेगा, या प्रत्येक अनुरोध के लिए एक पोर्ट का उपयोग करेगा?एसक्यूएल सर्वर

बीटीडब्ल्यू: मेरी पृष्ठभूमि SQL सर्वर 2008 उद्यम है। पहले से

धन्यवाद, जॉर्ज

उत्तर

4

1433 क्या एसक्यूएल सर्वर डिफ़ॉल्ट रूप से उपयोग करता है। यह कम से कम SQL सर्वर 6.0 के बाद से है।

आम तौर पर, सुरक्षा कारणों से, आप इसे दुनिया में खोलना नहीं चाहते हैं। लोगों को एक आवेदन/वेब सेवा के माध्यम से अपने डीबी केवल तक पहुंचना चाहिए। ट्यूबों पर डायरेक्ट एसक्यूएल सर्वर कनेक्शन सुरक्षा खतरों से भरे हुए हैं।

सभी सत्र इस पोर्ट (वेब ​​साइट के लिए ला पोर्ट 80) का उपयोग करेंगे, लेकिन आप SQL Server कॉन्फ़िगरेशन टूल का उपयोग करके इसे बदल सकते हैं, here का वर्णन किया है।

+0

धन्यवाद, 1. क्या आपका मतलब है कि सभी सत्र केवल SQL सर्वर पर सभी परिचालनों से निपटने के लिए पोर्ट 1433 का उपयोग करेंगे? 2. यदि SQL सर्वर कॉन्फ़िगरेशन अलग है, यानी किसी अन्य पोर्ट का उपयोग करके, परिवर्तन कहां देखना है? – George2

+0

धन्यवाद, इसलिए यह पोर्ट खोलें ADO.Net अनुप्रयोगों के लिए SQL सर्वर 2008 डेटाबेस इंजन तक पहुंचने के लिए पर्याप्त होना चाहिए, सभी उदाहरण एक ही पोर्ट का उपयोग कर रहे हैं? – George2

+1

@ जॉर्ज: हाँ। लेकिन कृपया सुनिश्चित करें कि आप इसे एक्स्ट्रानेट में नहीं खोल रहे हैं! – Eric

1

: 1433 डिफ़ॉल्ट है। हालांकि, इस बंदरगाह को बदलना संभव है, और यदि आप कई उदाहरणों से निपट रहे हैं, तो प्रत्येक के पास एक अलग बंदरगाह होगा।

एक त्वरित गूगल खोज नीचे दिए गए लिंक जाता:

http://decipherinfosys.wordpress.com/2008/01/02/finding-the-port-number-for-a-particular-sql-server-instance/

... और मुझे यकीन है कि टेकनेट अधिक जानकारी उपलब्ध हो जाती हूँ।

+1

... और एरिक ने भी क्या कहा। –

+0

यूआरएल खोला नहीं जा सकता है? – George2

+0

मुझे इसे एक्सेस करने में कोई समस्या नहीं है, या तो क्लिक करके या कॉपी-पेस्ट करें; आप क्या त्रुटि देखते हैं? –

9

डिफ़ॉल्ट उदाहरण डिफ़ॉल्ट रूप से, टीसीपी/1433 पर सुनेंगे। यह शायद नामित पाइप (टीसीपी/445) पर भी सुन सकता है - लेकिन मुझे लगता है कि इन दिनों स्पष्ट रूप से सक्षम होना चाहिए।

नामांकित उदाहरण, जैसे कि एसक्यूएलएक्सप्रेस, गतिशील बंदरगाह पर सुनें। डायनामिक पोर्ट क्लाइंट द्वारा एसक्यूएल सर्वर रेज़ोल्यूशन प्रोटोकॉल (उर्फ एसक्यूएल ब्राउज़र) के माध्यम से हल किया जाता है - जो udp/1434 पर सुनता है। यह गतिशील बंदरगाह पहली स्टार्टअप में चुना जाता है, और आमतौर पर भविष्य के पुनरारंभ (रजिस्ट्री में संग्रहीत) के माध्यम से वही रहेगा - लेकिन यदि कोई विवाद हो, तो SQL एक नया पोर्ट चुन देगा।

आप एक स्थिर पोर्ट का उपयोग करने के लिए उत्पादन SQL सर्वर के सभी कॉन्फ़िगर कर सकते हैं, और आम तौर पर कॉन्फ़िगर कर सकते हैं। यह फ़ायरवॉलिंग अधिक आसान बनाता है।

एकमात्र कारण है कि आपको नामित उदाहरण डालना है, कहें, एक कनेक्शन स्ट्रिंग ऐसा है कि क्लाइंट गतिशील बंदरगाह के लिए एसएसआरपी से पूछना जानता है। यदि यह एक स्थिर या अन्यथा ज्ञात बंदरगाह है, तो आप इंस्टेंस नाम को छोड़कर क्लाइंट को Server=server.com:port पर इंगित कर सकते हैं।

+0

धन्यवाद मार्क, मैं उलझन में हूं कि आपका क्या मतलब है - "लेकिन अगर कोई विवाद हो, तो एसक्यूएल एक नया बंदरगाह चुनेगा।" विशेष रूप से इसका मतलब है कि एक विवाद है। क्या आपका मतलब है कि यदि गतिशील पोर्ट SQL सर्वर के अलावा अन्य प्रक्रिया द्वारा कब्जा कर लिया गया है, तो एक नया बंदरगाह चुना जाएगा? – George2

+0

मैं आपसे पुष्टि करना चाहता हूं कि यदि हम नो-डिफॉल्ट पोर्ट नंबर का उपयोग करते हैं, और कनेक्शन स्ट्रिंग में हम स्पष्ट रूप से पोर्ट नंबर निर्दिष्ट नहीं करते हैं, तो SQL सर्वर और क्लाइंट हमेशा उपयोग करने के लिए पोर्ट नंबर खोजने के लिए SSRP का उपयोग करने में सक्षम होगा ? – George2

+1

हां - यदि "पसंदीदा" पोर्ट (पहले रन पर चुना गया) उपयोग में है, तो SQL स्टार्टअप पर एक नया चयन करेगा। और हाँ, जब तक आप udp/1434 और SQL सर्वर ब्राउज़र सेवा चलाना चाहते हैं। http://msdn.microsoft.com/en-us/library/ms181087.aspx –

1

कभी कभी बंदरगाह रजिस्ट्री HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SQL सर्वर \ SQLEXPRESS \ MSSQLServer \ SuperSocketNetLib \ टीसीपी पर regedit.exe का उपयोग करने में http://www.php.net/manual/en/function.mssql-connect.php#76256 देखो से नहीं 1433

है।

नाम में से एक वैल्यू जोड़े का नाम टीसीपीपोर्ट और एक मान है, जो कि पोर्ट सर्वर है जो SQL सर्वर सुन रहा है।

4

एक बहुत आसान और कार्यक्रम संबंधी रास्ता सिर्फ sys.dm_exec_connections में local_tcp_port स्तंभ क्वेरी करने के लिए के लिए है: कि कोई परिणाम तो यह शायद इसलिए है क्योंकि सर्वर इस मशीन पर है

select local_tcp_port from sys.dm_exec_connections where local_tcp_port is not null 

और वहाँ कोई नहीं है अन्य मशीनों से कनेक्शन, इसलिए कोई टीसीपी कनेक्शन नहीं हैं।

उस स्थिति में, यदि आप sqlcmd से पूछताछ कर रहे हैं तो बस सर्वर नाम के सामने "tcp:" डालें, उदा।

sqlcmd -E -S tcp:(local) 

या यदि आप SqlClient से जुड़ रहे हैं, तो आप "नेटवर्क लाइब्रेरी = dbmssocn" टीसीपी, उदा मजबूर करने के लिए जोड़ सकते हैं

string connStr = "Server=(local); Integrated Security=true; Network Library=dbmssocn"; 
+1

ग्रेट समाधान - धन्यवाद। – JohnLBevan

संबंधित मुद्दे