【问题标题】:Connect to SQL Server with user credentials of another domain使用另一个域的用户凭据连接到 SQL Server
【发布时间】:2014-02-02 08:49:20
【问题描述】:

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

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

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

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

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

当我尝试后者时,我收到“MY_Domain\username 登录失败”的错误,而不是 对于用户“Another_Domain\username”。

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

【问题讨论】:

  • 这是个好问题。我怎样才能检查这个?如果我代表该用户权限运行 Managment Studio,我可以连接到 ms sql server 有一件有趣的事情
  • 不,没有。我认为问题在于两个域之间没有信任权限
  • 不,不是。请阅读下面的答案。如果没有信任,那么 SSMS 将无法正常工作

标签: python sql-server pyodbc


【解决方案1】:

您不能传递UIDPassword 并设置Trusted_connection=True(您的第二个连接字符串)以作为(模拟)Windows 用户进行连接。您可以作为 SQL Server 用户(用户名和密码)或作为 Windows 身份验证用户(受信任的连接)进行连接。

您的代码应该模拟 Windows 用户(就像 SSMS 一样),然后设置 Trusted_connection=Trueonly

此 MSDN 页面 WindowsIdentity.Impersonate 有一个示例。

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

【讨论】:

  • @S4nd33p 嘿,我遇到了同样的问题,你能告诉我你是怎么解决的吗?你找到使用 python 的方法了吗?感谢您的宝贵时间
  • 是的,@Tbaki,我可以通过 python 连接。实际上,您应该让程序通过不输入可信连接子句来自动处理它,或者在传递有效的 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']))
  • @S4nd33p 谢谢,对我帮助很大!
猜你喜欢
  • 2013-03-15
  • 1970-01-01
  • 1970-01-01
  • 2021-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-28
  • 2019-03-21
相关资源
最近更新 更多