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の方が高速です。 |
Empress Android DBのSDKの構成
Empress は Android API level 10をサポートし、Empress SQLite APIを提供することでSQLiteとの互換機能を提供します。EmpressはSQLiteと併用して使用することが可能ですのでAndroid OS再構築を必要としません。
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 |
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アプリケーションは以下の図のような構成になっています。
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アプリケーションは図のようになっています。
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関連のインポート文を以下のように変更します。 |
---|---|
手順2 |
AndroidのEmpress一時ディレクトリの作成します。Empress Android DBデータベースエンジンは一時ファイルを保存するディレクトリを必要とする場合があります。Android機器では基本的にデフォルトは/sdcardとなっています。 |
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 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エミュレータや実機の環境でサンプルコードはすぐに使用出来ます。
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 |
暗号化によりアプリケーションの既存コードを修正する必要がありません。 |