SQL Azure

Windows Azure SQL Database には、これまで監査機能が提供されておらず、監査ログを取得したい場合にはトリガーなどで作りこむ必要がありました。
でも、全エディション(Basic、Standard、Premium)に対して、監査機能がPreview版での提供が始まりました!
SIerとかの人にはうれしい機能ですね。

image

記録できるイベント

以下のイベントを必要なものだけ選択して収集することができます。

  • データへのアクセス
  • スキーマーの変更(DDL)
  • データの変更(DML)
  • アカウント、ロール、権限(DCL)
  • セキュリティ例外

機能の有効化方法

監査機能を有効かするには、Azure Preview Portalを使用します。

  1. 監査機能の有効化:https://account.windowsazure.com/PreviewFeatures?fid=datasecurity
  2. Azure Preview Portalにアクセスする:https://portal.azure.com
  3. 監査したいデータベースを選択し、[Auditing Preview]を有効化し、監査設定ブレードを表示する

    image

  4. ログの格納先ストレージを選択する
    image
  5. 記録したいイベント種類を選択する

監査ログを記録する方法

監査ログを記録するには、アプリケーションの接続文字列を専用の文字列に変更する必要があります。

通常の接続文字列:<server name>.database.windows.net

監査ログを記録する接続文字列:<server name>.database.secure.windows.net

監査ログの分析とレポート

ログデータを素早く分析するのを支援するために、予めてダッシュボードレポートテンプレートを設定したExcelスプレッドシートをダウンロードします。自分の監査ログでテンプレートを使用するために、Excel 2013とPower Queryが必要です。テンプレートは、Azure Sotrageアカウントから直接監査ログをインポートして、Power Queryが処理されます。

 

image

ポータル上では、次のような管理ビューで表示されます。

image

 

ログフォーマット

監査ログは、Azure ストレージアカウントのAuditLogsという名前の1つのAzure Storage Tableに格納されます。(将来的には複数のTableに分割できるようになります。)

顧客は、Azure Storage Explorerや、Excel 2010/2013でPower Queryを使用して直接Azure Tableからデータをインポートしたり、提供するReport Templateを使用してログを参照できます。または独自のレポートソリューションを開発したり、既存のソリューションに統合することができます。

監査ログテーブルフィールド

  • PartitionKey
  • RowKey
  • TimeStamp
  • EventTime
  • ServerName
  • DatabaseName
  • ApplicationName
  • ClientIP
  • EventID
  • EventType
  • ActionSuccess
  • ActionStatus
  • FailureReason
  • statement
  • PrincipalName
  • AffectedRows
  • ConnectionGuid
  • SchemaVersion
  • Origin
  • ActionId
  • ClassType
  • ObjectType

Event Types

  • LoginSuccess
  • LoginFailed
  • SchemaChanges
  • DataAccess
  • DataChanges
  • GrantRevoke
  • StoredProcedure
  • BeginTransaction
  • CommitTransaction
  • RollbackTransaction
  • CancelBatch
  • SecurityException(ログインに失敗、セキュリティレベル14のSQL実行エラーの時)

参考情報

Get started with SQL database auditing

Windows Azure

元記事:How to Monitor for Storage Account Throttlingを抜粋、意訳し加筆しています。

Azureサブスクリプション・サービスの制限、容量、制約」で説明されているように、ディスク毎に500IOPSの制限があり、ストレージアカウント毎に20,000IOPSの制限があるので、Azure仮想マシン用に、一つのストレージアカウントで40より多くのVHDsを置かないように案内しています。

デフォルトでは、各サブスクリプションでは最大20のストレージアカウントを持つことができます。サブスクリプションでもてるストレージアカウントの最大数は、Microsoftサポートに連絡することで、20から最大50まで増やすことができます。

ストレージアカウントのスロットリングのリスクは、一つのストレージアカウントに40以上のVHDsを置くと、仮想マシンにネガティブなパフォーマンス影響を及ぼすことです。40以上の仮想ディスクがあると、それぞれのディスクは500IOPSの制限に達する前に、20,000IOPSの制限にひかかってしまいます。

