Python使用JDBC连接Azure SQL的ActiveDirectoryIntegrated认证报错求解
报错原因说明
- 第一个
java.lang.NoClassDefFoundError报错:MSAL4J库本身存在多个第三方依赖包,你仅引入了msal4j的独立jar包,缺少其依赖的oauth2-oidc-sdk、nimbus-jose-jwt等组件,其中就包含报错缺失的com/nimbusds/oauth2/sdk/auth/ClientAuthentication类。 - 第二个dll无法识别报错:使用mssql-jdbc_auth dll做集成认证时,需要确保dll路径已被系统正确识别,且dll版本与JDBC驱动版本、系统架构(x64/x86)完全匹配。
解决方案
方案1:使用MSAL4J完成认证(推荐,跨平台不需要依赖dll)
你需要把MSAL4J的所有依赖包都引入,操作步骤如下:
- 准备对应版本的所有依赖jar包,核心需包含:
mssql-jdbc-9.4.0.jre8.jar、msal4j-1.11.0.jar、oauth2-oidc-sdk-9.7.jar、nimbus-jose-jwt-9.10.1.jar、json-smart-2.4.7.jar、lang-tag-1.5.jar、slf4j-api-1.7.32.jar - 修改代码把所有jar包都加入jars参数列表:
server = 'jdbc:sqlserver://someserver.database.windows.net:1433;database=someserver;encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;Authentication=ActiveDirectoryIntegrated' # 把所有所需jar的本地路径都加入列表 cnxn = jay.connect('com.microsoft.sqlserver.jdbc.SQLServerDriver', server, jars=[ r'C:\mssql-jdbc-9.4.0.jre8.jar', r'C:\msal4j-1.11.0.jar', r'C:\oauth2-oidc-sdk-9.7.jar', r'C:\nimbus-jose-jwt-9.10.1.jar', r'C:\json-smart-2.4.7.jar', r'C:\lang-tag-1.5.jar', r'C:\slf4j-api-1.7.32.jar' ])
方案2:使用mssql-jdbc_auth dll完成认证(仅Windows可用)
- 确认你使用的是Windows系统,且dll版本
mssql-jdbc_auth-9.4.0.x64.dll和JDBC驱动版本完全一致,系统是64位架构 - 把dll所在的目录
C:\加入系统的PATH环境变量,或者把dll拷贝到Java运行环境的bin目录下 - 调整代码如下即可:
server = 'jdbc:sqlserver://someserver.database.windows.net:1433;database=someserver;encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;Authentication=ActiveDirectoryIntegrated' cnxn = jay.connect('com.microsoft.sqlserver.jdbc.SQLServerDriver', server, jars=r'C:\mssql-jdbc-9.4.0.jre8.jar', libs=r'C:\mssql-jdbc_auth-9.4.0.x64.dll')
内容的提问来源于stack exchange,提问作者Alexey Belkov
相关产品推荐
相关产品推荐

