Java JDBC导致Azure VM出现Azure SQL数据库连接问题
我们在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 JDBC导致Azure VM出现Azure SQL数据库连接问题,java,sql,azure,jdbc,Java,Sql,Azure,Jdbc,我们在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=*.da
org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Cannot open server "ZZZ1" requested by the login. The login failed.)
“java.security.cert.CertificateException:在安全套接字层(SSL)初始化期间验证证书中的服务器名称失败。
服务器名称为*.database.windows.net,证书中的名称为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虚拟机的用户名
有没有办法解决这个问题?默认情况下,Azure VM没有阻止到Internet的出站连接。您可以首先通过在CMD中运行命令
telnet ZZZdbserver.database.windows.net 1433
或在Powershell中运行命令Test NetConnection-computer ZZZdbserver.database.windows.net-port 1433
来验证从VM到Azure SQL数据库的网络连接。如果失败,您可以检查是否有防火墙阻止此数据库连接或端口,或者您的应用程序正在侦听该端口,或者您的SQL数据库处于联机状态
此外,如果网络连接成功,您可以在使用连接到数据库时验证用户名或密码是否正确。确保没有任何打字错误。此外,用户名应有足够的权限访问此数据库。您可以尝试通过SQL数据库属性中的服务器管理员登录访问此数据库。此外,您可以参考使用Java连接以访问Azure SQL数据库
当使用Microsoft JDBC驱动程序进行SQL Server时。请注意:
- 将服务器名称附加到连接字符串中的用户标识
- 使用加密需要设置
hostnameInertificate
hostNameInCertificate
如果指定encrypt=true(如果服务器名
在连接字符串shortName.domainName中,设置
hostNameInCertificate
property to*.domainName.)。这个物业是
从驱动程序的7.2版起为可选
希望这有帮助。如果我需要设置encrypt=true和hostNameInCertificate=cr2.eastus1-a.control.database.windows.net。我需要在哪里从Azure SQL DB的服务获取cr2.eastus1-a.control.database.windows.net的证书?顺便说一句,为了使Azure服务和资源能够访问Azure DB服务器,我们将Azure VM的公共ip地址添加到Azure SQL DB的防火墙设置中。您可以使用勾号使您的帖子更具可读性,
像这样
。