2012-06-27 39 views
15

Có thể kết nối với SQL Server bằng cách sử dụng xác thực Windows/bảo mật tích hợp từ máy Mac không? Tôi đang sử dụng trình điều khiển JDBC loại 4 do Microsoft cung cấp. Giao diện người dùng (một ứng dụng biểu mẫu) được mã hóa bằng Java. Mọi thứ hoạt động hoàn hảo trên Windows nhưng một người trong văn phòng sử dụng máy Mac.Xác thực Windows cho SQL Server bằng JBDC trên máy Mac

Điều này có khả thi không? FYI, tôi chưa bao giờ sử dụng máy Mac vì vậy tôi rất nhiều người mới với họ. Tôi đã tìm kiếm trên Internet nhưng chưa tìm được giải pháp. Cảm ơn bạn trước.

Trả lời

4

Using Kerberos Integrated Authentication to Connect to SQL Server

Bắt đầu từ Microsoft JDBC Driver 4.0 cho SQL Server, một ứng dụng có thể sử dụng authenticationScheme tài sản kết nối để cho biết rằng nó muốn kết nối với một cơ sở dữ liệu sử dụng loại 4 Kerberos tích hợp xác thực .


Các jTDS JDBC driver cho SQL Server hỗ trợ Windows xác thực chỉ đơn giản bằng cách sử dụng lĩnh vực sở hữu như mô tả trong FAQ.

miền

Chỉ định miền Windows để xác thực. Nếu hiện tại và người dùng tên và mật khẩu được cung cấp, jTDS sử dụng Windows (NTLM) xác thực thay cho xác thực SQL thông thường Server (ví dụ: người dùng và mật khẩu được cung cấp là tên miền và mật khẩu người dùng). Điều này cho phép khách hàng không phải của Windows đăng nhập vào các máy chủ chỉ được định cấu hình để chấp nhận xác thực Windows.

Nếu thông số tên miền hiện diện nhưng không có tên người dùng và mật khẩu được cung cấp, jTDS sử dụng thư viện Đơn đăng nhập riêng và ghi nhật ký bằng thông tin đăng nhập của người dùng Windows (để làm việc này rõ ràng là cần phải trên Windows, đăng nhập vào một miền và cũng có thư viện SSO được cài đặt - tham khảo README.SSO trong bản phân phối trên cách thực hiện việc này).

20

Thông tin này khó có thể thực hiện được theo kinh nghiệm của tôi. Tất cả các tìm kiếm của tôi đều xuất hiện sai thông tin (lỗi thời) vì Microsoft đã thay đổi các quy tắc và thêm tham số authenticationScheme. Để giúp người tiếp theo, dưới đây là ví dụ về chuỗi kết nối hoạt động:

jdbc:jtds:sqlserver://123.123.123;instance=server1;databaseName=students;integratedSecurity=true;authenticationScheme=JavaKerberos 

Cũng trong thuộc tính trình điều khiển được đặt "Domain". Không bao gồm tên miền trong bất kỳ cài đặt tên người dùng nào.

Điều này đã được kiểm tra bằng cách sử dụng Squirrel SQL (Java) với các jtd trên Mac OSX. Hy vọng câu trước đó có cụm từ tìm kiếm mà ai đó có thể sử dụng, những người cần biết thông tin này.

+0

Đây là nơi duy nhất tôi tìm thấy những thông tin chính xác. –

+0

Khách hàng: Grails/Groovy 2.0.4, trình điều khiển jtds MacOSX (dưới nhật thực). Máy chủ: MSSQL 2008, sử dụng xác thực cửa sổ. –

+1

Điều đáng nói là bạn cần tải xuống trình điều khiển jTDS (http://jtds.sourceforge.net/index.html), có vẻ như đây là trình điều khiển duy nhất có tích hợp Kerberos. Tôi biết nó là trong chuỗi kết nối nhưng một số người có thể bỏ lỡ nó và không kết nối bằng cách sử dụng các trình điều khiển khác. – lotif

2

Tôi sử dụng jTDS trên máy mac (10.9).

Sử dụng trình điều khiển này, bạn cần chỉ định tên người dùng và mật khẩu như thường lệ, sự khác biệt duy nhất là bạn cần chỉ định miền = WHATEVERTHENTDOMAIN trong chuỗi kết nối (hoặc thuộc tính kết nối nếu bạn muốn).

Vì vậy, một chuỗi kết nối mẫu là:

jdbc:jtds:sqlserver://db_server:1433/DB_NAME;domain=NT_DOMAIN_NAME 

Người tài xế jTDS sau đó sử dụng NTLM để đăng nhập vào lĩnh vực quy định với tên người dùng và mật khẩu.

0

Đây là một bài đăng cũ nhưng có thể có liên quan đến một số người. Xem khác SO post mô tả cách kết nối với Máy chủ SQL với Xác thực Windows từ máy Linux thông qua JDBC. Điều này sẽ làm việc trên mac là tốt.

0

jTDS kém hơn so với trình điều khiển JDBC của Microsoft (đặc biệt, nó không thể tìm ra các loại thông số trong một tuyên bố chuẩn bị)

Có, bạn có thể xác thực với MS SQL Server sử dụng Active Directory xác thực, như Active Directory là chỉ Kerberos + LDAP, đó là mã nguồn mở và thực hiện trên Mac

Kerberos cấu hình /etc/krb5.conf:

[libdefaults] 
default_realm = YOUR_REALM.NET 

[realms] 
YOUR_REALM.NET = { 
    kdc = host.your-domain.net 
} 

tôi cần phải sử dụng tên miền đầy đủ của KDC, không chỉ tên miền

JDBC Connection String:

jdbc:sqlserver://$host;database=$db;integratedSecurity=true;authenticationScheme=JavaKerberos 

Nếu $host không có một SPN của MSSQLSrv/$host, thêm serverSp=$SPN để kết nối chuỗi JDBC

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