(57)【特許請求の範囲】
【請求項１】
レコードが項目単位で暗号化されている暗号化テーブルと、該暗号化テーブルに対応する平文テーブルの各項目における項目値の順位を記録したインデックステーブルとを有するリレーショナルデータベースにおける該インデックステーブルの作成方法において、
前記リレーショナルデータベースを制御するリレーショナルデータベースマネジメントシステムが、ポインター値ｉを１に設定する第１のステップと、
前記リレーショナルデータベースマネジメントシステムが、前記平文テーブルを参照することにより、該平文テーブルにおける第１の暗号化対象項目に関しソート処理を行い、該ソート処理により得た順位の順に一意な値の項目の項目値Ａ（）を取得し、該一意な値の項目の項目値Ａ（）を該順位に対応付けて配列する第２のステップと、
前記リレーショナルデータベースマネジメントシステムが、前記ポインター値ｉに対応する前記一意な値の項目の項目値Ａ（ｉ）と、該ポインター値ｉとを前記インデックステーブルに記録する第３のステップと、
前記リレーショナルデータベースマネジメントシステムが、前記ｉをｉ＋１に替える第４のステップと、
前記リレーショナルデータベースマネジメントシステムが、前記第３のステップ乃至第４のステップを前記平文テーブルの全レコード数分繰り返す第５のステップと、
前記リレーショナルデータベースマネジメントシステムが、前記第１のステップ乃至第５のステップを前記平文テーブルにおける第１の暗号化対象項目以外の暗号化対象項目について順次に行う第６のステップと
からなることを特徴とするインデックステーブルの作成方法。
【請求項２】
レコードが項目単位で暗号化されている暗号化テーブルと、該暗号化テーブルに対応する平文テーブルの各項目における項目値の順位を記録したインデックステーブルとを有するリレーショナルデータベースにおける所定項目の範囲検索のための検索であって、該範囲検索の下限値および上限値を検索値とし、該下限値以上であり、かつ最も小さい値の該インデックステーブルにおける該所定項目の項目値を第１の順位とし、該上限値以下であり、かつ最も大きい値の該インデックステーブルにおける該所定項目の項目値を第２の順位とするとき、該第１および第２の順位を検索する方法において、
前記リレーショナルデータベースを制御するリレーショナルデータベースマネジメントシステムが、前記インデックステーブルにおける所定項目の最大項目値を検索し、該最大項目値を基に該インデックステーブルにおけるレコード数を仮定し、該仮定レコード数を変数MAXとする第１のステップと、
前記リレーショナルデータベースマネジメントシステムが、変数MINを１に、変数MAX／２の整数部を変数Ｐに、前記下限値を検索するときは該下限値を検索値とするとともに、前記上限値を検索するときは該上限値を検索値とし、該検索値を変数Ｓに、該範囲検索における下限値を検索するときは検索条件Ｗを“以上”に、該範囲検索における上限値を検索するときは該検索条件Ｗを“以下”に、それぞれ設定する第２のステップと、
前記リレーショナルデータベースマネジメントシステムが、ループを開始する第３のステップと、
前記リレーショナルデータベースマネジメントシステムが、前記暗号化テーブル及びインデックステーブルを検索し、該インデックステーブルにおける前記所定項目の項目値が変数Ｐと同じであるレコードにおける一意な値の項目の項目値を取得し、該暗号化テーブルにおける該一意な値の項目の項目値が属するレコードの該所定項目の項目値を取得し、取得した該項目値の復号により平文の項目値を生成し、変数Ａを該平文の項目値とする第４のステップと、
前記リレーショナルデータベースマネジメントシステムが、検索値Ｓと変数Ａとを比較し、Ｓ＝Ａであるとき、前記第４のステップでインデックステーブルから取得した前記一意な値の項目が属する該インデックステーブルにおけるレコードの前記所定項目の項目値を前記第１または第２の順位として取得し、Ｓ＜Ａのとき、変数MAXを変数Ｐとし、変数Ｐを（Ｐ−MIN）／２＋MINに変更するとともに、Ｓ＞Ａのとき、変数MINを変数Ｐとし、変数Ｐを（MAX−Ｐ）／２＋Ｐに変更する第５のステップと、
前記リレーショナルデータベースマネジメントシステムが、前記第５のステップの結果がＰ＝MAX又はＰ＝MINに至ったとき、ループを終了する第６のステップと、
前記リレーショナルデータベースマネジメントシステムが、前記暗号化テーブル及びインデックステーブルを検索し、該インデックステーブルにおける前記所定項目の項目値が変数MINからMAXまでの範囲にあるレコードの一意な値の項目を選択し、該暗号化テーブルにおいて該一意な値の項目を同じくするレコードの該所定項目の項目値を取得し、復号する第７のステップと、
前記リレーショナルデータベースマネジメントシステムが、前記検索条件Ｗが“以上”であるとき、前記第７のステップで復号した項目値のうちで検索値Ｓ以上であり、かつ最小である項目値が属するレコードの一意な値の項目の項目値を取得し、前記検索条件Ｗが“以下”であるとき、前記第７のステップで復号した項目値のうちで検索値Ｓ以下であり、かつ最大である項目値が属するレコードの一意な値の項目の項目値を取得する第８のステップと、
前記リレーショナルデータベースマネジメントシステムが、前記第８のステップで取得した前記一意な値の項目と同じ項目が属する前記インデックステーブルにおけるレコードの前記所定項目の項目値を前記第１または第２の順位とする第９のステップと
からなり、
前記第６のステップから前記第９のステップは、前記第５のステップにおける検索値Ｓと変数Ａとの比較結果がＳ＝Ａのときに実行されず、比較結果がＳ≠Ａであるときに実行され、
前記第２のステップにおいて検索条件を“以上”に設定したときは、第５および第９のステップでは、前記所定項目の項目値を前記第１の順位として取得し、前記第２のステップにおいて検索条件を“以下”に設定したときは、第５および第９のステップでは、前記所定項目の項目値を前記第２の順位として取得する、
ことを特徴とするリレーショナルデータベースにおける所定項目の範囲検索のための順位検索方法。
【請求項３】
レコードが項目単位で暗号化されている暗号化テーブルと、該暗号化テーブルに対応する平文テーブルの各項目における項目値の順位を記録したインデックステーブルとを有するリレーショナルデータベースにおける範囲検索の方法において、
前記リレーショナルデータベースを制御するリレーショナルデータベースマネジメントシステムが、所定の項目に関する第１の順位をキーとして前記インデックステーブルを検索し、該所定の項目における項目値が該第１の順位以上または以下であるレコードの一意な値の項目の項目値を取得し、
前記リレーショナルデータベースマネジメントシステムが、前記インデックステーブルの検索で取得された前記一意な値の項目の項目値をキーとして前記暗号化テーブルを検索することにより、前記所定の項目に関する順位が前記第１の順位以上または以下であるレコードの暗号化項目値を取得する、
ことを特徴とする範囲検索の方法。
【請求項４】
レコードが項目単位で暗号化されている暗号化テーブルと、該暗号化テーブルに対応する平文テーブルの各項目における項目値の順位を記録したインデックステーブルとを有するリレーショナルデータベースにおける範囲検索の方法において、
前記リレーショナルデータベースを制御するリレーショナルデータベースマネジメントシステムが、所定の項目に関する第１及び第２の順位をキーとして前記インデックステーブルを検索し、該所定の項目における項目値が該第１の順位以上であり、かつ該第２の順位以下であるレコードの一意な値の項目の項目値を取得し、
前記リレーショナルデータベースマネジメントシステムが、前記インデックステーブルの検索で取得された前記一意な値の項目の項目値をキーとして前記暗号化テーブルを検索することにより、前記所定の項目に関する順位が前記第１の順位以上であり、かつ前記第２の順位以下であるレコードの暗号化項目値を取得する
ことを特徴とする範囲検索の方法。
【請求項５】
前記第１の順位が請求項２の方法で検索された前記第１の順位である請求項３に記載の範囲検索の方法。
【請求項６】
前記第１および第２の順位が請求項２の方法で検索された前記第１および第２の順位である請求項４に記載の範囲検索の方法。
【請求項７】
取得した前記暗号化項目値を平文に復号することを特徴とする請求項３乃至６に記載の範囲検索の方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、データベースに関し、特にデータを暗号化して格納するリレーショナルデータベースに関する。
【０００２】
【従来の技術】
インターネットやＬＡＮが広く普及した現在では、データベースはインターネットやＬＡＮといった通信網を介してアクセスされることが多い。図１５は、インターネットを介してデータベース（図ではDBと略記。他の図においても同じ）のファイルにデータベースクライアント（図ではDB Clientと略記。他の図においても同じ）がアクセスしているときに、ハッカー等の不正な利用者がそのデータベースファイルにアクセスしている状態を模式的に示す図である。正当な利用者であるデータベースクライアントが１つのデータベースアクセスチャンネルを介し、DBサーバプロセスを経てデータベースファイルにアクセスしている。DBサーバプロセスは、リレーショナルデータベースマネージメントシステム（RDBMS）の一部分である。他方、ハッカーはデータベース・サーバのセキュリティホールを見つけ、不正にデータベースファイルにアクセスし、データベースファイルの窃盗や改竄を行っている。また、図において成りすましと記したように、不正な利用者は、データベースクライアントがデータベースアクセスチャンネルを介してデータベースファイルにアクセスしているとき、そのデータベースアクセスチャンネルにおける通信を傍受している。インターネットやＬＡＮといった通信網を介してアクセスされるデータベースファイルは、このような窃盗や改竄、或いは成りすましといった行為により、データの安全が常に脅かされている。更に、データベースファイル自体が物理的に盗まれるということもある。
【０００３】
平文で記録されたデータベースファイルはこのような脅威に晒されるので、データベースファイルを暗号化することによりその脅威を軽減し、データベースファイルの安全性を向上しようという試みもある。現在広く利用されているデータベースはリレーショナルデータベースである。データの暗号化に留意した従来のリレーショナルデータベースとして、特表平１１−５０９３４９「ＳＱＬリレーショナルデータベース用エミュレータ」に記載された技術がある。特表平１１−５０９３４９には、その請求項３に、「秘密を保持するためにデータファイルがアルゴリズムに従って暗号化され、データへのアクセスが暗号化／復号モジュール（Ｍ３）によって処理される」と記載され、また発明の詳細な説明の欄には、「必要に応じて、暗号化／復号モジュールを使用してデータファイルにアクセスすることによって、ユーザデータのセキュリティを保証できるので有利である」等と記載されている。
【０００４】
【発明が解決しようとする課題】
前掲の特表平１１−５０９３４９の記載は具体性に欠け、どのような手段や方法によりユーザデータのセキュリティを保証できるのか不明であり、この従来の技術によっては、窃盗や改竄、或いは成りすましといった不正行為、又はデータベースファイル自体の物理的盗難があったとき、データフィルの安全性を保全できない。また、単にデータベースファイルを暗号化するだけでは、正当利用者によるデータベースファイルの検索に要する手間と時間が著しく増大し、実用に供し得るデータベースを構成することはできない。
【０００５】
そこで、本発明の目的は、例えデータベースファイルに対し窃盗や改竄、或いは成りすましといった不正行為あり、又はデータベースファイル自体の物理的盗難があったとしても、そのデータベースファイルの秘密が保持され、しかも、正当利用者によるデータベースファイルの検索に要する手間と時間が、著しく増大することのない（データベースファイルが平文であるときに比べ）、リレーショナルデータベース及びそのリレーショナルデータベースにおけるインデックステーブルの作成方法の提供にある。
【０００６】
【課題を解決するための手段】
前述の課題を解決するために本発明は次の手段を提供する。
【０００７】
［１］レコードが項目単位で暗号化されている暗号化テーブルと、該暗号化テーブルに対応する平文テーブルの各項目における項目値の順位を記録したインデックステーブルとを有することを特徴とするリレーショナルデータベース。
【０００８】
［２］前記暗号化テーブルでは、少なくとも１つの項目が暗号化されていることを特徴とする前記［１］に記載のリレーショナルデータベース。
【０００９】
［３］前記暗号化テーブルでは、少なくとも一意な値の項目が平文であることを特徴とする前記［１］又は［２］に記載のリレーショナルデータベース。
【００１０】
［４］前記暗号化テーブルでは、一意な値の項目が暗号化されていることを特徴とする前記［１］又は［２］に記載のリレーショナルデータベース。
【００１１】
［５］前記暗号化テーブルでは、一意な値の項目だけが平文であり、一意な値の項目以外の項目は暗号化されていることを特徴とする前記［１］乃至［３］に記載のリレーショナルデータベース。
【００１２】
［６］前記暗号化テーブルでは、全ての項目が暗号化されていることを特徴とする前記［１］，［２］又は［４］に記載のリレーショナルデータベース。
【００１３】
［７］前記インデックステーブルにおける各項目名は、前記平文テーブルにおける各項目名と対を成し、該両テーブルにおける該対をなす両項目名は同じであることを特徴とする前記［１］乃至［６］に記載のリレーショナルデータベース。
【００１４】
［８］前記インデックステーブルにおける各項目名は、前記平文テーブルにおける各項目名と対を成し、該両テーブルにおける該対をなす両項目名は互いに相違することを特徴とする前記［１］乃至［６］に記載のリレーショナルデータベース。
【００１５】
［９］前記順位は、昇順又は降順のうちのどちらか一方の順位付け方式による順位であることを特徴とする前記［１］乃至［８］に記載のリレーショナルデータベース。
【００１６】
［１０］レコードが項目単位で暗号化されている暗号化テーブルと、該暗号化テーブルに対応する平文テーブルの各項目における項目値の順位を記録したインデックステーブルとを有するリレーショナルデータベースにおける該インデックステーブルの作成方法において、
ポインター値ｉを１に設定する第１のステップと、
前記平文テーブルを参照することにより、該平文テーブルにおける第１の暗号化対象項目に関しソート処理を行い、該ソート処理により得た順位の順に一意な値の項目の項目値Ａ（）を取得し、該一意な値の項目の項目値Ａ（）を該順位に対応付けて配列する第２のステップと、
前記ポインター値ｉに対応する前記一意な値の項目の項目値Ａ（ｉ）と、該ポインター値ｉとを前記インデックステーブルに記録する第３のステップと、
前記ｉをｉ＋１に替える第４のステップと、
前記第３のステップ乃至第４のステップを前記平文テーブルの全レコード数分繰り返す第５のステップと、
前記第１のステップ乃至第５のステップを前記平文テーブルにおける第１の暗号化対象項目以外の暗号化対象項目について順次に行う第６のステップと
からなることを特徴とするインデックステーブルの作成方法。
【００１７】
［１１］レコードが項目単位で暗号化されている暗号化テーブルと、該暗号化テーブルに対応する平文テーブルの各項目における項目値の順位を記録したインデックステーブルとを有するリレーショナルデータベースにおける所定項目の範囲検索のための検索であって、該範囲検索の下限値および上限値を検索値とし、該下限値以上であり、かつ最も小さい値の該インデックステーブルにおける該所定項目の項目値を第１の順位とし、該上限値以下であり、かつ最も大きい値の該インデックステーブルにおける該所定項目の項目値を第２の順位とするとき、該第１および第２の順位を検索する方法において、
前記インデックステーブルにおける所定項目の最大項目値を検索し、該最大項目値を基に該インデックステーブルにおけるレコード数を仮定し、該仮定レコード数を変数MAXとする第１のステップと、
変数MINを１に、変数MAX／２の整数部を変数Ｐに、前記下限値を検査するときは該下限値を検索値とするともに、前記上限値を検索するときは該上限値を検索値とし、該検索値を変数Ｓに、検索条件Ｗを“以上”に、該範囲検索における上限値を検索するときは該検索条件Ｗを“以下”に、それぞれ設定する第２のステップと、
ループを開始する第３のステップと、
前記暗号化テーブル及びインデックステーブルを検索し、該インデックステーブルにおける前記所定項目の項目値が変数Ｐと同じであるレコードにおける一意な値の項目の項目値を取得し、該暗号化テーブルにおける該一意な値の項目の項目値が属するレコードの該所定項目の項目値を取得し、取得した該項目値の復号により平文の項目値を生成し、変数Ａを該平文の項目値とする第４のステップ、
検索値Ｓと変数Ａとを比較し、Ｓ＝Ａであるとき、前記第４のステップでインデックステーブルから取得した前記一意な値の項目が属する該インデックステーブルにおけるレコードの前記所定項目の項目値を前記第１または第２の順位として取得し、Ｓ＜Ａのとき、変数MAXを変数Ｐとし、変数Ｐを（Ｐ−MIN）／２＋MINに変更するとともに、Ｓ＞Ａのとき、変数MIN を変数Ｐとし、変数Ｐを（MAX−Ｐ）／２＋Ｐに変更する第５のステップと、
前記第５のステップの結果がＰ＝MAX又はＰ＝MINに至ったとき、ループを終了する第６のステップと、
前記暗号化テーブル及びインデックステーブルを検索し、該インデックステーブルにおける前記所定項目の項目値が変数MINからMAXまでの範囲にあるレコードの一意な値の項目を選択し、該暗号化テーブルにおいて該一意は値の項目を同じくするレコードの該所定項目の項目値を取得し、復号する第７のステップと、
前記検索条件Ｗが“以上”であるとき、前記第７のステップで復号した項目値のうちで検索値Ｓ以上であり、かつ最小である項目値が属するレコードの一意な値の項目の項目値を取得し、前記検索条件Ｗが“以下”であるとき、前記第７のステップで復号した項目値のうちで検索値Ｓ以下であり、かつ最大である項目値が属するレコードの一意な値の項目の項目値を取得する第８のステップと、
前記第８のステップで取得した前記一意な値の項目と同じ項目が属する前記インデックステーブルにおけるレコードの前記所定項目の項目値を前記第１または第２の順位とする第９のステップと
からなり、
前記第２のステップにおいて検索条件を“以上”に設定したときは、第５および第９のステップでは、前記所定項目の項目値を前記第１の順位として取得し、前記第２のステップにおいて検索条件を“以下”に設定したときは、第５および第９のステップでは、前記所定項目の項目値を前記第２の順位として取得する
ことを特徴とするリレーショナルデータベースにおける所定項目の範囲検索のための順位検索方法。
【００１８】
［１２］レコードが項目単位で暗号化されている暗号化テーブルと、該暗号化テーブルに対応する平文テーブルの各項目における項目値の順位を記録したインデックステーブルとを有するリレーショナルデータベースにおける範囲検索の方法において、
所定の項目に関する第１の順位をキーとして前記インデックステーブルを検索し、該所定の項目における項目値が該第１の順位以上または以下であるレコードの一意な値の項目の項目値を取得し、
前記インデックステーブルの検索で取得された前記一意な値の項目の項目値をキーとして前記暗号化テーブルを検索することにより、前記所定の項目に関する順位が前記第１の順位以上または以下であるレコードの暗号化項目値を取得する
ことを特徴とする範囲検索の方法。
【００１９】
［１３］レコードが項目単位で暗号化されている暗号化テーブルと、該暗号化テーブルに対応する平文テーブルの各項目における項目値の順位を記録したインデックステーブルとを有するリレーショナルデータベースにおける範囲検索の方法において、
所定の項目に関する第１及び第２の順位をキーとして前記インデックステーブルを検索し、該所定の項目における項目値が該第１の順位以上であり、かつ該第２の順位以下であるレコードの一意な値の項目の項目値を取得し、
前記インデックステーブルの検索で取得された前記一意な値の項目の項目値をキーとして前記暗号化テーブルを検索することにより、前記所定の項目に関する順位が前記第１の順位以上であり、かつ前記第２の順位以下であるレコードの暗号化項目値を取得する
ことを特徴とする範囲検索の方法。
【００２０】
［１４］  前記第１の順位が前記［１１］の方法で検索された前記第１の順位である前記［１２］に記載の範囲検索の方法。
【００２１】
［１５］  前記第１および第２の順位が前記［１１］の方法で検索された前記第１および第２の順位である前記［１３］に記載の範囲検索の方法。
【００２２】
［１６］取得した前記暗号化項目値を平文に復号することを特徴とする前記［１２］乃至[１５]に記載の範囲検索の方法。
【００２３】
【発明の実施の形態】
次に図面を参照し、本発明の実施の形態を説明する。図1は、本発明の一実施の形態のリレーショナルデータベースにおけるテーブルの構成例を示す図である。図２は、本実施の形態におけるインデックステーブルの作成方法を模式的に示す図である。図３は、本実施の形態における暗号化テーブルの一例を示す図である。図４は、本実施の形態において、暗号化テーブルに格納した1つのレコード内のデータをキーワードで検索する方法を示す概念図である。図５及び図６は、本実施の形態において、暗号化テーブルに格納した多数のレコード内からある範囲を指定し、その範囲内のレコードを検索する方法を示す概念図である。図７及び図８は、本実施の形態において、新規にレコードを暗号化テーブルに格納する方法を示す概念図である。図９は、本実施の形態において、暗号化テーブルからレコードを削除する方法を示す概念図である。図１０は、本実施の形態において、暗号化テーブルに格納されているレコードを修正する方法を示す概念図である。図１１は、本実施の形態におけるインデックステーブルの一括更新の方法を示す概念図である。図１２は、本実施の形態におけるインデックステーブルの作成方法を示す流れ図である。図１３及び図１４は、本実施の形態に２分検索法を適用し、データの検索をする方法を示す流れ図である。
【００２４】
本実施の形態のリレーショナルデータベースにおけるデータベースファイルは、暗号化テーブル及びインデックステールで構成される。暗号化テーブルは、平文テーブルにおける各項目を暗号化することにより生成できる。また、暗号化テーブルは、未だレコードが格納されてない新規のテーブルに、各項目が暗号化されたレコードを順次に格納することによっても作成できる。図１は、平文テーブルが既に生成されているときに、平文テーブルから暗号化テーブル及びインデックステーブルを作成する様子を概念的に示している。平文テーブルにおける項目名は、「ＮＯ」、「会員番号」、「氏名」、「住所」である。暗号化テーブルでは暗号化される項目のデータ属性はすべて文字型である。例えば、平文テーブルにおける会員番号のデーア属性は数値型であるが、暗号化テーブルにおける会員番号のデータ属性は文字列型である。
【００２５】
この「ＮＯ」項目は、前述の一意な値の項目の例であり、オラクル（登録商標）などのリレーショナルデータベースで主キーとか、プライマリーキーとか称されている項目に相当する。「ＮＯ」項目の項目値を特定することにより、レコードが一意に特定さるので、本願では「ＮＯ」項目の項目値をレコードＮＯ又は単にＮＯと称することにする。また、「ＮＯ」項目の項目名を「レコードＮＯ」と記すこととする。いわゆるユーザデータは、項目名「会員番号」、「氏名」、および「住所」における項目値であり、暗号化テーブルでは暗号化されて格納されている。ここでは、項目名「会員番号」、「氏名」、および「住所」における項目値は、それぞれ会員番号、氏名、および住所と記す。そして、これら項目値を具体的なデータとして示すときは、該項目値を“”で囲んで表記することとする。例えば、暗号化テーブルにおける”3mfj4340snswlw”は平文テーブルにおける“田中一郎”を本実施の形態のリレーショナルデータベースにおける暗号アルゴリズムで暗号化したデータである。
【００２６】
図のテーブルにおいて紙面（背景）をグレーに変換した領域は、暗号化項目が格納される項目である。暗号化テーブルにおいてもレコードＮＯは平文のままである。レコードＮＯを暗号化しても本発明は実現できるが、この実施の形態ではレコードＮＯは平文のままとし、検索処理の簡単化および高速化を図っている。各レコードＮＯには唯一のＮＯが付与されている。そこで、レコードＮＯはレコードを一意に特定する機能を有し、ＮＯを指定することによりレコードを一意に指定できる。各レコードは１行のデータから構成されており、レコードＮＯとして“１”を指定することにより、図１における平文テーブルでは、レコードＮＯ＝“１”、会員番号＝“００１”、氏名＝“鈴木  太郎”、住所＝“東京都品川区”で構成されるレコードが指定される。同様に、暗号化テーブルでは、レコードＮＯとして“１”を指定することにより、レコードＮＯ＝“１”、会員番号＝”gtxUcA”、氏名＝”iLFeC0P8o0Yf”、住所＝”zksi3m4394”でなるレコードが指定される。実際の暗号化テーブルは、図１と同様に項目名が「ＮＯ」、「会員番号」、「氏名」および「住所」でなる会員テーブルでも、図３に例示するように、多数のレコードでもって構成されるのが一般的である。
【００２７】
インデックステーブルは本発明に特徴的なテーブルであり、各暗号化テーブルにはそれぞれ１つづつのインデックステーブルが対応している。インデックステーブルでは、各項目は平文である。インデックステーブルにおける項目名は平文テーブルにおける項目名と同じである。したがって、インデックステーブルにおける各項目は平文テーブルにおける各項目に１対１に対応している。インデックステーブルにおける各項目値は、平文テーブルにおける該対応項目の順位値である。図１の平文テーブルでは、項目名「会員番号」では、項目名「ＮＯ」が“１”の順位は１位、項目名「ＮＯ」が“２”の順位は２、項目名「ＮＯ」が“３”の順位は３である。また、図１の平文テーブルにおける、項目名「氏名」では、アルファベット順に順位をつけることとし、レコードＮＯが“１”の順位は１位、レコードＮＯが“２”の順位は３、レコードＮＯが“３”の順位は２である。
【００２８】
図２を参照し、インデックステーブルの作成方法を説明する。図２では、説明の簡潔化のために、平文テーブルのデータを図１の平文テーブルのものより一層簡単なものとしてある。「項目１」の順位は数字の昇順、「項目２」の順位はアルファベット順、また「項目３」の順位はアイウエオ順である。
【００２９】
インデックステーブルを作成するために、まず平文テーブルの項目名＝「項目１」についてソート処理を行う。このソート処理により、順位１位、２位及び３位にはレコードＮＯがそれぞれ“３”，“１”及び“２”の項目が選ばれ、レコードＮＯがこの順（“３”，“１”，“２”の順）に並び替えられる。図２の例では、レコードＮＯが“１”のレコードでは、「項目１」の項目値は２となる。レコードＮＯが“１”のレコードにおける「項目２」及び「項目３」の項目値は、この段階では決められていないので、空欄である。また、レコードＮＯが“２”のレコードでは、「項目１」の項目値は３となる。レコードＮＯが“２”のレコードにおける「項目２」及び「項目３」の項目値は、この段階では決められていないので、空欄である。また、レコードＮＯが“３”のレコードでは、「項目１」の項目値は１となる。レコードＮＯが“３”のレコードにおける「項目２」及び「項目３」の項目値は、この段階では決められていないので、空欄である。
【００３０】
同様に、「項目２」についてソート処理を行う。「項目２」のソート処理により、順位１位、２位及び３位にはレコードＮＯがそれぞれ“１”，“２”及び“３”の項目が選ばれ、レコードＮＯがこの順（“１”，“２”，“３”の順）に並び替えられる（この例では、並び替えられた結果のレコードＮＯの順は元の平文テーブルにおける順と同じになる）。図２の例では、レコードＮＯが“１”のレコードでは、「項目２」の項目値は１となる。レコードＮＯが“１”のレコードにおける「項目３」の項目値は、この段階では決められていないので、空欄である。また、レコードＮＯが“２”のレコードでは、「項目２」の項目値は２となる。レコードＮＯが“２”のレコードにおける「項目３」の項目値は、この段階では決められていないので、空欄である。また、レコードＮＯが“３”のレコードでは、「項目２」の項目値は３となる。レコードＮＯが“３”のレコードにおける「項目３」の項目値は、この段階では決められていないので、空欄である。
【００３１】
同様に、「項目３」についてソート処理を行う。「項目３」のソート処理により、順位１位、２位及び３位にはレコードＮＯがそれぞれ“３”，“２”及び“１”の項目が選ばれ、ＮＯ項目がこの順（“３”，“２”，“１”の順）に並び替えられる。図２の例では、レコードＮＯが“１”のレコードでは、「項目３」の項目値は３となる。レコードＮＯが“１”のレコードにおける「項目１」、「項目２」及び「項目３」の項目値は、この段階で全て決められ、それぞれ２，１，３である。また、レコードＮＯが“２”のレコードでは、「項目３」の項目値は２となる。レコードＮＯが“２”のレコードにおける「項目１」，「項目２」及び「項目３」の項目値は、この段階では全て決められ、それぞれ３，２，２である。また、レコードＮＯが“３”のレコードでは、「項目３」の項目値は１となる。レコードＮＯが“３”のレコードにおける「項目１」，「項目２」及び「項目３」の項目値は、この段階で全て決められ、それぞれ“１”，“３”，“１”である。かくして図２のインデックステーブルが作成された。
【００３２】
次に、図４を参照し、図１の如くに暗号化テーブルとインデックステーブルとを有する本実施の形態のリレーショナルデータベースにおいて、キーワードによりレコードの検索を行う例を説明する。図４の暗号化会員テーブルは、図１に示すように、項目名が「ＮＯ」、「会員番号」、「氏名」および「住所」でなる会員テーブルであるとする。暗号化会員テーブルは、データベース・サーバに格納され、同じデータベース・サーバに格納されているリレーショナルデータベースマネージメントシステム(RDBMS)により制御されている。いま、クライアントは、検索キーワード“田中一郎”で暗号化会員テーブルにおける住所を検索するものとする。このとき、クライアント側の暗号データベースプログラムにより“田中一郎”を暗号化し、“田中一郎”を”3mfj340snswlw”なる暗号データに変換する。クライアント側の暗号データベースプログラムは、例えばオラクル（登録商標）のSQL*PLUSに暗号・復号機能を付加したデータベースプログラムであり、ＳＱＬ言語によりサーバー側のRDBMSと交信し、データの検索・追加・修正・削除、テーブルの更新などを行うとともに、暗号・復号用のアルゴリズムにより、レコードの項目毎にデータの暗号・復号を行う。
【００３３】
“田中一郎”の暗号”3mfj340snswlw”なるキーワードで暗号化会員テーブルを検索し、田中一郎の住所を取得するためには、クライアント側の暗号データベースプログラムは、Select住所from会員テーブルwhere氏名=” 3mfj340snswlw”なるいわゆるSelect文で暗号化会員テーブルに問合せをする。すると、平文の会員テーブルを検索するときと同様に、田中一郎の住所のデータが暗号化会員テーブルから返信される。しかし、このときに得られる返信データは、その住所を暗号化したデータ”kdsnw948nwkwnw”である。クライアント側の暗号データベースプログラムは、その暗号データを暗号アルゴリズムで復号し、“東京都港区”なる住所を取得する。
【００３４】
次に図５及び図６を参照して、本実施の形態のリレーショナルデータベースによる範囲検索の例を説明する。いま、本実施の形態のリレーショナルデータベースは、前述のところと同様に、項目名が「ＮＯ」、「会員番号」、「氏名」および「住所」でなる暗号化会員テーブルとそのインデックステーブルを格納しているものとする（後に説明する図７乃至図１１においても同様とする）。本実施の形態において範囲検索を行うときは、インデックステーブルを参照し、開始レコードと終了レコードのレコードナンバーを取得し、取得したレコードナンバーをキーとして、暗号化テーブルを検索し、該当するレコードを取得する。ここで挙げる範囲検索の例は、暗号化会員テーブルにおける会員番号が５０から６０のレコードを取得することである。図５及び図６における▲１▼乃至▲６▼はその範囲検索における処理のステップを示す。これら各ステップでは、その範囲検索のためのSQL文及びその検索で取得される結果が示してある。図５及び図６では、図の左側にはクライアント側の暗号データベースプログラムで行う処理および検索結果を図示し、図の右側には実施の形態のリレーショナルデータベースにおける暗号化会員テーブル又はこの暗号化会員テーブルに対応するインデックステーブルを示す（後に説明する図７乃至図１４においても同様である）。
【００３５】
ステップ▲１▼では、２分検索法によるインデックステーブルの検索の開始を示す。２分検索法は、既に周知の検索法であるが、本実施の形態に適用するのに適した具体的な２分検索法が図１３及び図１４に詳しい流れ図で示してある。Select文において、“レコード数÷２”の部分にアンダーラインを入れてある。このアンダーラインは、“レコード数÷２”なる記述そのものがこの位置に入力されるのではないことを示すために付してある。
【００３６】
そのSelect文の発行に先立って、インデックステーブルをまず検索し、対象項目（今の例では、「会員番号」の項目）における最大インデックス値を取得する。インデックステーブルでは、各項目には順位が格納されている。そこで、インデックス値は、図11を参照して後述するインデックステーブルの一括更新をすると、最小順位から最大順位まで欠番の無い整数になる。しかしながら、インデックステーブルの一括更新の前では、図８のステップ▲５▼を参照して後述するように、インデックス値は小数点を含むことが有り、また図９のレコード削除などによりインデックス値に欠番が生じることもある。そこで、その最大インデックス値は必ずしもレコード数と一致しない。しかし、最大インデックス値は概ねレコード数に近似するので、図５のステップ▲１▼では、インデックステーブルの対象項目（ここでは、「会員番号」項目）における最大インデックス値を検索し、その最大インデックス値に１を加えた値をレコード数としている。最大インデックス値が少数点のときも、その最大インデックス値のレコードが検索対象から除かれることを防ぐために、最大インデックス値に１を加えた値をレコード数としているのである。
【００３７】
そのSelect文において、レコード数÷２なる式による具体的な計算結果の数字をこのアンダーラインの位置に入力する。“レコード数÷２”の部分のアンダーラインはこのこと（別途に検索し、計算して得た値を入れるということ）を示している。▲１▼の検索により、インデックステーブルにおける「会員番号」項目の項目値（順位）が中間値であるレコードＮＯが取得される。なお、他の図面におけるSelect文におけるアンダーラインも同様な目的で付されている。
【００３８】
ステップ▲２▼では、取得したレコードＮＯをキーとして、暗号化会員テーブルを検索する。この検索により、そのレコードＮＯの会員番号（暗号化された会員番号）が取得される。この会員番号をクライアント側の暗号データベースプログラムで解読し、平文の会員番号を生成する。ステップ▲２▼のSelect文における「検索するＮＯ」のアンダーラインは、ステップ１おけるアンダーラインと同様な趣旨で付されており、「検索するＮＯ」なる文字が入力されるのではなく、ステップ▲１▼で得られたレコードＮＯがこの位置に入力されることを示している。
【００３９】
ステップ▲３▼では、検索したい“会員番号”とステップ▲２▼で取得し、復号した“会員番号”とを比較する。検索したい“会員番号”は、範囲検索における範囲の下限値（＝５０）と上限値（＝６０）である。比較した両者が一致し、会員番号の下限値または上限値が判明したときは、他方の限界値を検索したい“会員番号”とし、再びステップ▲１▼とステップ▲３▼間の検索を繰り返し、他方の限界値を取得する。比較した両者が不一致であり、会員番号の下限値または上限値が判明しないときは、下限値または上限値の一方の限界値にステップ▲２▼の復号化会員番号が一致するまで再びステップ▲１▼とステップ▲３▼間の検索を繰り返し、更にステップ▲１▼からステップ▲３▼までの検索により他方の限界値の検索をし、取得する。下限値の会員番号を検索開始の会員番号と称し、上限値の会員番号を検索終了の会員番号と称し、検索開始の会員番号が存するレコードにおけるレコードＮＯを開始レコードＮＯと称し、検索終了の会員番号が存するレコードにおけるレコードＮＯを終了レコードＮＯと称することにする。ステップ▲１▼からステップ▲３▼は、前述の「リレーショナルデータベースにおける所定項目の範囲検索のための順位検索方法」における第１乃至第８のステップに相当する。ステップ▲１▼からステップ▲３▼で行う２分検索法の一層詳しい処理の手順は、図１３及び図１４に示してある。
【００４０】
ステップ▲４▼では、前述の「リレーショナルデータベースにおける所定項目の範囲検索のための順位検索方法」における第９のステップに相当し、開始レコードＮＯ及び終了レコードＮＯをキーとして、インデックステーブルを検索し、それぞれのレコードＮＯのレコードにおける会員番号の順位を取得する。インデックステーブルでは、会員番号項目には，会員番号の順位が格納されているので、ステップ▲４▼の検索により、開始会員番号の順位（開始順位）及び終了会員番号の順位（終了順位）が取得される。
【００４１】
ステップ▲５▼では、会員番号の開始順位および終了順位でインデックステーブルを検索し、それら開始順位と終了順位との間（開始順位と終了順位を含む）のレコードＮＯを所得する。
【００４２】
ステップ▲６▼では、ステップ▲５▼で取得したレコードＮＯをキーとして、暗号化会員テーブルを検索し、それらレコードＮＯのレコードを取得する。かくして、ステップ▲１▼からステップ▲６▼の検索により、会員番号が５０から６０の間（５０及び６０を含む）にある全ての会員のレコードが取得できた。
【００４３】
図５および図６を参照して説明した範囲検索の例で明らかなように、本実施の形態では、暗号化テーブルと、この暗号化テーブルに対応するインデックステーブルとを備えるので、範囲検索が高速に行える。もし、データベースの安全性を向上するために、平文テーブルを単純に暗号化した暗号化テーブルだけを備えるリレーショナルデータベースを構築したとすると、範囲検索の度に暗号化テーブルにおける全てのレコードを復号しなければならない。なぜなら、範囲検索では項目の順位を生成しなければならないのであるが、暗号データのままでは順位を知ることができないからである。範囲検索の度に全てのレコードを平文に復号すると、検索時間が非常に長くなるのは避けられない。これに対し、本実施の形態のリレーショナルデータベースでは、平文のときの項目の順位をインデックステーブルに予め格納しておくので、範囲検索においては、項目の順位をそのインデックステーブルの検索で取得でき、暗号化テーブルの復号を要しない。したがって、本実施の形態では、レコードの復号範囲および順位データ取得のための比較処理が大幅に減少し、処理を高速に行うことができる。また、このインデックステーブルを利用することにより、レコードの並び替えが高速にできるから、レコードを並び替えたテーブルを高速に取得（出力）できる。
【００４４】
次に、図７及び図８を参照し、本実施の形態のリレーショナルデータベースに新規にレコードを追加する処理を説明する。既存の暗号化テーブルに新規のレコードを追加するには、インデックステーブルを参照し、新規レコードの順位を求め、インデックス値を作成し、インデックステーブル及び暗号化テーブルにレコードを挿入する。ここで挙げるレコード追加の例は、会員番号が“１００”、氏名が“山田  太郎”、住所が“東京都品川区”である新規レコードを暗号化会員テーブルに追加することである。図７及び図８における▲１▼乃至▲７▼はそのレコード追加における処理のステップを示す。これら各ステップでは、そのレコード追加のためのSQL文及びその検索で取得される結果が示してある。
【００４５】
図７におけるステップ▲１▼，▲２▼及び▲３▼は、図５におけるステップ▲１▼，▲２▼及び▲３▼にそれぞれ相当する。図７のステップ▲１▼及び▲２▼は図５のステップ▲１▼及び▲２▼と同じ処理を行う。図７のステップ▲３▼は、図５のステップ▲３▼とほぼ同じ処理を行う。ただし、図５のステップ▲３▼では、復号した“会員番号”と比較される検索対象は、範囲検索の開始会員番号と終了会員番号との２つであったが、これに対し、図７のステップ▲３▼では、復号した“会員番号”と比較される検索対象は、追加したいレコードの会員番号という１つの会員番号だけである点で、両図におけるステップ▲３▼は相違している。この図７の処理では、ステップ▲１▼から▲３▼の処理を繰り返し、会員番号の値が“１００”より小さく、その中で最も大きい会員番号の値を持つレコードＮＯを暗号化会員テーブルから取得する。
【００４６】
図８のステップ▲４▼は、図６のステップ▲４▼とほぼ同じ処理を行う。但し、図６のステップ▲４▼では開始レコードＮＯ及び終了レコードＮＯの２つのレコードＮＯで検索したのに対し、図８のステップ▲４▼では１つの検索レコードＮＯだけで検索する点で、図８のステップ▲４▼は図６のステップ▲４▼と相違している。
【００４７】
ステップ▲５▼では、ステップ▲４▼で取得した“会員番号”の“順位”に小数点以下の数値を付加し、新規のインデックス値、すなわち順位を作成する。例えば、ステップ▲４▼で取得した“会員番号”の“順位”が“９５”であれば、９５＋０．００１＝９５．００１を追加会員番号用レコードにおける会員番号のインデックス値、すなわち順位とする。９５．００１なる順位の既存のレコードがあり、追加用の順位と既存順位が重複するときは、順位９５と９６との間に既にあるレコード及び追加レコードにつき、ソート処理を施し、各レコードの順位を付け直す処理をして、レコードの順位を更新する。
【００４８】
また、別の方法として、９５．００１なる順位の既存のレコードがインデックステーブルに既にあるときは、既にある順位９５．００１に０．００１を加えた９５．００２を既存のレコードの順位とする。すなわち、既存のレコードの順位を更新する。もし、９５．００１なる順位の既存のレコード及び９５．００２なる順位の既存のレコードがインデックステーブルに既にあるときは、既にある順位９５．００１及び９５．００２にそれぞれ０．００１を加えた９５．００２及び９５．００３を既存のレコードの順位とする。順位９５と９６との間に既に３つ以上の既存のレコードが存在するときは、前記と同様に既存のレコードの順位を更新する。
【００４９】
ステップ▲６▼では、クライアント側の暗号データベースプログラムで新規レコードを暗号化し、暗号化会員テーブルに追加する。ステップ▲７▼では、ステップ▲５▼で作成したインデックス値を基にに、新規レコードをインデックステーブルに追加する。かくして、ステップ▲１▼からステップ７の処理により、新規レコードが暗号化テーブル及びインデックステーブルに追加された。
【００５０】
次に、図９を参照して、本実施の形態のリレーショナルデータベースにおけるレコードを削除する処理を説明する。図９における▲１▼及び▲２▼はそのレコード削除における処理のステップを示す。これら各ステップでは、そのレコード削除のためのSQL文及びその検索で取得される結果が示してある。ステップ▲１▼では、暗号化会員テーブルにおける削除対象レコードのレコードＮＯを負の値に変更する。ステップ▲２▼では、インデックステーブルにおける削除対象レコードのレコードＮＯを負の値に変更する。このように負の値に変更されたレコードＮＯのレコードは、通常の検索処理では検索されないように、クライアント側の暗号データベースプログラムを設定しておく。但し、このリレーショナルデータベースの管理者は必要に応じて、レコードＮＯが負の値のレコードにもアクセスできるようにその暗号データベースプログラムを設定しておく。
【００５１】
次に、図１０を参照して、本実施の形態のリレーショナルデータベースにおけるレコードを修正する処理を説明する。図１０における▲１▼及び▲２▼はそのレコードの修正における処理のステップを示す。ステップ▲１▼では、暗号化テーブル及びインデックステーブルにおける対象レコードの削除処理を図９の方法で行う。ステップ▲２▼では、暗号化テーブル及びインデックステーブルにおける対象レコードの追加処理を図７及び図８の方法で行う。このステップ▲１▼及び▲２▼の処理により、レコードの修正が行われる。
【００５２】
次に、図１１を参照して、本実施の形態のリレーショナルデータベースにおけるインデックステーブルを一括更新する処理を説明する。図１１における▲１▼，▲２▼及び▲３▼はインデックステーブルの一括更新処理のステップを示す。ステップ▲１▼では、レコードＮＯが負数であるレコードを削除する。ステップ▲２▼では、インデックステーブルにおける「会員番号」の項目値、すなわち順位の順番にレコードＮＯを取得する。ステップ▲３▼では、ステップ▲２▼で取得したレコードＮＯの順番をシーケンス番号として、各レコードＮＯのレコードの“会員番号”をこのシーケンス番号に更新する。「住所」及び「氏名」についてもステップ▲２▼及びステップ▲３▼の処理を行い、インデックステーブルの一括更新を完了する。
【００５３】
図１２は、本実施の形態におけるインデックステーブルの作成方法を示す流れ図である。本実施の形態におけるインデックステーブルの作成方法については図２を参照して前に説明したが、図１２はその作成方法を流れ図で示している。このインデックステーブルの作成方法は、レコードが項目単位で暗号化されている暗号化テーブルと、該暗号化テーブルに対応する平文テーブルの各項目における項目値の順位を記録したインデックステーブルとを有するリレーショナルデータベースにおける該インデックステーブルの作成方法である。
【００５４】
ステップＰ１では、ポインター値ｉを１に設定する。ステップＰ２では、平文テーブルを参照することにより、該平文テーブルにおける第１の暗号化対象項目に関しソート処理を行い、該ソート処理により得た順位の順に項目名「レコードＮＯ」の項目値Ａ（）を取得し〔項目値Ａ（）は前述のレコードＮＯに相当する〕、該項目値Ａ（）を該順位に対応付けて配列する。ステップＰ３では、ループ処理に入る。ステップＰ４では、ポインター値ｉに対応する項目値Ａ（ｉ）と、該ポインター値ｉとをインデックステーブルに記録する。ステップＰ５では、ポインター値ｉをｉ＋１に替える。ステップＰ６では、第３のステップ乃至第５のステップを平文テーブルの全レコード数分繰り返す。ステップＰ１乃至Ｐ６は、平文テーブルにおける第１の暗号化対象項目以外の暗号化対象項目について行う。前述の会員テーブルの例では、第１の暗号化対象項目を「会員番号」、第２の暗号化対象項目を「氏名」、第３の暗号化対象項目を「住所」とすることにより、平文テーブルにおける「レコードＮＯ」（一意な値の項目）以外の全ての項目に関するインデックステーブルが作成される。
【００５５】
図１３及び図１４は本実施の形態に適用する２分検索法を示す流れ図である。２分検索法は、図５（範囲検索）のステップ▲１▼から▲３▼及び図７（レコードの追加）のステップ▲１▼から▲３▼において利用した。図１３及び図１４は、図５のステップ▲１▼から▲３▼に適用するときの２分検索法の手順を詳しく示している。２分検索法のプログラムはクライアント側の暗号データベースプログラムに組み込まれている。本実施の形態のリレーショナルデータベースでは、暗号化テーブルだけではなく、暗号化テーブルに対応した平文のインデックステーブルを備え、図５のステップ▲１▼から▲３▼を参照して説明したように、インデックステーブルの参照により各項目名ごとに項目の順位を取得できるので、暗号化したデータを２分検索法により効率よく検索できる。暗号化テーブルにつき範囲検索を行うには、図５及び図６を参照して説明したように、その範囲の下限値（図５の例では会員番号＝５０）及び上限値（図５の例では会員番号＝６０）を暗号化テーブルにおいて検索することが必要である。暗号化テーブルには、下限値または上限値に一致する項目値（図５の例では会員番号）が無いことがあり得る。このようなときには、２分検索法では、下限値以上であって最も小さい値（以下、下限検索値という）および上限値以下であって最も大きい値（以下、上限検索値という）を検索する。範囲検索においては、その下限検索値から上限検索値までの項目値のレコードを検索する。
【００５６】
図１３及び図１４におけるＱ１からＱ１２までのステップにより、まず下限値を検索し、次にＱ１からＱ１３までのステップを再度実行して上限値を検索する。下限値の検索ではステップＱ２における検索条件を“以上”とし、上限値の検索ではステップＱ２における検索条件を“以下”とする。その他のステップにおける処理は下限値の検索と上限値の検索とで差はないので、以下では下限値の検索を主として説明する。以下の説明においては、理解を容易にするために具体例を挙げる。その具体例として、本実施の形態のリレーショナルデータベースは、前述のところと同様に、項目名が「ＮＯ」、「会員番号」、「氏名」および「住所」でなる暗号化会員テーブルとそのインデックステーブルを格納しているものとする。本実施の形態において範囲検索を行うときは、インデックステーブルを参照し、開始レコード及び終了レコードのレコードＮＯ並びに両レコードＮＯの間の順位のレコードＮＯを取得し、取得したレコードＮＯをキーとして、暗号化テーブルを検索し、該当するレコードを取得する。ここで挙げる範囲検索の例では、暗号化会員テーブルにおける会員番号が５０から６０の範囲（５０及び６０を含む）にあるレコードを取得することとする。したがって、下限値の検索では検索値は５０であり、上限値の検索では検索値は６０である。
【００５７】
暗号化会員テーブルにおける会員番号が下限値５０又は５０以上であって最も小さい値（下限検索値）であるレコードを２分検索法で検索する手順をまず説明する。ステップＱ１では、インデックステーブルを検索し、対象項目の最大インデックス値を取得し、この最大インデックス値に１を加えた値を生成する。２分検索法プログラムにおける変数MAXを最大インデックス値に１を加えた値とする。従って、仮にインデックステーブルにおける最大インデックス値が７９．１であったとすると、小数点以下は切れ捨て、MAXは８０となる。この処理により得た最大インデックス値に１を加えた値（小数点以下切れ捨て）を、暗号化テーブル及びインデックステーブルのレコード数と仮定して以下のステップにおいて２分検索法を行うこととなる。以下では、ステップＱ１においてレコード数が８０と仮定され、ひいてはステップＱ１でMAXが８０に設定された場合を例に説明する。
【００５８】
インデックステーブルにおけるレコード数を取得する際に、最大インデックス値に１を加えた値をレコード数（小数点以下切り捨て）と仮定し、最大インデックス値をレコード数としない理由は次のとおりである。インデックステーブルでは、各項目には順位が格納されている。そこで、インデックス値は、図11を参照して説明したインデックステーブルの一括更新をすると、最小順位（１位）から最大順位まで欠番の無い整数になる。しかしながら、インデックステーブルの一括更新の前では、図８のステップ▲５▼を参照して説明したように、インデックス値は小数点を含むことが有り、また図９のレコード削除などによりインデックス値に欠番が生じることもある。そこで、その最大インデックス値は必ずしもレコード数と一致しない。もっとも、小数点や欠番のインデックス値は整数のインデックス値に比べ圧倒的に少ないのが通常であるから、レコード数は最大インデックス値に概ね近似すると仮定しても、実用上差し支えない。但し、ステップＱ１からステップＱ１３に関する以下の説明で明らかなように、２分検索ではレコード数をインデックス値（順位）の最大値（図１３及び図１４の例ではMAX）とみなし、この最大値を検索の最大範囲とするので、レコード数を順位の最大値、すなわち最大インデックス値、より小さく仮定すると、その仮定レコード数を越えたインデックス値のレコードは検索対象から漏れる。例えば、最大インデックス値が、７９．１であったとき、小数点以下を切り捨て、レコード数を７９とするならば、インデックス値が７９．１であるレコードは範囲検索の対象外となる。範囲検索における検索対象は暗号化テーブルの全レコードであるから、検索対象外となるレコードが生ずれば、範囲検索における検索の範囲に誤りが生じる。そこで、本実施の形態では、検索された最大インデックス値が小数点であったとき、その最大インデックス値のレコードが検索範囲から外されるのを防ぐために、最大インデックス値＋１（小数点切り捨て）をレコード数と仮定して、２分検索を行うようにしたのである。最大インデックス値＋１であって、小数点以下を切り捨てた値は、最大インデックス値の小数点以下を切り上げた値に等しい。
【００５９】
ステップＱ２では、２分検索法プログラムにおける変数MINを“１”に、変数Ｐを“MAX／２”に、変数Ｓを“検索値”（＝“５０”）に、変数Ｗを下限値検索用の“以上”にそれぞれ設定する。両テーブルのレコード数が８０のとき、Ｐ＝８０／２＝MAX／２＝４０となる。ステップＱ２により、インデックステーブルで第１回目（ステップＱ３からステップＱ９でなるループのにおける１回目のループ）に検索する対象の順位Ｐは、レコード数（＝８０）の２分値（MAX／２＝４０）に指定される。第２回目以降のインデックステーブルの検索は、ステップＱ７又はステップＱ８で設定されたＰの順位について行われる。ステップＱ３では、ループに入る。
【００６０】
ステップＱ４では、図示のSelect文を発行し、インデックステーブルにおいて項目名「会員番号」の項目値（「会員番号」項目における順位）がＰ（＝４０）であるレコードＮＯを取得し、暗号化テーブルの該レコードＮＯにおける項目名「会員番号」の項目値を取得し、その項目値を復号し、変数Ａを復号した項目値とする。
【００６１】
ステップＱ５では、変数ＳとＡとを比較する。ここで、Ｓ＝Ａであれば、検索値Ｓが復号値Ａであったこととなり、下限値が検索できたことになるので、２分検索法の処理は終了する。ステップＱ２では、インデックステーブルで第１回目に検索する対象の順位Ｐをレコード数（＝８０）の２分値（MAX／２＝４０）に指定しておいたので、ステップＱ５では、順位がＰである項目の項目値（会員番号）が検索値Ｓに一致するか否かを判定する。変数ＳとＡとが不一致であり、Ｓ＜Ａ又はＳ＞Ａであれば、ステップＱ６へ進む。ステップＱ６では、変数ＳとＡとを再び比較する。Ｓ＜ＡならステップＱ７へ進み、Ｓ＞ＡならステップＱ８へ進む。
【００６２】
ステップＱ７では、まず変数MAX（＝８０）を変数Ｐとする。いま、ここではＰはMAX／２（＝４０）であるから、MAXは８０から４０へ変更される。次にＰを(P−MIN)／２＋MINとする。いま、ＰはMAX／２（＝４０）、MINは１であるから、Ｐが（MAX／２−１）／２＋１となる。（MAX／２−１）／２＋１は、ここでは２０．５となるが、小数点以下は切り捨て、Ｐは２０となる。ステップＱ７は、直前のステップＱ４で取得したレコード数（＝８０）の２分値（MAX／２＝４０）の順位より下方（小さい方の側）の範囲にインデックステーブルの項目値（順位）があるレコードを、次回のステップＱ４で検索するように、変数Ｐを変更するステップである。
【００６３】
ステップＱ８では、まず変数MINを変数Ｐにする。いま、ここではＰはMAX／２（＝４０）であるから、MINは１から40へ変更される。次にＰを(MAX−Ｐ)／２＋Ｐとする。いま、MAXは８０、ＰはMAX／２（＝４０）であるから、Ｐが（MAX−４０）／２＋４０となる。（MAX−４０）／２＋４０は、ここでは６０となる。このステップＱ８は、直前のステップＱ４で取得したレコード数（＝８０）の２分値（＝４０）の順位より上方の範囲にインデックステーブルの項目値（順位）があるレコードを、次回のステップＱ４で検索するように、変数Ｐを変更するステップである。
【００６４】
ステップＱ９では、Ｐ＝MAX又はＰ＝MINであれば次のステップＱ１０へ進み、そうでなければステップＱ３へ戻る。したがって、ステップＱ９でＰ＝MAX又はＰ＝MIN になるまで上記Ｑ３からＱ９のステップが繰り返される。上述の例ではステップＱ７の終了時にＰ＝２０，MAX＝４０，MIN＝１である。また、ステップＱ８の終了時にＰ＝６０，MAX＝８０，MIN＝４０である。従って、ステップＱ３からステップＱ９までの第１回目のループでは、ステップＱ７又はステップＱ８のいずれの径路を通ったとしても、ステップＱ３へ戻る（但し、ステップＱ５でＳ＝Ａとなればループは終了する）。ステップＱ３からステップＱ９までのループを繰り返すことにより、必ずＰ＝MAX又はＰ＝MINとなる。いま、レコード数が８０であり、会員番号１〜８０までであり、欠番が無く、しかも56.001といった小数点が無ければ、ステップＱ３からステップＱ９のループを繰り返すことにより、ステップＱ５においてＳ＝Ａとなり、検索値は検索される。しかし、レコード数は同じく８０であっても、会員番号に欠番があったり、小数点があったりすると、ステップＱ３からステップＱ９のループを繰り返しても、ステップＱ５においてＳ＝Ａとはならないことがある。このようなときに、ステップＱ９で、Ｐ＝MAX又はＰ＝MINとなる。MAXとMINとは、整数値であり、違いが１とかの近接した値となる。
【００６５】
ステップＱ１０では、ステップＱ９でＰ＝MAX又はＰ＝MINとなったときに、対象項目のインデックス値がMINからMAXまでの項目値Ａを全て取得し、復号する。ステップＱ１からステップＱ１０までの処理が図５におけるステップ▲１▼及び▲２▼の処理に相当する。
【００６６】
ステップＱ１１では、検索条件Ｗを判定し、Ｗが“以上”であればステップＱ１２へ進み、Ｗが“以下”であればステップＱ１３へ進む。ステップＱ１２では、ステップＱ１０で復号した項目値の中からＳ以上であり、しかも最も小さい項目値のレコードＮＯを取得する。この項目値が範囲検索の下限値である。かくして、２分検索法における検索値Ｓが取得されたことになり、２分検索の処理はここで終了となる。範囲検索においては、その検索値が範囲の下限値であるので、引き続き上限値の検索に移行するため、ステップＱ１に戻る。上限値の検索ではステップＱ２において検索条件を“以下”とし、変数Ｗに“以下”を設定するので、ステップＱ１１における検索条件Ｗの判定を受け、ステップＱ１３へ進む。
【００６７】
ステップＱ１３では、ステップＱ１０で復号した項目値の中からＳ以下であり、しかも最も大きい項目値のレコードＮＯを取得する。この項目値が上限値である。かくして、範囲検索における上限値が取得できたことになるので、２分検索の処理は終了する。以上のステップＱ１１からステップＱ１３までの処理が図５におけるステップ▲３▼の処理に相当する。ステップＱ１乃至Ｑ１３の処理は前述の「リレーショナルデータベースにおける所定項目の範囲検索のための順位検索方法」における第１乃至第８のステップに相当する。
【００６８】
図１６乃至図１８は本発明の効果を示す概念図である。図１６では、本発明のリレーショナルデータベースは、ハッカー等の不正利用者によりアクセスされたとしても安全であることが示してある。暗号化テーブルでは、秘密を要する項目のデータは暗号化されているので、窃盗、通信傍受、成りすまし等によりデータを入手した不正利用者は、入手した暗号データを解読できない。データベースファイル自体の物理的盗難があったとしても、暗号データが解読されることはない。また、不正なアクセスにより暗号化テーブルのデータを改竄しようとしても、暗号アルゴリズムを知らない不正アクセス者には、意図した改竄はできない。このように、本発明のリレーショナルデータベースは、平文のデータベースに比べ、不正な第三者の攻撃に対する防御能力において極めて優れてた、安全性の高いデータベースである。
【００６９】
図１７には、本発明のリレーショナルデータベースは、稼動中でもデータの加入、修正、削除が可能であることを概念図で示してある。図７乃至図１０を参照して説明したように、本実施の形態のリレーショナルデータベースでは、暗号化テーブルにおける暗号化が項目単位で行われているので、データの追加、削除、修正などがレコード単位で行える。即ち、この実施の形態のリレーショナルデータベースにおいて、データの追加、削除、修正の必要が生じたときに、ファイル全体を変更するのではなく、レコード単位で変更が可能になり、リレーショナルデータベースを稼動させたままで、データの追加、削除、修正などの変更ができる。
【００７０】
図１８には、本発明のリレーショナルデータベースにネットワークを介してアクセスするとき、ネットワークには暗号化されたデータが伝送されることが概念図で示してある。データの暗号化及び複合化は、クライアント側の暗号データベースプログラムで行われる。そこで、平文は、クライアントのパーソナルコンピュータのメモリに一時的に存在するだけであり、そのクライアントのパーソナルコンピュータから出力されるデータは暗号化されており、ネットワークを伝送するデータがたとえ傍受されたとしても、そのデータが解読されることはない。ＳＱＬ言語により会員テーブルに問合せをし、例えば会員番号００１の会員の氏名を検索する場合、平文の会員テーブルに送るSelect文は、
Select 氏名from 会員テーブルwhere 会員番号＝“001”
となり、取得結果は、
カラム名“氏名”：値“鈴木太郎”
となる。これに対し、本実施の形態のリレーショナルデータベースに問合せをするときは、暗号化した会員テーブルに送るSelect文は、
Select 氏名from 会員テーブルwhere 会員番号＝“ngai83b”
となり、取得結果は、
カラム名“氏名”：値“94nf8jamwn”
なる。“ngai83b” は“001”の暗号化データであり、“94nf8jamwn”は“鈴木太郎”の暗号化データである。従って、ネットワークで第三者が通信を傍受したとしても、秘密にするべきユーザデータがその第三者に知られることはない。
【００７１】
以上に実施の形態を挙げ、本発明を具体的に説明した。しかし、これらの実施の形態が本発明の範囲を限定するものでないことはもちろんである。例えば、例示された各処理の手順は必ずしもその通りでなくても実施できる場合が多い。本発明を適用するネットワークの例としてインターネットを示したが、ネットワークはＬＡＮでも差し支えない。
【００７２】
実施の形態では、一意な項目であるレコードＮＯは暗号化テーブルでも平文のままとしたが、これを暗号化しても本発明は実施できる。暗号化テーブルにおいてもレコードＮＯが暗号化されておれば、例えば、図５のステップ▲２▼や図６のステップ▲６▼において、レコードＮＯをキーとして暗号化テーブルを検索する際に、そのレコードＮＯをまず暗号化し、暗号化レコードＮＯで暗号化テーブルを検索すればよい。このとき、暗号化テーブルから取得された暗号化レコードＮＯはクライアント側の暗号データベースプログラムで復号すれば、その復号したレコードＮＯをキーとしてインデックステーブルを検索できる（例えば図６のステップ▲４▼）。
【００７３】
また、実施の形態では、インデックステーブルにおける項目名は平文テーブルの項目名と同じにしたが、インデックステーブルにおける項目名は平文テーブルの項目名とは相違しても差し支えない。クライアント側の暗号データベースプログラムに変換テーブル備え、インデックステーブルを検索するときは、項目名をその変換テーブルでインデックステーブル用の項目名に変換し、またインデックステーブルからその項目名を取得したときは、その変換テーブルで平文の項目名に変換するようにすれば、前述の実施の形態は同様に実施できる。
【００７４】
【発明の効果】
以上に実施の形態を挙げ、詳しく説明したように、本発明によれば、データベースファイルの窃盗や改竄、或いは成りすましといった不正行為、又はデータベースファイル自体の物理的盗難があったとしても、そのデータベースファイルの秘密が保持され、しかも、正当利用者によるデータベースファイルの検索に要する手間と時間が、さして増大することのない、リレーショナルデータベース及びそのリレーショナルデータベースにおけるインデックステーブルの作成方法が提供できる。
【図面の簡単な説明】
【図１】本発明の一実施の形態のリレーショナルデータベースにおけるテーブルの構成例を示す図である。
【図２】図１の実施の形態におけるインデックステーブルの作成方法を模式的に示す図である。
【図３】図１の実施の形態における暗号化テーブルの一例を示す図である。
【図４】図１の実施の形態において、暗号化テーブルに格納した1つのレコード内のデータをキーワードで検索する方法を示す概念図である。
【図５】図１の実施の形態において、暗号化テーブルに格納した多数のレコード内からある範囲を指定し、その範囲内のレコードを検索する方法を示す概念図（前半部）である。
【図６】図１の実施の形態において、暗号化テーブルに格納した多数のレコード内からある範囲を指定し、その範囲内のレコードを検索する方法を示す概念図（後半部）である。
【図７】図１の実施の形態において、暗号化テーブルに新規レコードを追加する方法を示す概念図（前半部）である。
【図８】図１の実施の形態において、暗号化テーブルに新規レコードを追加する方法を示す概念図（後半部）である。
【図９】本実施の形態において、暗号化テーブルからレコードを削除する方法を示す概念図である。
【図１０】図１の実施の形態において、暗号化テーブルに格納されているレコードを修正する方法を示す概念図である。
【図１１】図１の実施の形態におけるインデックステーブルの一括更新の方法を示す概念図である。
【図１２】図１の実施の形態におけるインデックステーブルの作成方法を示す流れ図である。
【図１３】図１の実施の形態に２分検索法を適用し、データの検索をする方法を示す流れ図（前半部）である。
【図１４】図１の実施の形態に２分検索法を適用し、データの検索をする方法を示す流れ図（後半部）である。
【図１５】インターネットを介してデータベースのファイルにデータベースクライアントがアクセスしているときに、ハッカー等の不正な利用者がそのデータベースファイルにアクセスしている状態を模式的に示す図である。
【図１６】本発明のリレーショナルデータベースは、ハッカー等の不正利用者によりアクセスされたとしても安全であることを示す概念図である。
【図１７】本発明のリレーショナルデータベースは、稼動中でもデータの加入、修正、削除が可能であることを示す概念図である。
【図１８】本発明のリレーショナルデータベースにネットワークを介してアクセスするとき、ネットワークには暗号化されたデータが伝送されることを示す概念図である。
【図１】
0004050050.tif 000002
【図２】
0004050050.tif 000003
【図３】
0004050050.tif 000004
【図４】
0004050050.tif 000005
【図５】
0004050050.tif 000006
【図６】
0004050050.tif 000007
【図７】
0004050050.tif 000008
【図８】
0004050050.tif 000009
【図９】
0004050050.tif 000010
【図１０】
0004050050.tif 000011
【図１１】
0004050050.tif 000012
【図１２】
0004050050.tif 000013
【図１３】
0004050050.tif 000014
【図１４】
0004050050.tif 000015
【図１５】
0004050050.tif 000016
【図１６】
0004050050.tif 000017
【図１７】
0004050050.tif 000018
【図１８】
0004050050.tif 000019