尝试通过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
答案 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 身份验证属性。