Java - 以编程方式添加SQL Azure防火墙规则

时间:2016-02-20 16:33:41

标签: java sql-server azure

我在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();
        }
    }

1 个答案:

答案 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>
相关问题