如何将pydbr.connect()与autherization =“ ActiveDirectoryIntegrated”一起使用?

时间:2019-07-25 08:40:55

标签: python azure-active-directory azure-sql-database pyodbc

尝试通过VS代码中的python函数访问Azure SQL,并将“身份验证”设置为“集成Active Directory”。使用pyodbc进行连接。

在本地运行时工作正常,但是在部署到Azure后会出现错误。如果我使用SQL登录,但我想使用Active Directory Integrated,也可以正常工作。我已经将自己设置为广告管理员。

我正在尝试:

cnxn = pyodbc.connect("Driver={ODBC Driver 17 for SQL Server};Server=tcp:khawajaserver1.database.windows.net,1433;Database=KhawajaDB1;Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30;Authentication=ActiveDirectoryIntegrated")

我得到的错误:

Result: Failure
Exception: Error: ('HY000', '[HY000] [Microsoft][ODBC Driver 17 for SQL Server]MAX_PROVS: Error code 0x57 (87) (SQLDriverConnect)')
Stack:   File "/usr/local/lib/python3.6/site-packages/azure/functions_worker/dispatcher.py", line 308, in _handle__invocation_request

4 个答案:

答案 0 :(得分:1)

我们遇到了类似的问题,希望您能解决它?我没有发表评论的声誉,否则我会发表评论。

希望您已经阅读了此内容,结帐the Msi authentication

还有一个名为azure-adal的python模块,文档并不是很好,但是您可以看一下

也许这些会指导您正确的方向。公平地说,我也无法使其正常工作!所以,如果您知道了,请告诉我。

答案 1 :(得分:0)

我知道Active Directory密码可以用作身份验证类型。

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()

答案 2 :(得分:0)

以下代码对我有用

# Connection to SQL Server using AADIntegrated

import pyodbc 

server = 'data1.database.windows.net' 
database = 'MyTestDB' 
authentication = 'ActiveDirectoryIntegrated'
kpi_server_connection = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER='+server+';DATABASE='+database+';Authentication='+authentication+';TrustServerCertificate='+ 'no')

query_string = '''
    select top 10 * from [SomeTable] 
    '''
df = pd.read_sql(query_string, kpi_server_connection)
df

答案 3 :(得分:0)

当使用 ODBC Driver 17 for SQL Server 时,当您使用某种形式的托管标识连接到 Azure SQL 实例时,以下内容有效;

conn_str = 'Driver={};SERVER=tcp:{},1433;DATABASE=CustomerProfiling;Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30;Authentication=ActiveDirectoryMsi;'.format("{ODBC Driver 17 for SQL Server}", os.environ["SQL_SERVER"])
conn = pyodbc.connect(conn_str)

关键是使用 ActiveDirectoryMsi 身份验证属性。