我正在使用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用户,或者在以他们的身份登录时从他们的域进行连接。