2010-05-08 48 views
5

Tôi có miền Windows trong đó máy đang chạy SQL Server 2005 và được cấu hình để chỉ hỗ trợ xác thực Windows. Tôi muốn chạy một ứng dụng C# client trên một máy tính trên cùng một mạng, nhưng nó KHÔNG ở trên miền và truy cập một cơ sở dữ liệu trên cá thể SQL Server 2005.Truy cập SQL Server 2005 từ máy không phải miền bằng cách sử dụng xác thực Windows

Tôi nghĩ rằng nó sẽ là một vấn đề đơn giản làm một cái gì đó như thế này:

string connectionString = "Data Source=server;Initial Catalog=database;User Id=domain\user;Password=password"; 
SqlConnection connection = new SqlConnection(connectionString); 
connection.Open(); 

Tuy nhiên, điều này không: lỗi client-side là:

System.Data.SqlClient. SqlException: Đăng nhập không thành công cho miền của người dùng \ user ' và lỗi phía máy chủ là: Lỗi 18456, Mức độ nghiêm trọng 14, Tiểu bang 5

Tôi đã thử v những điều kỳ quặc bao gồm thiết lập bảo mật tích hợp thành true và false, và \ thay vì \ trong Id người dùng, nhưng không thành công. Nói chung, tôi biết rằng nó có thể kết nối với trường hợp SQL Server 2005 từ một máy tính không tên miền (ví dụ, tôi đang làm việc với một ứng dụng dựa trên Linux mà vui vẻ thực hiện điều này), nhưng tôi không dường như có thể tìm ra cách để làm điều đó từ máy Windows.

+0

Loại ứng dụng nào bạn đang cố kết nối với máy chủ SQL? Ứng dụng web? –

+0

Nó chỉ là một ứng dụng C# mà tôi chạy hoặc thông qua Visual Studio hoặc tại dòng lệnh. – user304582

Trả lời

0

Bạn đã thử kết nối với machineName \ UserName chưa? Tôi cũng tưởng tượng rằng một người dùng như vậy nên được tạo ra trong cơ sở dữ liệu SQL tốt - đúng không?

+0

Hi - ý tưởng thú vị, nhưng không có tôi không - không có người dùng machineName \ UserName trong trường hợp SQL Server. – user304582

5

Với Studio quản lý khi kết nối với máy chủ trên miền khác qua Xác thực Windows, bạn cần sử dụng Cơ sở "runas" khi khởi động ứng dụng.

runas /user:OTHERDOMAIN\OTHERUSERNAME /netonly 
"C:\Program Files\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\Ssms.exe" 

Có thể bạn có thể thử một điều tương tự khi bắt đầu ứng dụng của mình?

+0

Hi - thú vị, nhưng tôi runas không phải là một possibiity ở đây. – user304582

+0

Điều này thật tuyệt vời, hoạt động như một sự quyến rũ đối với tôi! Cảm ơn bạn!! – wsanville

1

Có thể tạo người dùng cục bộ trên mỗi máy với cùng tên người dùng và mật khẩu Khi người dùng đã được tạo cho người dùng trên máy truy cập máy chủ SQL vào máy chủ SQL, trên máy khác của bạn, ứng dụng của bạn phải đang chạy với tư cách là người dùng mới được tạo, nếu là một ứng dụng web, chỉ cần thay đổi cài đặt của ứng dụng.

+0

Xin lỗi, tôi không có khả năng tạo người dùng cục bộ trên máy khách hoặc máy chủ SQL. – user304582

3

(Câu trả lời của Martin Smith) Tôi sử dụng RUNAS/NETONLY mọi lúc để chạy SSMS và studio BI dev và Visual Studio IDE và các ứng dụng của bên thứ ba khác trên máy chủ trên miền mà chúng tôi không xác thực. Tôi không chắc chắn lý do tại sao bạn không thể làm điều này - bạn phải bằng cách nào đó có một tài khoản trên tên miền mà làm việc với SQL Server nếu bạn đang sử dụng bảo mật tích hợp.

Ngoài ra, tôi đã sửa đổi một trong các chương trình C# chính của tôi để sử dụng CreateProcessWithLogonW với LOGON_NETCREDENTIALS_ONLY (How to build RUNAS /NETONLY functionality into a (C#/.NET/WinForms) program?) để nó nhắc tên người dùng và mật khẩu và sau đó tự khởi chạy lại.

Sử dụng cùng một API, tôi cũng đã tạo phiên bản RUNAS/NETONLY sẽ chấp nhận mật khẩu trên dòng lệnh, vì RUNAS sẽ KHÔNG cho phép mật khẩu trên dòng lệnh. Rõ ràng, đây là một rủi ro bảo mật vốn có, và tôi không sử dụng nó thường xuyên.

Như một vấn đề hoàn chỉnh, cũng có phần mở rộng vỏ tuyệt vời này: http://technet.microsoft.com/en-us/sysinternals/cc300361.aspx - phần mở rộng Run As Shell thông thường không có khả năng tương đương với/NETONLY.

Các vấn đề liên quan