2015-03-30 14 views
10

Mô-đun pymssql được sử dụng để hỗ trợ xác thực cửa sổ. Bây giờ có vẻ như nó không. Mặc dù ở một số nơi nó vẫn cho thấy rằng nó sẽ làm việc. Tôi đã không thể tìm thấy một câu trả lời dứt khoát cho vấn đề này, cũng không phải là một giải pháp. liên kết phù hợp nhất:xác thực pymssql windows

https://groups.google.com/forum/#!topic/pymssql/QDMLTGBNeU0

pymssql 1.0 hỗ trợ nó bởi vì nó làm cho việc sử dụng và phụ thuộc vào DLL MS-cung cấp mà là một phần của SQL Server client stack. Ngăn xếp này chịu trách nhiệm xử lý tất cả các cuộc đàm phán NTLM và như vậy. Điều này có nghĩa, trong số những thứ khác đó là giải pháp chỉ dành cho Windows.

Tôi có thể mô phỏng nhiều loại môi trường mạng vì vậy tôi đã thử nhiều thiết lập khác nhau. Tôi đang cố gắng để có thể sử dụng kịch bản này để kết nối với một máy chủ MSSQL từ xa bằng cách sử dụng xác thực cửa sổ. Và đây là vấn đề.


Theo nghiên cứu của tôi, bao gồm cả các liên kết trên, có hai cách để sử dụng cửa sổ xác thực với các mô-đun pymssql có phải để làm việc.

Phương pháp thứ nhất: Sử dụng các thông tin người dùng hiện tại:

pymssql.connect(server='server') 
# credentials come from active windows session 
# some research shows that a "trusted=True" keyword should be provided. 

Phương pháp thứ hai: Sử dụng thông tin người dùng đưa ra:

pymssql.connect(server='server', user=r'domain\user', password='pass') 
# credentials are given in code and somehow converted to a 
# windows authentication in the background 
# some research shows that a "trusted=True" keyword should be provided. 

Cũng vậy với việc sử dụng mô-đun _mssql.


GHI CHÚ:

  • Python phiên bản: 2.7.8
  • Phiên bản pymssql Tôi đang sử dụng: 2.1.1
  • Phiên bản pymssql được sử dụng để hỗ trợ cửa sổ xác thực: 1 .x
  • tôi đã thử nghiệm với (Tất cả 64 bit):
    • Windows 7 Professional
    • cửa sổ cao cấp 7 nhà
    • windows server 2012
    • windows server 2012R2

Các câu hỏi khác về chủ đề:

pymssql: How to use windows authentication when running on a non-windows box

Unable to connect using pymssql with windows authentication

https://stackoverflow.com/questions/27692366/mssql-python-windows-authentication

+1

Bạn có thể liệt kê phiên bản cửa sổ bạn đang sử dụng, và cả pymssql và cửa sổ versiosn nơi nó "sử dụng để làm việc" – jsbueno

Trả lời

-1

Vì vậy, tôi đã quyết định tôi nên trả lời câu hỏi của riêng mình (nó đã được một vài tháng) với phương pháp mà cuối cùng tôi đã sử dụng để giải quyết vấn đề này.

Câu trả lời ngắn: Tôi đã sử dụng một thứ khác.

Câu trả lời dài hơn: Để xác thực cửa sổ thử nghiệm (trừ người dùng hiện đang đăng nhập cửa sổ, hoạt động) Tôi bắt đầu sử dụng công cụ SQLCMD từ Microsoft, kết hợp với PsExec.

Các PsExec tôi thực hiện với các elevated(-h)load profile(-e) cờ. Sử dụng tên người dùng đầy đủ DOMAIN\USERNAME.

SQLCMD tôi đã thực thi với cờ trusted connection-E.

Phần còn lại tùy thuộc vào bạn.

1

tôi đã thách thức này cùng thời gian gần đây. Tôi cũng đã sử dụng Python 2.7 và xác thực cửa sổ lúc đầu. Cách duy nhất tôi đã có thể kết nối là bằng cách sử dụng IronPython và nhập khẩu các mô-đun clr. Tôi không chắc chắn lý do tại sao nó làm việc và sẽ đánh giá cao một lời giải thích từ một ai đó đó là kiến ​​thức về chủ đề này. Một số khác biệt là máy chủ của tôi là cục bộ và cơ sở dữ liệu bên trong được hình thành với 'Khuôn khổ thực thể-Mã đầu tiên'. Đây là mã mà cuối cùng kết nối tôi với máy chủ.

import clr 
clr.AddReference('System.Data') 
from System.Data.SqlClient import * 

Conn_string = 'data source=Server_Name; initial catalog=Database_Name; trusted_connection=True' 
ScheduleConn = SqlConnection(Conn_string) 
ScheduleConn.Open() 

Nếu điều này không giải quyết được vấn đề của bạn, tôi hy vọng nó giúp bạn gần hơn với giải pháp của mình.

+0

Cảm ơn bạn. Điều này không giải quyết được vấn đề trước mắt của tôi, nhưng có lẽ nó khiến tôi gần hơn. Bạn có thể cung cấp liên kết đến các thư viện bạn đang sử dụng không? –

+0

https://msdn.microsoft.com/en-us/magazine/cc300810.aspx –

+0

Điều quan trọng cần lưu ý là mặc dù cơ sở dữ liệu được thiết lập bên trong ứng dụng .NET, tôi có thể kết nối với máy chủ nếu tôi chạy kịch bản của chính nó, bên ngoài môi trường .NET. –

5

tôi đã có thể giải quyết này sử dụng python 2.7.11 64 bit, pymssql 2.1.1 giành chiến thắng 64, windows 10, sqlserver 2012 với cửa sổ xác thực bởi:

conn = pymssql.connect(server = 'EDDESKTOP', database = 'baseballData') 

Và cho phép các kết nối tcp/ip trong Trình quản lý cấu hình Sql Server> Cấu hình mạng Sql Server -> Giao thức cho MSSQLSERVER-> TCP/IP Đã bật

0

Dường như nó hoạt động ngay bây giờ. Python 3.6, Windows 10.

conn = pymssql.connect(server='(local)', database='DbName') 
+0

chưa xác minh, tôi không còn môi trường nào nữa. nhưng điều này làm việc cho các máy chủ không cục bộ? –

+0

Có, nó hoạt động cho các máy chủ từ xa. –

1

Nếu trên RHEL, hãy đặt biến môi trường FREETDSCONF. Pymssql trông sai địa điểm theo mặc định:

os.environ["FREETDSCONF"] = "/etc/freetds.conf" 
Các vấn đề liên quan