SQL Server 错误28000:用户DOMAIN\\user使用pyodbc登录失败

xwmevbvl  于 2023-01-12  发布在  其他
关注(0)|答案(9)|浏览(1861)

我正在尝试使用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)")

(* 注意,在上面的错误消息中,我将实际的域名和用户名分别替换为DOMAINusername。*)
我还尝试使用我的UIDPWD,导致了同样的错误。
最后,我尝试按照上面链接中的建议更改服务帐户,但在我的计算机上,当我转到services.mscProperties时,没有Log On选项卡。
我想知道我做错了什么,我该如何解决这个问题。

fafcakar

fafcakar1#

从Windows计算机连接:

使用Microsoft的ODBC驱动程序for SQL Server时,Trusted_connection=yes会通知驱动程序使用“Windows身份验证”,您的脚本将尝试使用 * 运行脚本的用户的Windows凭据 * 登录SQL Server。UIDPWD不能用于在连接字符串中提供替代的Windows凭据。因此,如果您需要以其他Windows用户的身份连接,您将需要使用Windows的RUNAS命令以该其他用户的身份运行Python脚本。
如果您要将“SQL Server身份验证”与UIDPWD指定的特定 *SQL Server登录名 * 一起使用,请使用Trusted_connection=no

从非Windows计算机连接:

如果您需要从非Windows计算机进行连接,并且SQL Server配置为仅使用“Windows身份验证”,则Microsoft的ODBC驱动程序将要求您使用Kerberos。或者,您可以使用FreeTDS ODBC,在连接字符串中指定UIDPWDDOMAIN。前提是SQL Server示例配置为支持旧版NTLM身份验证协议。

pgky5nke

pgky5nke2#

我什么都试过了,这是最终对我起作用的:

import pyodbc
driver= '{SQL Server Native Client 11.0}'

cnxn = pyodbc.connect(
    Trusted_Connection='Yes',
    Driver='{ODBC Driver 11 for SQL Server}',
    Server='MyServer,1433',
    Database='MyDB'
)
olqngx59

olqngx593#

尝试以下cxn字符串:

cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=localhost;PORT=1433;DATABASE=testdb;UID=me;PWD=pass')

http://mkleehammer.github.io/pyodbc/

mv1qrgav

mv1qrgav4#

我在连接到默认数据库(MSSQLSERVER)时遇到了类似的问题。如果您正在连接到默认数据库,请删除

  • 数据库=“数据库名”,*

行,然后重试。
干杯,迪帕克

pdsfdshx

pdsfdshx5#

第一个选项适用于您的凭据已使用命令提示符存储的情况。另一个选项是在连接中提供凭据(UId,Psw)。
以下几点对我很有效:

conn = pyodbc.connect('DRIVER={SQL Server};SERVER=yourServer;DATABASE=yourDatabase;UID=yourUsername;PWD=yourPassword')
wd2eg0qa

wd2eg0qa6#

import pyodbc   #For python3 MSSQL

cnxn = pyodbc.connect("Driver={SQL Server};"   #For Connection
                   "Server=192.168.0.***;"
                   "PORT=1433;"
                   "Database=***********;"
                   "UID=****;"
                   "PWD=********;")
cursor = cnxn.cursor()                        #Cursor Establishment
cursor.execute('select site_id from tableName')   #Execute Query

rs = cursor.fetchall() 
print(rs)
bpsygsoo

bpsygsoo7#

这是一个与OP稍有不同的用例,但对于感兴趣的用户来说,可以使用Windows身份验证连接到MS SQL Server数据库,用户帐户与登录的用户帐户不同。
这可以通过使用python jaydebeapi模块和JDBCJTDS驱动程序来实现,详细信息请参见我的回答。

pobjuy32

pobjuy328#

注意,您可能需要更改身份验证机制,例如,我的数据库使用ADP,因此我的连接如下所示

pyodbc.connect(
    Trusted_Connection='No',
    Authentication='ActiveDirectoryPassword',
    UID=username,
    PWD=password,
    Driver=driver,
    Server=server,
    Database=database)

了解更多here

cmssoen2

cmssoen29#

Trusted_connection=no没有帮助我。当我删除整行并添加UID时,PWD参数起作用了。我的结论是删除

相关问题