Cho phép kết nối từ xa cho SQL Server Express 2012


403

Tôi vừa cài đặt SQL Server Express 2012 trên máy chủ nhà của tôi. Tôi đang cố gắng kết nối với nó từ Visual Studio 2012 từ máy tính để bàn của mình và liên tục gặp phải lỗi nổi tiếng:

Xảy ra lỗi liên quan đến mạng hoặc trường hợp cụ thể trong khi thiết lập kết nối với SQL Server. Máy chủ này không tìm thấy hoặc không thể truy cập được. Xác minh rằng tên ví dụ là chính xác và SQL Server được cấu hình để cho phép kết nối từ xa. (nhà cung cấp: Nhà cung cấp ống có tên, lỗi: 40 - Không thể mở kết nối với SQL Server)

Những gì tôi đã làm để cố gắng khắc phục điều này:

  • Chạy Trình quản lý cấu hình máy chủ SQL trên máy chủ và bật Trình duyệt máy chủ SQL
  • Thêm một ngoại lệ Tường lửa Windows trên máy chủ cho TCP, cổng 1433 và 1434 trên mạng con cục bộ.
  • Xác minh rằng tôi có thông tin đăng nhập trên phiên bản SQL Server cho người dùng mà tôi đã đăng nhập như trên máy tính để bàn.
  • Xác minh rằng tôi đang sử dụng Windows xác thực trên phiên bản SQL Server.
  • Liên tục khởi động lại SQL Server và toàn bộ máy chủ dang.
  • Kéo hết tóc tôi ra.

Làm cách nào tôi có thể nhận SQL Server 2012 Express để cho phép kết nối từ xa!?


7
Tôi đã giải quyết bằng cách kích hoạt dịch vụ Trình duyệt SQL Server: D. Cảm ơn đã đăng nó.
alansiqueira27

1
Mở khóa cổng 1433 UDP đã giúp tôi!
Michael

1
Và nếu bạn đang sử dụng máy ảo Azure, đừng quên mở cổng thông qua cổng quản lý của Azure (hoạt động như một tường lửa bên ngoài với tường lửa của chính VM ...). Giống như vậy: stackoverflow.com/questions
432251382 / Google

Đối với những người thắc mắc rằng Trình quản lý cấu hình máy chủ Sql đã biến mất trong các phiên bản mới hơn, hãy truy cập vào đây
StuartLC

Câu trả lời:


731

Vâng, tôi vui mừng hỏi . Giải pháp cuối cùng tôi phát hiện ra là ở đây:

Làm cách nào để định cấu hình SQL Server Express để cho phép kết nối tcp / ip từ xa trên cổng 1433?

  1. Chạy Trình quản lý cấu hình máy chủ SQL.
  2. Chuyển đến Cấu hình mạng máy chủ SQL> Giao thức cho SQLEXPRESS.
  3. Đảm bảo TCP / IP được bật.

Cho đến nay, rất tốt, và hoàn toàn mong đợi. Nhưng sau đó:

  1. Nhấp chuột phải vào TCP / IP và chọn Thuộc tính .
  2. Xác minh rằng, trong IP2, Địa chỉ IP được đặt thành địa chỉ IP của máy tính trên mạng con cục bộ.
  3. Cuộn xuống IP ALL.
  4. Hãy chắc chắn rằng cổng TCP độngtrống . (Của tôi được đặt thành một số cổng gồm 5 chữ số.)
  5. Đảm bảo rằng Cổng TCP được đặt thành 1433 . (Của tôi trống.)

(Ngoài ra, nếu bạn làm theo các bước này, không cần thiết phải bật Trình duyệt máy chủ SQL và bạn chỉ cần cho phép cổng 1433 chứ không phải 1434.)

Năm bước bổ sung này là điều tôi không thể nhớ được từng phải làm trong phiên bản SQL Server, Express hay cách khác. Chúng dường như là cần thiết bởi vì tôi đang sử dụng một thể hiện có tên (myservername \ SQLEXPRESS) trên máy chủ thay vì một thể hiện mặc định. Xem tại đây:

