首页 > 解决方案 > 如何使用服务帐户(不是我自己的 AD 帐户)使用 pyodbc 连接到本地 SQL 服务器

问题描述

我正在尝试使用为此目的创建的 AD 服务帐户使用 pyodbc 连接到本地/物理 SQL 服务器实例。

我将连接字符串构建为:

import pyodbc 
   
server = 'FULLY_QUALIFIED_SERVER_NAME.xx.xxx.xxx,1433'
database = 'TargetDB'
username = 'DOMAIN\USERNAME'
password = 'PASSWORD' 
cnxn = 'DRIVER={ODBC Driver 17 for SQL Server};SERVER=' + server + ';UID=' + username + ';PWD=' + password + ';Authentication=ActiveDirectoryPassword;'
print(cnxn)
pyodbc.connect(cnxn)

当我从 cmd 行运行时:

PS C:\Conn_Sql\DA_CONNECT_SQL_TEST> python __init__.py
DRIVER={ODBC Driver 17 for SQL Server};SERVER=FULLY_QUALIFIED_SERVER_NAME.xx.xxx.xxx,1433;UID=DOMAIN\USERNAME;PWD=PASSWORD;Authentication=ActiveDirectoryPassword;
Traceback (most recent call last):
  File "__init__.py", line 12, in <module>
    pyodbc.connect(cnxn)
pyodbc.InterfaceError: ('28000', "[28000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Login failed for user ''. (18456) (SQLDriverConnect); [28000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Login failed for user ''. (18456)")
PS C:\Conn_Sql\DA_CONNECT_SQL_TEST>

如果您不想滚动,错误是: [SQL Server] 用户登录失败 ''

我已经在内部使用了我可以使用的所有资源,但似乎没有人能够指出我的答案。

注意:当我尝试以类似方式登录 SQL 服务器时,我得到了同样的错误。 文本

我能够使用此帐户进行连接的唯一方法是使用 SSMS 登录服务器,作为服务帐户启动

我希望这很简单。

标签: pythonsql-serverazure-active-directory

解决方案


ODBC 驱动程序不支持使用您提供的凭据进行 Windows 身份验证(NTLM 或 Kerberos)。你必须要么

  1. 以目标帐户运行进程或执行帐户的 Windows 模拟,例如使用runas或安装您的代码作为目标服务帐户的 Windows 服务。

  2. 在 Windows 凭据存储中为运行应用程序的用户安装 Windows 凭据。

  3. 运行应用程序runas /netonly以使用提供的凭据进行 NTLM 身份验证。


推荐阅读