Kết nối với SQL Server với Windows xác thực trong một miền khác


74

Tôi đang cố gắng kết nối với SQL Server từ xa trên VPN ở một miền khác. Khi tôi nhập tên Máy chủ trên Máy chủ SQL và chọn Tham số kết nối bổ sung để thêm một số nội dung bổ sung cần thiết cho trường của tôi:

Integrated Security=SSPI; User ID=DOMAIN\username; Password=Password

Tôi nhận được lỗi sau đây:

Đăng nhập thất bại. Đăng nhập là từ một miền không tin cậy và không thể được sử dụng với xác thực Windows.


Vấn đề duy nhất với giải pháp Windows Credential Manager là nếu bạn có nhiều cơ sở dữ liệu bạn hỗ trợ, bạn phải có một mục nhập cho từng mục và cập nhật chúng mỗi khi bạn phải cập nhật mật khẩu tên miền. Đối với một số người có thể cứ sau 30 - 60 ngày.
smehaffie

Bài này có phần liên quan.
RBT

@smehaffie bạn có thể dễ dàng sử dụng tập lệnh và lệnh "cmdkey / add" để duy trì mật khẩu của mình - nó cũng cập nhật.
Magoo

Câu trả lời:


70

Bạn đang cố gắng chuyển thông tin đăng nhập Windows bằng văn bản thuần từ chuỗi kết nối của ứng dụng. Đây đơn giản không phải là cách Windows xác thực hoạt động và phần lớn đánh bại mục đích.

Bạn cũng không thể tạo cùng một tên người dùng với cùng một mật khẩu trong tên miền của riêng bạn và mong muốn nó hoạt động một cách kỳ diệu. Tên miền vẫn là một phần của xác thực - máy của bạn phải là một phần của tên miền hoặc tên miền mà máy của bạn phải được tin cậy bởi tên miền của trường.

Cách giải quyết duy nhất tôi biết là dành cho SSMS và đó là runas /netonlymẹo được mô tả trong câu trả lời này . Điều này đánh lừa Windows để khởi chạy SSMS như thông tin đăng nhập mà bạn chỉ định, chứ không phải của riêng bạn (đây không phải là thứ bạn có thể đặt trong hộp thoại Thuộc tính kết nối của SSMS, đó là cách bạn cần khởi chạy SSMS từ dòng lệnh hoặc phím tắt):

runas /netonly /user:domain\username "C:\path_to\ssms.exe"

Điều này sẽ nhắc bạn nhập mật khẩu của bạn trong miền từ xa. Có vẻ như nó đang sử dụng thông tin đăng nhập Windows cục bộ của bạn, nhưng thực tế không phải vậy .

Có thể nó cũng sẽ hoạt động với Visual Studio, nhưng tôi thực sự không biết.

Vì vậy, lựa chọn của bạn là:

  • có trường đại học cho phép bạn tham gia máy của bạn vào miền
  • có trường đại học thêm tên miền của bạn như một miền đáng tin cậy
  • có một hộp nhảy bên trong VPN cho phép bạn RDP và sử dụng các công cụ kết nối trực tiếp với máy SQL Server
  • sử dụng xác thực SQL
  • thử runas /netonlymẹo với Visual Studio
  • chỉ cần sử dụng runas /netonlymẹo với SSMS

Các runasđiều không làm việc với Visual Studio.
Daniel Hutmacher

Có cách nào để bắt chước hành vi này mà không cần dấu nhắc lệnh không?
Gilles Lesire

1
@Gilles bạn có thể tạo một tệp bó và bấm đúp vào tệp bó hoặc bạn có thể sử dụng chuỗi đó và tạo một lối tắt có thể
Aaron Bertrand

103

Có một cách khác, mà bây giờ tôi sử dụng ưu tiên cho runas /netonlyphương thức này.