Định cấu hình Máy chủ để nghe trên Cổng TCP cụ thể (Trình quản lý cấu hình máy chủ SQL)


7
Nếu SQL Server Express không phải là phiên bản duy nhất, thì có thể cần đến cổng UNASSIGN 1433 trong các phiên bản khác. Tôi đã có một phiên bản mặc định 2008 R2 (MSSQLSERVER) và cách duy nhất tôi có thể kết nối với cả hai từ bên ngoài là gán cổng 1433 cho phiên bản 2012 (mỗi bên trên) và thay đổi gán cổng cho phiên bản mặc định cũ hơn sang TCP Dynamic Cổng = "0" và Cổng TCP = "" (để trống). Làm theo cách khác xung quanh chỉ cho phép truy cập vào thể hiện mặc định.
Robert Calhoun

17
IPAllCài đặt đó là lời khuyên SAVIOR! Của tôi giống như của bạn ...: D
Leniel Maccaferri

18
Trong trường hợp nó giúp được bất cứ ai khác ... điều này có ích, nhưng tôi vẫn không thể kết nối cho đến khi tôi khởi động dịch vụ Trình duyệt SQL Server. (Lưu ý: Tôi đã phải truy cập vào ứng dụng "Dịch vụ" của Windows để thực hiện việc này, vì loại khởi động của dịch vụ Trình duyệt SQL là "Vô hiệu hóa" vì một số lý do. có thể kết nối.)
đồng bóng

9
Trên Windows 8 và SQL 2012 Express SP1 được cài đặt thành phiên bản SQLEXPRESS, tôi đã phải đặt các cổng động thành bất kỳ thứ gì khác ngoài trống (nếu bạn đã xóa nó, đặt thành 0 thì nó sẽ tính lại một cổng ngẫu nhiên mới cho bạn) VÀ cũng mở BOTH TCP Quy tắc cổng đến 1433 và UDP 1434 trong bảng điều khiển Tường lửa nâng cao. Khi các cổng động bị trống, SQL Server chỉ được treo khi khởi động.
Tony Wall

10
Chỉ muốn nói cảm ơn và upvote. Bạn đã tiết kiệm cho tôi rất nhiều thời gian. Bạn có nhớ cập nhật bài viết của bạn với cú pháp kết nối chính xác? Tôi cần sử dụng myserver\sqlexpress,[portnumber]mà không có dấu ngoặc. Lưu ý là có ,và không:
Marco

105

Cách chính xác để kết nối với SQL Server từ xa (không cần mở cổng UDP 1434 và bật Trình duyệt máy chủ SQL) là sử dụng ip và cổng thay vì phiên bản được đặt tên .

Sử dụng ip và cổng thay vì tên được đặt tên cũng an toàn hơn, vì nó làm giảm diện tích bề mặt tấn công.

Có lẽ 2 bức ảnh nói được 2000 từ ...

Phương pháp này sử dụng cổng được chỉ định (đây là điều mà hầu hết mọi người muốn tôi tin) ..

nhập mô tả hình ảnh ở đây

Phương pháp này yêu cầu mở cổng UDP 1434 và Trình duyệt SQL Server đang chạy ..

nhập mô tả hình ảnh ở đây


Bạn có thể giải thích những gì bạn muốn nói bằng cách nói rằng đây là cách "chính xác" để làm điều đó không?
Ryan Lundy

3
@Kyralessa Ha! ... Bây giờ tôi tỉnh táo trở lại sau 4-5 giờ kéo tóc cố gắng kết nối với ví dụ từ xa của tôi, tôi có lẽ nên giải thích rằng 'chính xác' ở đây có nghĩa là được đọc từ ngữ cảnh của tôi. Việc kết nối bằng tên dụ là không chính xác vì tôi không bật Trình duyệt máy chủ SQL.
Rosdi Kasim

Tôi đã thêm một số làm rõ vào câu trả lời của tôi để tránh hiểu lầm.
Rosdi Kasim

