我正在尝试从配置了 JDBC 的 Databricks 连接到我们的 Azure SQL DB,如下所示:
DBUser = 'test2'
DBPword = 'xxxxxx'
DBServer = 'hst37dg5zxxxxxxy-exnwgcizvwnurfcoqllpyaj3q4'
DBDatabase = 'newconfigdb-xxxxxxxxxxx8-a7ea-13f21e4ab25b'
jdbcUrl = f"jdbc:sqlserver://{DBServer}.database.fabric.microsoft.com:1433;database={DBDatabase};user={DBUser};password={DBPword};encrypt=true;trustServerCertificate=false;authentication=ActiveDirectoryPassword"
df.write.mode("overwrite") \
.format("jdbc") \
.option("url", jdbcUrl) \
.option("dbtable", table)\
.save()
我收到以下错误:
com.microsoft.sqlserver.jdbc.SQLServerException:无法在 Active Directory 中对用户 test2 进行身份验证(Authentication=ActiveDirectoryPassword)。AADSTS50034:8cbfa73c-xxxxxxx8faef12fc6 目录中不存在用户帐户“EUII Hidden”。要登录此应用程序,必须将该帐户添加到该目录中。
有人能告诉我“EUII Hidden”是什么意思吗?另外,如何解决这个问题?
通过更新,当我输入 DBUser = ' [email protected] ' 时,我收到错误“无法在 Active Directory (Authentication=ActiveDirectoryPassword) 中对用户[email protected]进行身份验证。AADSTS50055:密码已过期”
但是,当我在 Azure 中创建帐户时,我没有得到用户在登录时需要提供新密码的选项,所以不确定为什么我会收到密码过期错误?
我认为我已经基本解决了这个问题。
我已经更改了密码,但是当我尝试执行代码时出现错误:
com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect syntax near '<'.
在 Entra ID 中创建一个新的应用注册,并为其生成客户端密钥。将客户端密钥存储在Databricks 密钥作用域中。授予服务主体对数据库的访问权限,并将身份验证从 ActiveDirectoryPassword(用于用户主体,通常被 Entra ID 访问策略阻止)切换到 ActiveDirectoryServicePrincipal,并使用客户端密钥作为密码。
例如参见:https ://techcommunity.microsoft.com/blog/azuredbsupport/qtip-connect-to-azure-sql-db-using-entra-spn-service-principal/4046781