在Python中,是否可以使用Active Directory密码身份验证连接Azure SQL Server?

时间:2018-12-28 22:38:55

标签: python sql-server azure pyodbc

我尝试使用pyodbc库连接sql服务器,

driver= '{ODBC Driver 17 for SQL Server}'
cnxn = pyodbc.connect('DRIVER='+driver+';SERVER='+host+';PORT=1443;DATABASE='+database+';UID='+user+';PWD='+ password+';Authentication=ActiveDirectoryPassword')

在上面的代码中,我选择ActiveDirectoryPassword(AAD)作为我的身份验证类型,因为我只有AAD访问权限。但是收到以下错误消息。

InterfaceError: ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (0) (SQLDriverConnect)')

当我将驱动程序更改为ODBC Driver 13时,得到了不同的错误消息。

driver= '{ODBC Driver 13 for SQL Server}'
cnxn = pyodbc.connect('DRIVER='+driver+';SERVER='+host+';PORT=1443;DATABASE='+database+';UID='+user+';PWD='+ password+';Authentication=ActiveDirectoryPassword')

这一次我收到以下错误消息。

OperationalError: ('08001', '[08001] [Microsoft][ODBC Driver 13 for SQL Server]SQL Server Network Interfaces: The Microsoft Online Services Sign-In Assistant could not be found. Install it from http://go.microsoft.com/fwlink/?LinkId=234947. If it is already present, repair the installation. [2].  (2) (SQLDriverConnect); [08001] [Microsoft][ODBC Driver 13 for SQL Server]Client unable to establish connection (2); [08001] [Microsoft][ODBC Driver 13 for SQL Server]Invalid connection string attribute (0)')

是否可以使用具有AAD身份验证的 pyodbc 连接Azure SQL服务器?如果可能的话,使用AAD对sql服务器进行身份验证的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

首先,根据官方文档Use Azure Active Directory Authentication for authentication with SQL的{​​{3}}小节,如下所示,pyodbc可以使用AAD身份验证连接Azure SQL数据库。

  

Additional considerations支持Azure Active Directory身份验证,但是bcp.exe无法使用Azure Active Directory身份验证进行连接,因为它使用了较旧的ODBC提供程序。

然后,有一个针对SQL Server ODBC version 13.1的正式文档介绍了操作方法和一些限制(如果不在Windows上)。

  

版本为 13.1 或更高版本的SQL Server的Microsoft ODBC驱动程序允许ODBC应用程序使用用户名/密码在Azure Active Directory中使用联合身份连接到SQL Azure实例< / strong>,Azure Active Directory访问令牌或Windows集成身份验证(仅Windows驱动程序)。对于ODBC驱动程序版本13.1,Azure Active Directory访问令牌身份验证仅Windows。 ODBC驱动程序版本17及更高版本在所有平台(Windows,Linux和Mac)上都支持此身份验证。

还有

  

通过使用新的DSN和连接字符串关键字以及连接属性来完成。

您需要按照文档配置一些设置,以启用新的DSN,然后使用连接字符串连接SQL Azure。

Driver={ODBC Driver 13 for SQL Server};Server={server};UID=myuser;PWD=myPass;Authentication=ActiveDirectoryPassword

并注意这一点。

  

要使用Azure Active Directory帐户用户名和密码进行连接,请在连接字符串中指定 Authentication = ActiveDirectoryPassword 以及 UID PWD 关键字分别使用用户名和密码。

与此同时,这些资源似乎已经很陈旧,但是为SQL Azure中的配置多重身份验证详细介绍了Using Azure Active Directory with the ODBC Driver,并为blog引入了降价文档。

此外,对于Linux和Mac,有Connecting to SQL Database By Using Azure Active Directory Authentication申请另一种解决方案,可能有助于建立SQL Server的连接。

希望有帮助。