In this post we will add and delete firewall rules associated with Database server in SQL Azure programmatically.
Read part 1 of this post here. In part 1, we fetched SQL Azure firewall rules programmatically.
In this post I am going to add two functions in existing Firewall class.
- Adding function to add firewall rule.
- Adding function to delete firewall rule.
Adding firewall rule
We will use stored procedure sp_set_firewall_rule to add a firewall rule. This is default stored procedure provided by API.
![SQLAzure1.gif]()
We are using usual ADO.Net operations to call the stored procedure.
![SQLAzure2.gif]()
As input parameter we are passing object of firewallrule.
Deleting firewall rule
We will use API provided stored procedure sp_delete_firewall_rule to delete a firewall rule.
![SQLAzure3.gif]()
We are using usual ADO.Net operations to call the stored procedure.
![SQLAzure4.gif]()
We are passing name of the firewall rule to delete.
Full code for Firewall class is as below,
Firewall.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
namespace ConsoleApplication15
{
public class Firewall
{
public string Login { get; set; }
public string Password { get; set; }
public string ServerName { get; set; }
public string ConnectionString { get; set; }
public Firewall(string login, string password, string server)
{
this.ServerName = server;
this.Login = login;
this.Password = password;
SqlConnectionStringBuilder connectionStringBuilder = new SqlConnectionStringBuilder();
connectionStringBuilder.DataSource = string.Format(string.Format("tcp:{0}.database.windows.net,1433", ServerName));
connectionStringBuilder.InitialCatalog = "master";
connectionStringBuilder.UserID = this.Login;
connectionStringBuilder.Password = this.Password;
connectionStringBuilder.Pooling = true;
this.ConnectionString = connectionStringBuilder.ToString();
}
public List<FirewallRule> GetFireWallRules()
{
List<FirewallRule> lstFirewall = new List<FirewallRule>();
using (SqlConnection conn = new SqlConnection(this.ConnectionString))
{
using (SqlCommand cmd = conn.CreateCommand())
{
conn.Open();
cmd.CommandText = "select name , start_ip_address, end_ip_address FROM sys.FireWall_rules ";
using (SqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
lstFirewall.Add(new FirewallRule(reader["name"] as string,
reader["start_ip_address"] as string,
reader["end_ip_address"] as string));
}
}
}
return lstFirewall;
}
}
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();
}
}
public void DeleteFirewallRule(string name)
{
using (SqlConnection conn = new SqlConnection(this.ConnectionString))
using (SqlCommand cmd = conn.CreateCommand())
{
conn.Open();
cmd.CommandText = "sp_delete_firewall_rule";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@name", SqlDbType.NVarChar).Value = name;
cmd.ExecuteNonQuery();
}
}
}
}
We have FirewallRule and Firewall class in place. Now we need to call AddFireWallRule() and DeleteFirewallRule() function to perform add and delete operation of firewall rules.
Program.cs
using System;
namespace ConsoleApplication15
{
class Program
{
static void Main(string[] args)
{
Firewall firewall = new Firewall("LoginName", "Password", "servername");
var result = firewall.GetFireWallRules();
foreach (var r in result)
{
Console.WriteLine("Firewall Rule Name {0} : Start IP {1} , End IP {2}", r.Name, r.startIPAddress, r.endIPAdress);
}
Console.ReadKey(true);
Console.WriteLine("After Adding Firewall rule named Test1");
FirewallRule addfirewallrule = new FirewallRule("Test1", "14.99.157.99", "14.99.157.101");
firewall.AddFirewallRule(addfirewallrule);
var result1 = firewall.GetFireWallRules();
foreach (var r in result1)
{
Console.WriteLine("Firewall Rule Name {0} : Start IP {1} , End IP {2}", r.Name, r.startIPAddress, r.endIPAdress);
}
Console.ReadKey(true);
Console.WriteLine("After Deleting Firewall rule named Test1");
firewall.DeleteFirewallRule("Test1");
var result2 = firewall.GetFireWallRules();
foreach (var r in result2)
{
Console.WriteLine("Firewall Rule Name {0} : Start IP {1} , End IP {2}", r.Name, r.startIPAddress, r.endIPAdress);
}
Console.ReadKey(true);
}
}
}
Press F5 to fetch, add and delete firewall rules,
![SQLAzure5.gif]()