我在Microsoft Azure中有一个SQL数据库。我想从eclipse中的java应用程序访问这个SQL数据库。 Azure门户具有将客户端IP地址添加到Azure SQL数据库的防火墙设置的规定。只允许这些IP地址访问数据库。现在我陷入编码以允许以编程方式访问给定的IP地址。有人可以帮忙吗?
这是我得到的例外:
com.microsoft.sqlserver.jdbc.SQLServerException: Cannot open server 'pluginserver' requested by the login. Client with IP address '105.241.8.90' is not allowed to access the server. ClientConnectionId:7c605cae-5bb6-452e-a606-243b1fab304f
在研究时我得到的代码在c#中做同样的事情。但是我想要java中的代码。
public void AddFirewallRule(FirewallRule rule)
{
using (SqlConnection conn = new SqlConnection(this.ConnectionString))
using (SqlCommand cmd = conn.CreateCommand())
{
conn.Open();
cmd.CommandText = "sp_set_firewall_rule";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@name", SqlDbType.NVarChar).Value = rule.Name;
cmd.Parameters.Add("@start_ip_address", SqlDbType.VarChar).Value = rule.startIPAddress.ToString();
cmd.Parameters.Add("@end_ip_address", SqlDbType.VarChar).Value = rule.endIPAdress.ToString();
cmd.ExecuteNonQuery();
}
}
答案 0 :(得分:1)
根据我的经验,该例外意味着它需要首先通过TCP / IP打开服务器套接字才能执行某些操作,但防火墙不允许您的IP地址访问。这是相互矛盾的。
该问题是由于在Java中使用JDBC驱动程序为Azure SQL数据库创建防火墙规则引起的。 Java / JDBC规范不包括此功能。
在Azure上,您只能通过两种方式在Java中创建或更新防火墙规则:REST API或Azure SDK for Java(不是通过JDBC用于MS-SQLServer)。
您可以参考官方文档https://azure.microsoft.com/en-us/documentation/articles/sql-database-configure-firewall-settings-rest/以了解如何为SQL数据库配置防火墙。
要创建防火墙规则,您可以尝试使用Apache HttpComponent的类HttpClient
或JDK的类HTTPConnection
来请求REST API Create or Update Firewall Rule。
或者您可以尝试使用界面FirewallRuleOperations
获得的界面SqlManagementClient
,请参阅Javadocs of Azure SDK for Java中的包com.microsoft.azure.managemant.sql
。
要使用Azure SDK for Java,您需要将以下maven存储库添加到Eclipse项目中。
<dependency>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-svc-mgmt</artifactId>
<version>0.9.2</version>
</dependency>
<dependency>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-svc-mgmt-sql</artifactId>
<version>0.9.2</version>
</dependency>