使用PyODBC通过AAD身份验证连接到Azure SQL Server

时间:2018-04-17 06:22:39

标签: python sql-server linux azure-active-directory pyodbc

环境:

Docker镜像:python:2.7.14-stretch(这意味着Debian 9作为底层操作系统)
Debian 9的安装SQL Server ODBC驱动程序(https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server?view=sql-server-2017

使用pyodbc模块

使用AAD身份验证连接到Azure SQL Server。

问题:

与DB的第一次连接完全正常。但是,与同一个DB或其他DB的任何下一个连接都会失败,并显示以下错误:

  

例外:::('08001',你'[08001] [unixODBC] [微软] [ODBC驱动程序17   for SQL Server] SSL Provider:   [错误:140A90F1:lib(20):func(169):reason(241)]( - 1)   (的SQLDriverConnect)')       无法连接到数据库

请注意,仅在使用AAD自动更新模式时才会出现此问题。如果我使用简单的sql server用户,一切运行正常。

以下是示例代码段。

db_list = [TEST_DB1, TEST_DB2]
sql_conn = None
for db in db_list:
    try:
        conn_string = 'DRIVER={ODBC Driver 17 for SQL Server};' \
                      'SERVER=' + <db_url> + \
                      ';DATABASE=' + <db_name> + \
                      ';UID=' + <db_username> + \
                      ';PWD=' + <db_password> + \
                      ';Authentication=ActiveDirectoryPassword'
        print conn_string
        sql_conn = pyodbc.connect(conn_string)
except Exception as e:
    print "Exception:::", e
    print 'Cannot connect to DB' + str(sys.exc_info()[0])
    return None
sql_conn.cursor().execute(<some SQL Query>)
sql_conn.close()

0 个答案:

没有答案