Android DB

Empress Android DBは、SQLiteと100%互換のEmpress SQLite APIと米国商務省標準技術局のAES128, AES192, AES256によるカーネル暗号化が実装されているため、すでにSQLiteで開発したアプリを暗号化によりセキュア、高速化することが可能です。また、企業のBYODの要求に対応するため、同じデバイス内でEmpressとSQLiteとの併用出来るので、個人用アプリはSQLite、企業用アプリはEmpressと切り分けて使用することも可能です。

Empress Android DBの特長

  1. Empress Android DBでアプリケーションを作成すると、データベースが暗号化されているので、情報漏洩のリスクが大幅に軽減されます。
  2. Empress Mobisec認証機能により、クラウドから暗号化キーを取得するので、データの保存場所とキーの保管場所を分離出来ます。
  3. EmpressのライブラリはJARファイルで提供され、Eclipse開発環境で容易に使用可能です。
  4. Java、CによってAndroid上の全てのアプリがEmpress暗号化データベースにアクセス可能です。
  5. EmpressはSQLiteと比較すると、高速で多機能なデータベースです。登録・更新・削除時で30~50倍、検索時でも10倍程度Empressの方が高速です。
    1. Empress Android DBのSDKの構成

      Empress は Android API level 10をサポートし、Empress SQLite APIを提供することでSQLiteとの互換機能を提供します。EmpressはSQLiteと併用して使用することが可能ですので、Android OS再構築を必要としません。

      Empress Android DBのSDK

       

      Empress Android DB SDKのインストール

      1.インストールの準備

      Empress Android DB は、Microsoft Windows, Linux, Apple Mac OS X host マシン上のAndroid開発環境で稼動します。以下のソフトウェアをご準備ください。

      1 Android SDK r17 もしくはそれ以上
      2 Android Platform 2.3 もしくはそれ以上
      3 Eclipse 3.6.2 もしくはそれ以上と ADT Plugin for Eclipse
      4 Empress Android DB v2.0もしくはそれ以上
      5 Empress Licence Key

      empress_android_db_v2.1.zipの構成

      empress_android_db_v2.1_zip

      2.インストール

      empress_android_db_v2.1.zip を解凍してください。デフォルトでempress_sdk_android_v2.1.というディレクトリに展開されます。

      開発環境の設定

      Empress Android DBを使用してAndroidのプログラムを開発するために2つの手順が必要となります。

      手順1 Empress jar file(s) をアプリケーションプロジェクトに追加してください。例えば、empressJDBC.jar ファイルを<PROJECT_DIR>/libsにコピーします。Empress sqlite APIを使ったアプリケーションを開発する場合は、同様のパスをempressSQLiteAPI.jarを追加してください。
      手順2 Empress のネイティブライブラリである libjdbcbcs.so をアプリケーションプロジェクトに追加してください。例えばlibjdbcbcs.soを<PROJECT_DIR>/libs/armeabiにコピーします。

      Empress Android API

      Empress Android DBは以下のAndroid向けAPIをサポートしています。

      1 Empress JDBC API for Android (Empress JDBC API)
      2 Empress SQLite API (Empress SQLiteコンパチレイヤ
      3 Empress Database 管理と断電回復API for Android
      4 Empress セットアップAPI (Empress Setup API)

      1.Empress JDBC API

      Empress Android DB は JDBC APIをサポートしています。 Empress JDBC APIによって、新しいデータベースアプリケーションや、既存のアプリケーションのEmpressへの移行が簡単にできます。Empress JDBC API を使用することにより、データベースが外部、たとえばLANや、インターネット、クラウド上にあるデータベースを使用することができます。

      2.Empress SQLite API

      JDBCに加えて、Empress Android DB はEmpress SQLite API をサポートし、android.database.sqliteで定義されています。Android上のSQLiteアプリケーションをEmpress Android DB移行するとき、このインターフェイスを使用すれば、僅かの変更によりSQLiteからセキュアで高速なEmpress Android DBへ、簡単に移行することが可能になります。

      Empress JDBC APIを利用したアプリ開発

      Empress Android DB zip fileに含まれているEmpress JDBCサンプルプロジェクトは、設定済みのEmpressのサンプルコードが含まれているため、Androidのエミュレータや実際の機器環境ですぐに試すことができます。典型的なEmpress Androidアプリケーションは以下の図のような構成になっています。

      Empress JDBC API

      1.テンポラリディレクトリの準備

      実行時にEmpress Android DBデータベースエンジンは、一時ファイルを保存するディレクトリを必要とします。デフォルトでは、Empress Android DBは"empress/tmp"という一時ファイル格納ディレクトリをデバイス上にシステムテンポラリーディレクトリとして作成します。システムテンポラリーディレクトリは、Java systemのプロパティである"java.io.tmpdir"から取得します。 以下の方法で指定してください。

      String tmpdir = System.getProperty("java.io.tmpdir");
      if (!dbLocation.equals (tmpdir))
      postText ("DoEmpSQLite:Resetting javio.io.tmpdir '"
      + tmpdir + "' to '" + appdatadir + "'");
      System.setProperty("java.io.tmpdir", appdatadir);
      }

      2.ライセンスキーのセット

      EmpressアプリケーションをAndroid環境で使用するために、有効なライセンスキーを事前にアプリケーションに設定してください。ライセンスキーは株式会社Empress Software Japanより提供されます。

      ライセンスキーには、以下の2種類があります。

      1 期限のある評価用ライセンスキー
      2 出荷向け暗号化ランタイムライセンスキー

      ライセンスは以下のように設定します。

      lic_str = "18a94c3c3a2d4a9f3c0b0a225bae78398561c30476be1ad3";
      if (SetUp.getLicenceKey() == null)
      SetUp.setLicenceKey (lic_str);

      3.Android環境での Empressシステム変数設定

      Empressのシステム変数により Empress稼働環境を制御できます。システム変数はテーブルのロックの試行回数やソート時に確保するソート領域の制御などに使われます。システム変数のほとんどはマニュアルに記載の通り、デフォルト値が決まっています。OSエディタを呼び出すMSEDITORなど、システム変数のいくつかはAndroid環境と関連がないものもあります。システム変数の変更は以下の関数で設定できます。

      SetUp.setEnv (String key, String value)

      例:Empress 変数「MSLOCKRETRY」に100を設定する方法
      SetUp.setEnv("MSLOCKRETRY","100");

      4.Android DBのデータベース管理

      DatabaseAdmin.createDB - databaseの作成
      DatabaseAdmin.removeDB - databaseの削除
      DatabaseAdmin.exportDB - databaseからのテーブルエクスポート
      DatabaseAdmin.importDB - databaseからのテープルインポート
      DatabaseAdmin.checkAndRepair - databaseの修復

      Empressデータベースの管理ユーティリティは、アプリケーションがデータベース管理タスクの完全なコントロールを必要とするときに管理ルーチンとして呼び出されます。

      Empress SQLite APIを利用したアプリ開発

      典型的なEmpress Androidアプリケーションは図のようになっています。
      Empress SQLite API

      Androidはクラスとメソッドをandroid.database.sqliteパッケージで定義しています。サポートされるクラスは以下の通りで、Android API level 10をサポートしています。

      SQLiteClosable
      SQLiteCursor
      SQLiteDatabase
      SQLiteOpenHelper
      SQLiteProgram
      SQLiteQuery
      SQLiteQueryBuilder
      SQLiteStatement

      android.database.sqlite クラスは以下で参照できます。

      http://developer.android.com/reference/android/database/sqlite/package-summary.html

      SQLite アプリからEmpressへの移行

      Empress は業界初となるSQLite互換するEmpress Android DBを提供致します。Empress Android DBはOS再構築を必要としません。
      SQLiteからEmpressに移行すると以下のようなメリットがあります。

      1

      SQLiteと比較するとEmpressは高速です。特に複数のタスクがデータベースに同時にアクセスする場合、Empressの高速性はさらに高く発揮されます。

      2

      データ保存に最適なAndroid AES準拠のBlock Cipher方式の暗号化を使用しています。 カーネル暗号化のため、オーバーヘッドは10%以下になります。ルート権限を取られてもデータは暗号化されているため読めません。

      3

      Empress Mobisec 認証はクラウドで認証後暗号化キーを受領するので、データの保管場所と暗号化キーの保管場所の分離し、非常に高いセキュリティを提供します。

      4

      Empress組込みデータベースは高速断電回復機能、断片化抑止機能を提供します。

      **暗号化機能はEmpress Android DBの正式ライセンスのみ使用可能です。 **

       

      1.移行方法

      SQLiteからEmpressへ移行する場合、パフォーマンスを重視する場合はEmpress JDBC APIをお奨めします。変更を最小限としたい場合にはSQLite互換のEmpress SQLite APIの使用をお薦めします。

      手順1

      SQLite関連のインポート文を以下のように変更します。
      import com.empress.database.sqlite.*;

      手順2

      AndroidのEmpress一時ディレクトリの作成します。Empress Android DBデータベースエンジンは一時ファイルを保存するディレクトリを必要とする場合があります。Android機器では基本的にデフォルトは/sdcardとなっています。

      EmpressのサンプルコードEmpressEmpSQLiteSampleはEmpress Android DB zipファイルに含まています。すべてのEmpressコンポーネントがすでに構成されているので、Androidエミュレータや実機の環境でサンプルコードはすぐに使用出来ます。 図はEmpressEmpSQLiteSampleのディレクトリ構成です。

      EmpressEmpSQLiteSampl

      2.ライセンスキーのセット

      EmpressアプリケーションをAndroid環境で使用するためには、ライセンスキーを事前にアプリケーションに設定しなければなりません。ライセンスキーは株式会社Empress Software Japanより提供されます。

      設定例:

      lic_str = "18a94c3c3a2d4a9f3c0b0a225bae78398561c30476be1ad3";
      if (SetUp.getLicenceKey() == null)
      SetUp.setLicenceKey (lic_str);

      EmpressとSQLiteとの違い

      Empress とSQLiteは以下の違いがあります。

      1.非ANSIのSQLシンタックス

      EmpressはANSI SQL 92に準拠しています。SQLiteの非ANSIのSQL(例えばRowIdなど)はサポートしません。

      2.データ型

      SQLiteはデータ型のチェックは行いません。ユーザはどのようなデータもチェックなしにカラムに登録出来ます。これに対してEmpressはデータ型のチェックは必須です。

      Empress Android DBの暗号化の使用法

      Empress Android DBはEカーネル暗号化機能がデフォルトで組み込まれています。これによりアプリケーション開発者は、データセキュリティにより柔軟な制御が可能になります。Empressカーネル暗号化はOpen SSLのlibcryptoライブラリとリンクするためラッパを提供します。また、Empress Android DBはEmpress Mobisec認証を使用し、クラウドから暗号キーを取得するので暗号キーはAndroid端末に保存されない非常に高いセキュリティを提供します。

      データ暗号化の定義

      Empress Android DB の暗号化は列レベルで実行します。ユーザに列を暗号化する列(属性)を定義する機能を提供しています。データベーステーブルcustomerの4つの列、 cust_no、name、ssn、address中のcust_no(顧客番号)とssn(社会保障番号)を暗号化する場合は以下の通りです。

      Empressで列を暗号化するにはSQL CREATE TABLEコマンドを使用します。

      CREATE TABLE customer (
      cust_no INTEGER NOT NULL ENCRYPTED,
      name CHAR(20),
      ssn CHAR(9) ENCRYPTED,
      address VARCHAR(64);

      列CUST_NOの検索が必要なのでインデックスを作成する必要があります。

      CREATE UNIQUE INDEX customer_index ON customer(cust_no);

      Empress Android DBのcustomerテーブルのcust_noとssn列が暗号化されます。上位アプリケーションはデータ暗号化されていないアクセス方法と全く同じ方法で暗号化データをアクセス出来ます。データ暗号化するだけでアプリケーションの変更はありません。

      以下のSQL文はcustomerテーブルで暗号化されていない属性(ssn)を暗号化する方法です。

      ALTER TABLE customer CHANGE ssn ENCRYPTED;

      以下のSQL文はcustomerテーブルで暗号化した属性(ssn)を非暗号化する方法です。

      ALTER TABLE customer CHANGE ssn NOT ENCRYPTED;

      暗号化データベースの作成方法についてはcreateDB()メソッドを参照してください。詳しい情報はEmpressAdminAPISampleを参照して下さい。

      Empress Android DBを使用した場合のメリット

      1

      暗号化と復号化のパフォーマンスオーバーヘッドは10%程度、さらに暗号化によるデータベースのサイズの増加も最小限にします。そのために、ユーザアプリケーションに対する性能影響を最小限に抑えることができます。

      2

      暗号化によりアプリケーションの既存コードを修正する必要がありません。