Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (日本語) » SQL Anywhere サーバ - データベース管理 » セキュリティ » 安全なデータの管理 » データベースの暗号化と復号化 » データベースの一部の暗号化

 

カラムの暗号化

データベース内のカラムを暗号化する場合は、ENCRYPT 関数を使用します。ENCRYPT 関数は、同じ AES の強力な暗号化アルゴリズムを使用します。このアルゴリズムはデータベースの暗号化用に使用され、その関数に渡される値を暗号化します。

ENCRYPT 関数のキーは、大文字と小文字を区別しないデータベース内であっても、大文字と小文字が区別されます。ほとんどのパスワードと同様、最善の方法は、簡単には推測できないキー値を選択することです。キーには最低でも 16 文字の値を選択し、大文字と小文字、数字、文字、特殊文字を組み合わせて使用することをおすすめします。このキーは、データを復号化するたびに指定する必要があります。

警告

強力な暗号化が適用されたデータベースの場合、キーのコピーは必ず安全な場所に保管してください。暗号化キーがわからなくなった場合は、Sybase 製品の保守契約を結んでいるサポート・センタに依頼してもデータにはアクセスできません。アクセスできなくなったデータベースは、廃棄して、新しくデータベースを作成する必要があります。

暗号化された値は、DECRYPT 関数で復号化できます。このとき、ENCRYPT 関数で指定したキーと同じキーを使用する必要があります。これらの関数はともに LONG BINARY 値を返します。異なるデータ型を使用する必要がある場合は、CAST 関数を使用して、その値を必要なデータ型に変換できます。次の例では、CAST 関数を使用して、復号化された値を必要なデータ型に変換する方法を示します。CAST 関数 [データ型変換]を参照してください。

データベース・ユーザが復号化された形式のデータにアクセスする必要があっても、暗号化キーにはアクセスできないようにする必要がある場合は、DECRYPT 関数を使用するビューを作成できます。これにより、ユーザは暗号化キーを知らなくても、復号化されたデータにアクセスできるようになります。テーブルを使用したビューまたはストアド・プロシージャを作成する場合は、ALTER VIEW 文や ALTER PROCEDURES 文の SET HIDDEN パラメータを使用して、ユーザがビュー定義やプロシージャ定義を参照することによって暗号化キーにアクセスできないようにすることができます。ALTER PROCEDURE 文ALTER VIEW 文を参照してください。

カラムの暗号化の例

次の例では、user_info というテーブルのパスワードを格納するカラムを暗号化するトリガを使用します。user_info テーブルは、次のように定義されています。

CREATE TABLE user_info (
   employee_ID INTEGER NOT NULL PRIMARY KEY,
   user_name CHAR(80),
   user_pwd CHAR(80) );

新しいユーザが追加されたとき、または既存のユーザのパスワードが更新されたときに、2 つのトリガが user_pwd カラムの値を暗号化するためにデータベースに追加されます。

  • encrypt_new_user_pwd トリガは、新しいローが user_info テーブルに追加されるたびに実行されます。

    CREATE TRIGGER encrypt_new_user_pwd
    BEFORE INSERT
    ON user_info
    REFERENCING NEW AS new_pwd
    FOR EACH ROW
    BEGIN
        SET new_pwd.user_pwd=ENCRYPT(new_pwd.user_pwd, '8U3dkA');
    END;
  • encrypt_updated_pwd トリガは、user_info テーブルの user_pwd カラムが更新されるたびに実行されます。

    CREATE TRIGGER encrypt_updated_pwd
    BEFORE UPDATE OF user_pwd
    ON user_info
    REFERENCING NEW AS new_pwd
    FOR EACH ROW
    BEGIN
        SET new_pwd.user_pwd=ENCRYPT(new_pwd.user_pwd, '8U3dkA');
    END;

データベースに新しいユーザを追加する場合

INSERT INTO user_info
VALUES ( '1', 'd_williamson', 'abc123');

SELECT 文を発行して user_info テーブルの情報を表示する場合、user_pwd カラムの値はバイナリ・データ (パスワードの暗号化された形式) であり、INSERT 文で指定された値 abc123 ではありません。

このユーザがパスワードを変更した場合

UPDATE user_info
SET user_pwd='xyz'
WHERE employee_ID='1';

encrypt_updated_pwd トリガが実行され、新しいパスワードの暗号化された形式が user_pwd カラムに表示されます。

元のパスワードは、次の SQL 文を発行して検索できます。この文はデータを復号化するために DECRYPT 関数と暗号化キーを使用し、値を LONG BINARY から CHAR 型に変換するために CAST 関数を使用しています。

SELECT CAST (
   DECRYPT( user_pwd, '8U3dkA' )
   AS CHAR(100))
   FROM user_info
   WHERE employee_ID = '1';
参照