python - 如何使用服务帐户(不是我自己的 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 登录服务器,作为服务帐户启动。
我希望这很简单。
解决方案
ODBC 驱动程序不支持使用您提供的凭据进行 Windows 身份验证(NTLM 或 Kerberos)。你必须要么
以目标帐户运行进程或执行帐户的 Windows 模拟,例如使用
runas
或安装您的代码作为目标服务帐户的 Windows 服务。在 Windows 凭据存储中为运行应用程序的用户安装 Windows 凭据。
运行应用程序
runas /netonly
以使用提供的凭据进行 NTLM 身份验证。
推荐阅读
- akeneo - Akeneo 导入在上传时返回 500
- sql - SQL Server 查询以查找没有关联的透视表之间的记录
- r - 如何获得变量的百分位数和所有人的虚拟比率
- vue.js - vuejs router.go(-1)第二次没有显示
- flutter - MissingPluginException(未找到通道 razorpay_flutter 上打开的方法的实现)
- reactjs - npm 错误!代码 ENOSELF 和拒绝在包下安装名称为“美人鱼”的包
- javascript - 将 Menu.Item 与 Sider 内的底部对齐
- postgresql - 具有别名表达式的 SQL HAVING 子句的行为 - 标准
- c++ - 是否可以在没有真实文件的情况下创建 ifstream
- java - 我想在 SOAP 服务的响应标头中将“Transfer_encoding:Chunked”更改为“Transfer-Encoding:gzip,deflate”