我正在尝试使用Python通过Windows身份验证连接到SQL数据库。我看了这里的一些帖子(例如here),但建议的方法似乎不起作用。
例如,我使用了以下代码:
cnxn = pyodbc.connect(driver='{SQL Server Native Client 11.0}',
server='SERVERNAME',
database='DATABASENAME',
trusted_connection='yes')
但我得到了以下错误:
Error: ('28000', "[28000] [Microsoft][SQL Server Native Client 11.0][SQL Server]
Login failed for user 'DOMAIN\\username'. (18456) (SQLDriverConnect); [28000] [Microsoft]
[SQL Server Native Client 11.0][SQL Server]Login failed for user 'DOMAIN\\username'.
(18456)")
(* 注意,在上面的错误消息中,我将实际的域名和用户名分别替换为DOMAIN
和username
。*)
我还尝试使用我的UID
和PWD
,导致了同样的错误。
最后,我尝试按照上面链接中的建议更改服务帐户,但在我的计算机上,当我转到services.msc
的Properties
时,没有Log On
选项卡。
我想知道我做错了什么,我该如何解决这个问题。
9条答案
按热度按时间fafcakar1#
从Windows计算机连接:
使用Microsoft的ODBC驱动程序for SQL Server时,
Trusted_connection=yes
会通知驱动程序使用“Windows身份验证”,您的脚本将尝试使用 * 运行脚本的用户的Windows凭据 * 登录SQL Server。UID
和PWD
不能用于在连接字符串中提供替代的Windows凭据。因此,如果您需要以其他Windows用户的身份连接,您将需要使用Windows的RUNAS命令以该其他用户的身份运行Python脚本。如果您要将“SQL Server身份验证”与
UID
和PWD
指定的特定 *SQL Server登录名 * 一起使用,请使用Trusted_connection=no
。从非Windows计算机连接:
如果您需要从非Windows计算机进行连接,并且SQL Server配置为仅使用“Windows身份验证”,则Microsoft的ODBC驱动程序将要求您使用Kerberos。或者,您可以使用FreeTDS ODBC,在连接字符串中指定
UID
、PWD
和DOMAIN
。前提是SQL Server示例配置为支持旧版NTLM身份验证协议。pgky5nke2#
我什么都试过了,这是最终对我起作用的:
olqngx593#
尝试以下cxn字符串:
http://mkleehammer.github.io/pyodbc/
mv1qrgav4#
我在连接到默认数据库(MSSQLSERVER)时遇到了类似的问题。如果您正在连接到默认数据库,请删除
行,然后重试。
干杯,迪帕克
pdsfdshx5#
第一个选项适用于您的凭据已使用命令提示符存储的情况。另一个选项是在连接中提供凭据(UId,Psw)。
以下几点对我很有效:
wd2eg0qa6#
bpsygsoo7#
这是一个与OP稍有不同的用例,但对于感兴趣的用户来说,可以使用Windows身份验证连接到MS SQL Server数据库,用户帐户与登录的用户帐户不同。
这可以通过使用python jaydebeapi模块和JDBCJTDS驱动程序来实现,详细信息请参见我的回答。
pobjuy328#
注意,您可能需要更改身份验证机制,例如,我的数据库使用ADP,因此我的连接如下所示
了解更多here
cmssoen29#
Trusted_connection=no
没有帮助我。当我删除整行并添加UID
时,PWD
参数起作用了。我的结论是删除