【发布时间】:2019-12-01 22:34:16
【问题描述】:
我们在Azure虚拟机(VM)中有一个java项目,需要通过JDBC连接到Azure SQL db,所以我们使用Azure SQL db提供的JDBC连接字符串如下:
"jdbc:sqlserver://ZZZdbserver.database.windows.net:1433;database=ZZZ;user=*****;password=*****;encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;"
但我们遇到了一个例外:
"java.security.cert.CertificateException: Failed to validate the server name in a certificate during Secure Sockets Layer (SSL) initialization.
The server name is *.database.windows.net, the name in certificate is cr2.eastus1-a.control.database.windows.net."
然后我们将 JDBC 连接字符串更新为:
"jdbc:sqlserver://ZZZdbserver.database.windows.net:1433;database=ZZZ;user=*****;password=*****;encrypt=true;trustServerCertificate=false;hostNameInCertificate=cr2.eastus1-a.control.database.windows.net;loginTimeout=30;"
但我们遇到了另一个例外:
org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Cannot open server "ZZZ1" requested by the login. The login failed.)
其中“ZZZ1”是我们的 Azure VM 用户名。
有解决这个问题的办法吗?
【问题讨论】:
-
顺便说一下,为了让 Azure 服务和资源能够访问 Azure db 服务器,我们将 Azure VM 的公共 ip 地址添加到 Azure SQL db 的防火墙设置中
-
您可以使用刻度使您的帖子更具可读性,
like this。