使用其他域的用户凭据连接到SQL Server

Leo*_*eo 3 python sql-server pyodbc

如何使用另一个域中的用户登录名/密码连接到SQL Server数据库?

如果我使用我的帐户连接到数据库,它可以正常工作:

cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=server_name;DATABASE=testdb;UID=MY_Domain\\username;PWD=pass; Trusted connection=YES')
Run Code Online (Sandbox Code Playgroud)

但我需要使用其他用户的凭据

cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=server_name;DATABASE=testdb;UID=Another_Domain\\username;PWD=pass; Trusted connection=YES')
Run Code Online (Sandbox Code Playgroud)

当我尝试后者时,我收到"登录MY_Domain\username失败"的错误,而不是用户"Another_Domain\username".

在这两种情况下,通过运行SQL Server Management Studio,我可以使用Windows身份验证连接到数据库.

Mit*_*eat 6

你可以不通过UIDPassword和一套Trusted_connection=True(你的第二个连接字符串)升级到Windows用户连接为(模仿).您可以作为SQL Server用户(用户名和密码)或作为Windows身份验证用户(可信连接)进行连接.

您的代码应模拟Windows用户(如SSMS所做),然后Trusted_connection=True 设置.

这个MSDN页面WindowsIdentity.Impersonate有一个例子.

由于这适用于SSMS,因此表明域之间存在必要的信任.

  • 是的,@ Tbaki,我可以通过python连接。实际上,您应该通过不输入Trusted Connection子句让程序自动处理它,或者在传递有效的UID / PWD时将Trusted_connection = False设置为。示例:cnxn = pyodbc.connect('DRIVER = {SQL Server}; SERVER ='+ str(os.environ ['DataSource'])+'; DATABASE ='+ str(os.environ ['Database'])+ '; UID ='+ str(os.environ ['userID'])+'; PWD ='+ str(os.environ ['password'])) (2认同)