ストレージアカウントでディスク数を計測する

ポータルで、仮想マシン配下にあるDisksを見ることで、マニュアルでストレージアカウント毎のディスク数を取得することができます。

image

 

同じストレージアカウントのディスクで、場所カラムのDNS名が同じになります。たとえば、場所列のhttps://clnorthcentralusstorage.blob.core.windows.net/で、clnorthcentralusstorageがストレージアカウント名になります。

Azure PowerShellのGet-AzureDiskコマンドレットを使用すると、ストレージアカウント毎のディスク数を簡単に取得することができます。

Get-AzureDisk | Where-Object { $_.AttachedTo } | Group-Object {$_.Medialink.Host.Split('.')[0]} –NoElement

Count Name
----- ----
 46 clnorthcentralusstorage

ストレージアカウントのスロットリングを監視する

ストレージアカウントのスロットリングを監視するために、Azure管理ポータルで、ストレージを選択肢、監視したいストレージアカウントを選択し、構成タブを選択し、監視セクションで、Blobをオフから最小に変更します。

image

 

監視タブに切り替え、メトリックスの追加ボタンを選択し、監視する目トリックの選択から、調整エラーと調整エラーのパーセンテージを選択します。

image

監視を設定すると、6時間、24時間、7日間の最小、最大、平均、合計の発生数を表示することができます。

SQL Azure

Azure SQL Database のサーバーを作成すると、昔はシステムによってランダムな文字列が付与される味気ないサーバー名となっていました。

image

こんなサーバー名は正直覚えられません。すっごく不便。名前を自由につけさせて欲しい!って数年ぐらい思っていました。
今日、知ったのですが、Azure SQL Databases のサーバー名をユーザーが指定できるようになっています。新しいプレビュー版のポータルで。

 

SQL Databaseのサーバー作成画面を開きます。

image

 

そーすると、サーバー名を入力できるようになっています!

image

 

まだ、あまり知られていないみたいなので、結構メジャーな単語でもデータベース作成できますよ!

image

ちなみに名前の存在チェックは微妙に動作していないので、azure.database.windows.netが作成できそうだったので、作成したらすでに存在しているとエラーが発生するという…。ご注意をw

image

image

   
statusCode:Conflict
statusMessage:{"code":"60080","message":"Server name 'azure' has already been used.","target":null,"details":[{"code":"60080","message":"Server name 'azure' has already been used.","target":null,"severity":"16"}],"innererror":[]}
 

SQL Azure

1. Azureモバイルサービスでスケジューラーを提供

モバイルサービスを作成して、スケジューラーを作成してジョブを実行する。
たとえば次のようなコードを実行する。

 function Execute_Process_Request() {
      console.log("Executing ExecuteDataRequest...");
      mssql.query('Exec dbo.ExecuteDataRequest',{
         success: function(results){
         console.log("Finished the Process Request job.");
         },
          error: function(err) {
            console.log("error is: " + err);
         }
     });
 }

2. オンプレミスのデータベースサーバー上のSQLジョブを作成する

身も蓋もない話ですが、オンプレミスのSQL ServerのSQL Agent ジョブを使用して、敵ジョブを実行する方法ですね。

これには、sqlcmdツールを使用して、Azure SQL Databasesに対してクエリを実行します。

もしくは、オンプレミスじゃなくて、Azure IaaS(仮想マシン)上のSQL ServerのSQL Agentジョブを使っても良いですね。

 

元ネタ:Scheduling job on SQL Azure

Windows Azure

Azureサブスクリプションを管理するためにマイクロソフトが一般提供しているツール(ポータル、新しいポータル、Powershell、X-Plat CLI)は、すべてAzure Service Management REST APIを使用しています。

Azure Powershellでデバッグ情報を参照するには、[-Debug]スイッチを指定します。

image

 

Azure Cross Platform CLIの場合は、[-vv]スイッチを指定します。

image

 

元ネタ:Learning Azure Service Management REST API through Powershell, and Azure CLI tools