1
Cảm ơn;) Khi bạn không có quyền truy cập để chạy dịch vụ trình duyệt, bạn phải chỉ định cổng.
Arman McHitarian

3
cộng 1 để hiển thị rằng MS sử dụng dấu phẩy thay vì các cột làm dấu phân cách cho số cổng
Jorj

32

Một điều nữa...

Kyralessa cung cấp thông tin tuyệt vời nhưng tôi có một điều khác để thêm vào nơi tôi đã bị vấp ngã ngay cả sau bài viết này.

Trong Cấu hình mạng máy chủ SQL> Giao thức cho máy chủ> Đã bật TCP / IP. Nhấp chuột phải vào TCP / IP và chọn thuộc tính. Trong Địa chỉ IP, bạn cần đặt Bật thành Có cho từng loại kết nối mà bạn đang sử dụng.

nhập mô tả hình ảnh ở đây


18

Bạn có thể sử dụng điều này để giải quyết vấn đề này:

Chuyển đến START> EXECUTE và chạy CLICONFG.EXE.

Giao thức Named Faucet sẽ là đầu tiên trong danh sách. Hãy bỏ qua nó và quảng bá TCP / IP.

Kiểm tra ứng dụng kỹ lưỡng.

Tôi hy vọng sự giúp đỡ này.


Wow, thật là một viên ngọc ... cảm ơn. Không bao giờ biết rằng thậm chí tồn tại.
Louis van Tonder

1
Điều này cấu hình CLIENT để sử dụng TCP / IP, không phải máy chủ.
mcr

OMG, nó hoạt động !! chỉ cần đăng nhập để bỏ phiếu cho câu trả lời này. cảm ơn
Aki

15

Bạn cũng có thể thiết lập

Nghe tất cả để KHÔNG

trong hộp thoại giao thức sau đó trong địa chỉ IP IP1 (giả sử)

đặt kích hoạt thành Có,

xác định địa chỉ IP,

đặt TCP Dynamic thành Trống và

Cổng TCP đến 1433 (hoặc bất cứ điều gì)


