[英]Receiving `Login timeout expired` when connecting to a serverless Azure Synapse SQL pool using `ActiveDirectoryPassword` authentication and pyodbc
我正在尝试使用 pyodbc 在 Python 的无服务器 SQL 池上运行 Azure Synapse SQL 查询。 我正在尝试使用 Azure Active Directory 用户进行身份验证。 这是我的代码:
import pyodbc
driver = '{ODBC Driver 18 for SQL Server}'
server = '<server>'
db = '<db>'
username = '<user>@<domain>@<synapse-workspace>'
password = '<password>'
with pyodbc.connect(
f'Driver={driver};Server=tcp:{server},1433;Database={db};Uid={username};Pwd={password};Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30;Authentication=ActiveDirectoryPassword;') as conn:
cursor = conn.cursor()
cursor.execute('SELECT TOP 100 * from foo')
row = cursor.fetchone()
while row:
print(row)
row = cursor.fetchone()
我收到以下错误:
pyodbc.OperationalError: ('HYT00', '[HYT00] [Microsoft][ODBC Driver 18 for SQL Server]Login timeout expired (0) (SQLDriverConnect)')
我很困惑,因为我能够使用相同的用户名和密码登录 Synapse Workspace 和 Azure Data Studio。
任何想法出了什么问题? 或者关于如何获得更有用的错误消息的任何想法?
更新:
我增加了超时并收到了不同的错误:
pyodbc.Error: ('FA004', '[FA004] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Failed to authenticate the user \'<user>@<domain>@<synapse-workspace>\' in Active Directory (Authentication option is \'ActiveDirectoryPassword\').\nError code 0xA190; state 41360\n{"ver":"1.0","account_type":"Unknown","cloud_instance_name":"microsoftonline.com","cloud_audience_urn":"urn:federation:MicrosoftOnline"}\nUnknown account type. (0) (SQLDriverConnect)')
超时错误通常是因为服务器没有响应。
或者解决方法是使用ActiveDirectoryInteractive
import pyodbc
server = '<servername>'
database = '<database name>'
username = '<loginId>'
password = '<password>'
driver= '{ODBC Driver 18 for SQL Server}'
Authentication='ActiveDirectoryInteractive'
cnxn = pyodbc.connect(
'DRIVER='+driver+
';PORT=1433;SERVER='+server+
';PORT=1443;DATABASE='+database+
';UID='+username+
';Authentication='+Authentication)
cursor = cnxn.cursor()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.