'domainuser' python 中的字符串中的反斜杠处理不正确



我正在使用pyodbc连接到一个MSSQL数据库,该数据库具有运行良好的DB凭据。

然而,对于PoC解决方案,我需要作为不同域中的用户连接到它。

我已经创建了一个凭据字典,该字典正在导入到主脚本中。以下是有问题用户的dict片段:

creds = {
...
'amp': {'u': 'domain\user' # double backslash to escape the 
...
}

下面是我使用creds字典中的值作为f字符串的mssql引擎的参数。

params = quote_plus(f"Driver={driver};Server={creds['amp']['s']};Database={creds['amp']['d']};uid={creds['amp']['u']};pwd={creds['amp']['p']}")

这将返回以下错误:

pyodbc.InterfaceError: ('28000', "[28000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Login failed for user 'domain\user'. (18456) (SQLDriverConnect); [28000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Login failed for user 'domain\user'. (18456)")

我试过:

'域\用户'r'域\用户',在参数字符串中硬编码"domain\user">

没有生成允许连接到数据库的"domain\user"。

当我通过SSMS时,我可以使用相同的帐户进行连接,没有任何问题。

PS。在发帖之前,我已经在堆栈上浏览了很多问题,和一个蟒蛇朋友聊过了,运气不好。

PS2.Stack似乎把这个问题分配给了sqlserver,而不是python?很抱歉

好的,我已经通过在参数中使用Trusted_Connection=yes使其工作,但问题仍然存在。如何键入域\用户字符串才能使用这些字符串?

params2 = quote_plus(f"Driver={driver};Server={creds['amp']['s']};Database={creds['amp']['d']};Trusted_Connection=yes")
ampengine = sql.create_engine(f'mssql+pyodbc:///?odbc_connect={params2}')

要使用Windows/Domain帐户,您必须以该帐户的身份登录。SQL Server不允许您以未登录的用户身份进行连接,除非使用SQL身份验证。

这是假设在服务器上启用了混合模式身份验证。您需要为此用户创建一个SQL用户,或者在以他们的身份登录时从他们的域进行连接。

最新更新