Làm điều này trên Windows 8.1 với SQL 2012 Express SP1 được cài đặt khiến SQL bị treo khi khởi động :(
Zhaph - Ben Duguid

Tôi đã đặt tất cả các mục IP 1, 2, ..., để bật + kích hoạt, xóa cổng động, xóa cổng và đặt cổng IP ALL thành 1433, sau đó phải thêm quy tắc để mở TCP 1433 và UPD 1434 trong tường lửa (1434 không bắt buộc nếu không sử dụng tên mà chỉ sử dụng số cổng).
Mordachai


11

Tôi đã có vấn đề này gần đây. 2015 tháng 8

Giải quyết bằng cách mở Trình quản lý cấu hình máy chủ SQL

  • Cấu hình mạng máy chủ SQL -> Giao thức cho SQLEXPRESS
  • Thuộc tính trên TCP / IP -> tab Địa chỉ IP
  • Mọi thứ vẫn ở mặc định, chỉ đặt IPALL: Cổng TCP thành 1433

Có thể kết nối với SQL Server Manager với máy: [hostaddress], 1433

Thí dụ:

nhập mô tả hình ảnh ở đây


6

Khi cài đặt SQL Server 2012 Developer Edition, được cài đặt với cài đặt mặc định, tôi chỉ cần tải Trình quản lý cấu hình máy chủ SQL -> Cấu hình mạng máy chủ SQL -> Giao thức cho MSSQLSERVER và thay đổi TCP / IP từ Đã tắt thành Đã bật.


1
Ghi chú nhanh: đối với tôi, điều này đã không làm việc. IP sai đã ở đó vì một số lý do. Tuy nhiên, các bước của Kyralessa đã thực hiện thủ thuật kể từ khi họ tiến hành cập nhật IP.
Brian MacKay

Cái này hoạt động cho một trong những máy chủ của tôi, nhưng không phải cho cái kia.
bắt đầu

5

Tôi đã phải thêm một quy tắc cổng vào trong tường lửa để mở cổng UDP 1434. Đây là một trong những Trình duyệt Máy chủ Sql lắng nghe.


3

Tôi thích cách "Rosdi Kasim" hơn vì không yêu cầu cấu hình chi tiết trên IP.

Tôi chắc chắn sẽ quên nó một lần nữa khi tôi cố gắng lên một máy chủ khác.

Giữ cho nó đơn giản ngu ngốc (KISS) bằng cách đơn giản kích hoạt dịch vụ Trình duyệt máy chủ Sql, sau đó thêm \ SQLEXPRESS phía sau IP khi bạn kết nối máy chủ.

Sử dụng IP trực tiếp mà không có "\ SQLEXPRESS" là điểm thất bại của tôi vì nó không sử dụng cổng mặc định.

Cảm ơn.


3

Tôi gặp vấn đề tương tự với SQL Server 2014 được cài đặt cục bộ. Kết nối bằng cách sử dụng FQDN\InstanceNamesẽ không thành công, trong khi kết nối chỉ sử dụng hostname\InstanceNamecông việc của tôi . Ví dụ: kết nối bằng cách sử dụng mycomputername\sql2014, nhưng sử dụng mycomputername.mydomain.org\sql2014thì không. DNS được giải quyết chính xác, TCP / IP đã được bật trong Trình quản lý cấu hình SQL, các quy tắc Tường lửa của Windows được thêm vào (và sau đó tắt tường lửa để kiểm tra để đảm bảo nó không chặn bất cứ thứ gì), nhưng không có lỗi nào khắc phục được sự cố.

Cuối cùng, tôi đã phải khởi động dịch vụ " Trình duyệt máy chủ SQL " trên Máy chủ SQL và điều đó đã khắc phục sự cố kết nối.

Tôi chưa bao giờ nhận ra rằng dịch vụ Trình duyệt SQL Server thực sự hỗ trợ Máy chủ SQL thực hiện các kết nối; Tôi có ấn tượng rằng nó chỉ đơn giản là giúp tạo ra các danh sách thả xuống khi bạn nhấp vào "duyệt tìm thêm" máy chủ để kết nối, nhưng nó thực sự giúp căn chỉnh các yêu cầu của máy khách với cổng # chính xác để sử dụng, nếu cổng # không được gán rõ ràng (tương tự để làm thế nào các ràng buộc trang web giúp giảm bớt vấn đề tương tự trên một máy chủ web IIS lưu trữ nhiều trang web).

Mục kết nối này là thứ đã cho tôi manh mối về dịch vụ Trình duyệt SQL Server: https://connect.microsoft.com/QueryServer/feedback/details/589901/unable-to-connect-on-localhost-USE-fqdn-machine- Tên

  • khi bạn sử dụng wstst05 \ sqlexpress làm tên máy chủ, mã máy khách sẽ tách tên máy khỏi tên đối tượng và wstst05 được so sánh với tên netbios. Tôi thấy không có vấn đề gì để chúng khớp và kết nối được coi là cục bộ. Từ đó, chúng tôi truy xuất thông tin cần thiết MÀ KHÔNG liên hệ với Trình duyệt SQL và kết nối với phiên bản SQL qua Bộ nhớ dùng chung mà không gặp vấn đề gì.
  • khi bạn sử dụng wstst05.capatest.local \ sqlexpress, mã máy khách không thể so sánh tên (wstst05.capatest.local) với tên netbios (wstst05) và coi kết nối là "từ xa". Đây là do thiết kế và chúng tôi chắc chắn sẽ xem xét cải thiện điều này trong tương lai. Dù sao, do xem xét từ xa kết nối và thực tế đó là một thể hiện được đặt tên, máy khách quyết định rằng nó cần sử dụng SQLBrowser để phân giải tên. Nó cố gắng liên hệ với Trình duyệt SQL trên wstst05.capatest.local (cổng UDP 1434) và dường như phần đó không thành công. Do đó lỗi bạn nhận được.

Lý do cho dịch vụ "Trình duyệt máy chủ SQL" từ TechNet (được tôi nhấn mạnh thêm): https://technet.microsoft.com/en-us/l Library / ms181087 (v ​​= sql.120) .aspx

Từ phần "Sử dụng trình duyệt SQL Server":

Nếu dịch vụ Trình duyệt SQL Server không chạy, bạn vẫn có thể kết nối với SQL Server nếu bạn cung cấp đúng số cổng hoặc đường ống có tên. Chẳng hạn, bạn có thể kết nối với phiên bản mặc định của SQL Server bằng TCP / IP nếu nó đang chạy trên cổng 1433. Tuy nhiên, nếu dịch vụ Trình duyệt SQL Server không chạy, các kết nối sau không hoạt động :

  • Bất kỳ thành phần nào cố gắng kết nối với một thể hiện được đặt tên mà không chỉ định đầy đủ tất cả các tham số (như cổng TCP / IP hoặc đường ống có tên) .
  • Bất kỳ thành phần nào tạo hoặc chuyển thông tin cá thể của máy chủ mà sau này các thành phần khác có thể sử dụng để kết nối lại.
  • Kết nối với một thể hiện được đặt tên mà không cung cấp số cổng hoặc đường ống.
  • Chuyển sang phiên bản được đặt tên hoặc phiên bản mặc định nếu không sử dụng cổng TCP / IP 1433.
  • Dịch vụ chuyển hướng OLAP.
  • Việc liệt kê các máy chủ trong SQL Server Management Studio, Enterprise Manager hoặc Query Analyzer.

Nếu bạn đang sử dụng SQL Server trong kịch bản máy chủ-máy khách (ví dụ: khi ứng dụng của bạn truy cập SQL Server qua mạng), nếu bạn dừng hoặc tắt dịch vụ Trình duyệt SQL Server, bạn phải gán một số cổng cụ thể cho từng phiên bản và viết mã ứng dụng khách của bạn để luôn sử dụng số cổng đó. Cách tiếp cận này có các vấn đề sau :

  • Bạn phải cập nhật và duy trì mã ứng dụng khách để đảm bảo nó được kết nối với cổng thích hợp.
  • Cổng bạn chọn cho mỗi phiên bản có thể được sử dụng bởi một dịch vụ hoặc ứng dụng khác trên máy chủ, khiến cho phiên bản SQL Server không khả dụng.

Và thêm thông tin từ cùng một bài viết từ phần "Cách trình duyệt SQL Server hoạt động":

Bởi vì chỉ một phiên bản của SQL Server có thể sử dụng một cổng hoặc đường ống, các số cổng và tên đường ống khác nhau được gán cho các trường hợp được đặt tên, bao gồm SQL Server Express. Theo mặc định, khi được bật, cả hai phiên bản được đặt tên và SQL Server Express được cấu hình để sử dụng các cổng động, nghĩa là, một cổng khả dụng được gán khi SQL Server khởi động. Nếu bạn muốn, một cổng cụ thể có thể được gán cho một phiên bản của SQL Server. Khi kết nối, khách hàng có thể chỉ định một cổng cụ thể; nhưng nếu cổng được gán động, số cổng có thể thay đổi bất cứ lúc nào SQL Server được khởi động lại, do đó, số cổng chính xác không xác định đối với máy khách. ... Khi máy khách SQL Server yêu cầu tài nguyên Máy chủ SQL, thư viện mạng máy khách sẽ gửi tin nhắn UDP đến máy chủ bằng cổng 1434. Trình duyệt SQL Server phản hồi với cổng TCP / IP hoặc đường ống có tên của phiên bản được yêu cầu.


2

Tôi đã phải thêm cổng thông qua Trình quản lý cấu hình và thêm số cổng trong kết nối sql của tôi [máy chủ] \ [tên ví dụ db], 1433

Lưu ý, (dấu phẩy) giữa tên và cổng


1

Tôi đã có một vấn đề khác với những gì tất cả các câu trả lời đã đề cập cho đến nay!

Tôi nên bắt đầu bằng cách nói rằng tôi đã có nó trong Visual Studio, và không phải SQL Server Express nhưng giải pháp nên hoàn toàn giống nhau.

Chúa ơi, nó thực sự rất đơn giản và có thể hơi ngốc nghếch. Khi tôi cố gắng tạo cơ sở dữ liệu và Visual Studio đã đề xuất tên của SQL Server, nó đã cho tôi tên người dùng Windows của tôi và vì thực sự đó là tên của máy chủ mà tôi đã đặt cho nó.

Trong thực tế, nó thực sự là tên người dùng Windows của tôi + \SQLEXPRESS. Nếu bạn không thay đổi bất kỳ cài đặt nào thì đây cũng có thể là của bạn. Nếu nó hoạt động, ngừng đọc; đây là câu trả lời của tôi. Nếu nó không hoạt động có lẽ tên khác.

Nếu, giống như tôi, bạn chỉ gặp vấn đề này trong Visual Studio để kiểm tra xem cái gì là của bạn theo các bước sau:

  1. Mở biểu tượng SQL Server Management Studio .
  2. Nếu bạn không thấy máy chủ của mình (được đặt bên trái theo mặc định), nhấn F8hoặc đi đến Xem -> Object Explorer .
  3. Nhấp chuột phải vào tên của máy chủ và chọn Thuộc tính (Mục cuối cùng)
  4. Ở phía dưới bên trái, bạn có thể thấy tên thực của máy chủ của mình trong " Máy chủ " (không phải Kết nối, nhưng ở trên nó).

Đây là tên của máy chủ và đây là những gì bạn nên cố gắng kết nối! không phải những gì Visual Studio gợi ý!



1

Trong trường hợp của tôi, cơ sở dữ liệu đã chạy trên cổng không chuẩn. Kiểm tra xem cổng bạn đang kết nối có giống với cổng mà cơ sở dữ liệu đang chạy không. Nếu có nhiều phiên bản của máy chủ SQL, hãy kiểm tra chính xác.


0

Tất cả những gì bạn cần làm là mở cổng có liên quan trên tường lửa của máy chủ.


6
Thật không may, đó không phải là "tất cả những gì bạn cần làm". Có khá nhiều bước khác cần phải được thực hiện, như được nêu trong câu trả lời được chấp nhận ở trên.
sốt

2
Trên thực tế, trong trường hợp của tôi, đây là tất cả những gì tôi cần làm, vì vậy, đánh dấu không công bằng và đầu vào thực sự hữu ích.
MagicalArmouch

1
Thêm một quy tắc để mở cổng 1433 là những gì đã sửa nó cho tôi.
GiddyUpHorsey

Tôi nghĩ thật công bằng khi nói "rất nhiều thứ phải được căn chỉnh, những bước bổ sung cần thiết cho bạn sẽ thay đổi"
Mordachai

Tôi đã phải làm tất cả Kyralessa, và Pete và cái này trước khi tôi có thể dùng Windows 10 phục vụ SQL.
alfadog67

0

Có vấn đề kết nối với SQL Server?

Hãy thử ngắt kết nối tường lửa.

Nếu bạn có thể kết nối với tường lửa bị ngắt kết nối, có thể bạn bỏ lỡ một số quy tắc đầu vào như "nhà môi giới dịch vụ sql", hãy thêm quy tắc nhập này vào tường lửa của bạn:

"KẾT NỐI SQL ADMIN" TCP PORT 1434

"KẾT NỐI SQL ADMIN" UDP PORT 1434

"DỊCH VỤ PHÂN TÍCH SQL" TCP PORT 2383

"DỊCH VỤ PHÂN TÍCH SQL BROWSE" TCP PORT 2382

"SQL DEBUGGER / RPC" TCP PORT 135

"SQL SERVER" TCP PORT 1433 và những người khác nếu bạn có cổng dinamic

"MÔI GIỚI DỊCH VỤ SQL" TCP PORT 4022

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.