如何使用服务帐户(不是我自己的 AD 帐户)使用 pyodbc 连接到 On-Prem SQL 服务器

How to I connect to an On-Prem SQL server using pyodbc using a Service Account (not my own AD account)

我正在尝试使用 pyodbc 连接到 On-Premise/Physical SQL 服务器实例,并使用为此目的创建的 AD 服务帐户。

我将连接字符串构建为:

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服务器]用户''登录失败

我已尽我所能在内部联系所有资源,但似乎没有人能够指出我的答案。

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

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

我希望这很简单。

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

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

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

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