Tôi đang cố kết nối với SQL server 2000
được cài đặt trên Windows server 2003
từ Windows Server 2008 R2
sử dụng mô-đun Python 3.4
và pyodbc
. Các máy chủ đó nằm trong các miền AD khác nhau. Windows only
xác thực được bật trên máy chủ SQL và tôi không thể thay đổi điều đó.Cách sử dụng xác thực cửa sổ để kết nối với máy chủ MS SQL từ máy trạm Windows trong miền khác bằng Python
drv = '{SQL server}'
svr = 'sql.my-domain.local'
usr = 'my-domain.local\testuser'
pwd = 'password'
db = 'testdb'
pyodbc.connect(driver=drv, server=svr, user=usr, password=pwd, database=db)
Kết nối trên không thành công với các lỗi sau:
pyodbc.Error: ('28000', "[28000] [Microsoft][ODBC SQL Server Driver][SQLServer]
Login failed for user 'svx-iroot.local\\sqlexecutive'.
Reason: Not associated with a trusted SQL Server connection. (18452) (SQLDriverConnect)")
Có một số câu hỏi, ví dụ this one, gợi ý thêm trusted_connection='yes'
lập luận để pyodbc
kết nối để hỗ trợ các cửa sổ xác thực nhưng trong trường hợp này nó không giúp bởi vì với tùy chọn này, các thông tin cục bộ được sử dụng và tôi cần cung cấp thông tin xác thực một cách rõ ràng vì máy trạm khởi tạo nằm trong một miền AD khác.
Tạo User DSN
trong ODBC Data Source Administrator
với SQL Server
trình điều khiển không thành công với cùng một lỗi được đề cập ở trên.
Có cách nào để thực hiện công việc này không?
Trong khi đó tôi đã cài đặt FreeTDS
driver cho Windows từ http://sourceforge.net/projects/freetdswindows/ và kết nối thử nghiệm sử dụng tsql
tiện ích làm việc:
tsql -S sql.my-domain.local -U my-domain.local\testuser -P password
Nhưng FreeTDS
lái xe không có sẵn trong ODBC Data Source Administrator
. Trình điều khiển FreeTDS
được sử dụng theo kiểu truyền thống với unixODBC
. Có thể sử dụng trình điều khiển này trong môi trường Windows với pyodbc
không?
Cập nhật:
Hóa ra FreeTDS
nhị phân nêu trên bao gồm unixODBC
là tốt. Cấu hình của freetds.conf
, odbc.ini
và odbcinst.ini
được tạo như mô tả, ví dụ: here. Nhưng tại thời điểm này tôi không hiểu cách pyodbc
được cho là biết rằng trình điều khiển tồn tại FreeTDS
. Và thực sự cố gắng kết nối với tài xế FreeTDS
không thành công với các lỗi sau:
pyodbc.Error: ('IM002', '[IM002] [Microsoft][ODBC Driver Manager]
Data source name not found and no default driver specified (0) (SQLDriverConnect)')
Pyodbc
chỉ biết về trình điều khiển có sẵn trong ODBC Data Source Administrator
:
Có 2 cách để di chuyển về phía trước. Tùy chọn đầu tiên là làm cho ODBC Data Source Administrator
biết về trình điều khiển FreeTDS
. Để đạt được điều đó, cần tạo một giá trị mới trong khóa đăng ký HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers
với tên FreeTDS
và giá trị Installed
. Sau đó, một khóa mới FreeTDS
được tạo trong HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI
và cài đặt cho trình điều khiển FreeTDS
được đặt làm giá trị chuỗi trong khóa đăng ký này.
Sau khi hoàn thành thủ tục lái xe FreeTDS
này trở nên có sẵn trong ODBC Data Source Administrator
nhưng kết nối vẫn thất bại.Cố gắng tạo User DSN
trong ODBC Data Source Administrator
với FreeTDS
không thành công với mã lỗi 193
do sự không tương thích của 64 bit ODBC Data Source Administrator
và phiên bản 32 bit FreeTDS
. Tôi không có phiên bản 64 bit của FreeTDS
khả dụng. Có khả năng nó có thể được biên dịch từ nguồn.
Một tùy chọn khác là đặt pyodbc
sử dụng trình quản lý trình điều khiển khác (unixODBC
) thay vì ODBC Data Source Administrator
. Không biết cách tiếp cận điều đó.