Bạn có thể thêm thông tin đăng nhập vào hồ sơ của mình trong Windows bằng Trình quản lý thông tin xác thực được tìm thấy trong bảng điều khiển Windows.

  1. Quản lý chứng chỉ mở
  2. Nhấp vào "Thêm thông tin Windows"
  3. Nhập trường "internet hoặc địa chỉ mạng" với tên và số cổng của phiên bản SQL mà bạn muốn lưu trữ thông tin đăng nhập.

    Ví dụ: UniServer:1433(1433 là cổng mặc định, bạn có thể cần một cổng khác, đặc biệt nếu bạn đang kết nối với một thể hiện được đặt tên)

  4. Nhập "Tên người dùng" (đừng quên bao gồm tên miền, vd MYDOMAIN\MYUSER)
  5. Nhập "Mật khẩu"
  6. Nhấn vào OK

Nếu bạn có tên máy chủ, cổng và thông tin đăng nhập chính xác, giờ đây bạn có thể sử dụng Windows xác thực từ hầu hết các công cụ máy khách, SSMS, Excel, bất cứ điều gì. Tất cả họ sẽ sử dụng các thông tin được lưu trữ.

Mẹo: Đôi khi bạn cần sử dụng FQN cho máy chủ khi thêm thông tin đăng nhập. ví dụ UniServer.UniDomain.org:1433, tất cả phụ thuộc vào chi tiết mạng của bạn.

Dưới đây là bản demo nhanh của phương pháp: http://youtu.be/WiVBPsqB9b4

Việc tôi cố gắng (và không thành công) để kết nối với Máy chủ SQL đang chạy trong máy ảo từ máy tính để bàn của tôi, sau đó thêm thông tin đăng nhập cần thiết và thử lại - thành công.

Mẹo: sử dụng lệnh "cmdkey / add" để tạo tập lệnh và cập nhật thông tin đăng nhập được lưu trữ.


Hấp dẫn! Nó dường như phụ thuộc vào những gì máy khách của bạn nghĩ rằng máy từ xa được gọi chứ không phải là những gì nó thực sự được gọi. Tôi đã đặt một mục được phát minh ("Verysillytest.mwardm") trong tệp máy chủ của mình cho địa chỉ IP (vì những người trong chúng ta truy cập từ bên ngoài tên miền sẽ không làm) và thiết lập thông tin đăng nhập trong tên "Verysillytest.mwardm: 1433 ". Sau đó, tôi có thể kết nối vui vẻ (từ một ứng dụng nhỏ có tên Query Express) bằng tên máy chủ hoặc địa chỉ IP.
mwardm

@mwardm có, đó là lý do tại sao tôi khuyên bạn nên sử dụng ping hoặc nslookup vì nó sẽ cho bạn biết tên chính xác như bạn cần sử dụng, bao gồm cả chi tiết chữ hoa / chữ thường.
Ông Magoo

À, "ping -a" không cho tôi bất cứ thứ gì và nslookup không (ngay lập tức) hoạt động vì tôi không sử dụng máy chủ DNS của tên miền. Đừng lo lắng, tôi thực sự thích sự linh hoạt của việc chỉ cần biết địa chỉ IP (và thông tin đăng nhập) và có thể tạo tên của chính mình!
mwardm

2
Tuyệt vời, nó hoạt động! Tôi chỉ tự hỏi - nó được cho là hoạt động như vậy hay là một lỗi hoặc một thiết kế thất bại về phía SQL Server? Microsoft hoặc những người từ Microsoft quảng cáo ở mọi nơi mà bạn phải có máy kết nối miền, nếu không, không có cách nào để kết nối với SQL Server được thiết lập để chỉ chấp nhận thông tin đăng nhập tên miền.
Dawid Ferenczy Rogožan

BTW Tôi sẽ nói rằng câu trả lời này nên được đánh dấu là được chấp nhận, vì nó dường như là một giải pháp thực sự và câu trả lời khác giống như một cách giải quyết.
Dawid Ferenczy Rogožan
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.