プログラムからSQL AzureのFirewallの設定を変更する方法が公開されています。
英語での元ネタはこちら(2010/07/29 Update)。
http://blogs.msdn.com/b/sqlazure/archive/2010/07/29/10043869.aspx
日本語での元ネタはこちら(2010/07/30 Update)。
http://sqlazure.jp/w/index.php?diary/2010-07-30
以下、上記URLの本文を引用してご紹介します。
SQL Azureのアクセス制御
SQL Azureは2種類のアクセス制御をしています。
- ユーザIDとパスワードによる認証
- IPアドレスによるアクセス制御を行うサーバ側のFirewallによるフィルタリング
SQL AzureのFirewall
SQL Azure ServerにはIPアドレスによる通信制御を行うFirewallがあります。アクセスしようとしているクライアントのIPがFirewallのアクセス許可ルールに登録されていない場合は、クライアントはSQL Azureにアクセスすることはできません。
アクセスを許可するIPを登録するには、SQL Azureポータルを使用することが一般的です。SQL Azureを使用するには、SQL AzureポータルでFirewallルールを作成する必要があります。Firewallルールを作成するまでは、クライアントはSQL Azureにアクセスすることができません。
下のスクリーンショットは、SQL AzureのFirewallルールを追加した例です。Transact-SQLでFirewallルールを変更する方法
SQL Azureに接続して、MasterデータベースでTransact-SQLを実行することでFirewallルールを変更することができます。
システムストアドプロシージャ「sp_set_firewall_rule」を実行することでFirewallルールを追加することができます。次の例は、FirewallルールにアクセスすることができるIPアドレスを1つ追加するTransact-SQLです。
1 exec sp_set_firewall_rule N'Wayne Berry','206.63.251.3','206.63.251.3'
次の例は、Microsoft servicesとWindows Azureからのアクセスを許可するFirewallルールを追加するTransact-SQLです。
1 exec sp_set_firewall_rule N'MicrosoftServices','0.0.0.0','0.0.0.0'
Firewallルールの名前は、一意である必要があります。
Firewallルール一覧を確認するには、sys.firewall_rulesビューを参照します。
次の例は、ルール一覧を取得するTransact-SQLです。
1 select * from sys.firewall_rules
次のスクリーンショットは、SQL Server Management StudioでSQL Azureに接続して、コマンドを実行した結果です。
また、「sp_delete_firewall_rule」システムストアドプロシージャを使用することで、Firewallルールを削除することができます。
1 exec sp_delete_firewall_rule N'Wayne Berry'
セキュリティの考察
Masterデータベースに接続している間、サーバプリンシパルレベルのログインのみSQL AzureサーバのFirewallの設定をすることができます。SQL Azureポータルに管理者でログインしたときと同じ話です。
SQL Azureに接続して、sp_set_firewall_ruleなどのプロシージャを実行する前に、予め最低一つはFirewallルールを追加しておかなければなりません。コマンドラインからFirewallルールを設定する方法
Windowsコマンドラインからsqlcmd.exeを使用してSQL Azureに対してTransact-SQLを実行することができます。
コマンドラインを使用して、Firewallルールを設定するスクリプトを実行することができます。Windows AzureからFirewallルールを設定する方法
ADO.NETを使用して、Windows AzureからSQL Azureに対してTransact-SQLを実行することができます。つまり、Windows AzureからSQL AzureのFirewallルールを設定することができます。
Windows Azureは、Windows Azureを呼び出したクライアントのIPがわかることです。
Windows Azure webロール上のwebページを呼び出したIPを動的に、SQL AzureのFirewallルールに追加することができます。
PowerPivotまたはWinFormsのようにユーザが直接SQL Azureに接続する場合に、とても有効です。
次の例は、動的にSQL AzureのFirewallルールに動的にIPアドレスを追加している簡単な例です。
1234567891011121314151617181920212223 String clientIPAddress = Request.UserHostAddress;using (SqlConnection sqlConnection =new SqlConnection(ConfigurationManager.ConnectionStrings["SqlAzureMaster"].ConnectionString)){sqlConnection.Open();using (SqlCommand sqlCommand =new SqlCommand("sp_set_firewall_rule", sqlConnection)){sqlCommand.CommandType = System.Data.CommandType.StoredProcedure;sqlCommand.Parameters.Add("@name", SqlDbType.NVarChar).Value= clientIPAddress;sqlCommand.Parameters.Add("@start_ip_address", SqlDbType.VarChar).Value= clientIPAddress;sqlCommand.Parameters.Add("@end_ip_address", SqlDbType.VarChar).Value= clientIPAddress;sqlCommand.ExecuteNonQuery();}}