(57)【要約】【課題】機密性の高い情報の安全性を向上させる。【解決手段】検索装置１０は、デリミタにより区切られた複数の項目からなる複数のレコードを有するファイル１内の、複数の項目に設定された符号化単位の複数の要素を、要素と符号との対応関係を示す符号化辞書２ａを用いて符号化する。また検索装置１０は、複数の要素と、複数の要素それぞれのファイル１内での位置とを対応付けるインデックス２ｃを生成する。次に検索装置１０は、複数の項目のうちの、特定の検索対象項目の、ファイル１内での範囲を示すマスク情報４を生成する。そして検索装置１０は、検索条件５に基づき、マスク情報４に示される検索対象項目の範囲内にあることがインデックス２ｃに示されている検索対象要素から、検索条件５を満たす１以上の要素列を検索する。【選択図】図１
2018060370.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
デリミタにより区切られた複数の項目からなる複数のレコードを有するファイルに対し、前記複数のレコードの前記複数の項目をそれぞれ構成する要素ごとに、前記要素それぞれと符号との対応関係を示す符号化辞書を用いて符号化し、
前記複数の要素と、前記複数の要素それぞれの前記ファイル内での位置とを対応付けるインデックスを生成し、
前記複数の項目のうち、特定の検索対象項目の、前記ファイル内での範囲を示すマスク情報を生成し、
検索条件に基づき、前記マスク情報に示される前記検索対象項目の範囲内にあることが前記インデックスに示されている検索対象要素から、前記検索条件を満たす１以上の要素列を検索する、
処理を実行させる検索プログラム。
【請求項２】
前記特定の検索対象項目は、検索対象とすることが許容されている項目である、
請求項１記載の検索プログラム。
【請求項３】
前記符号化辞書では、符号化する少なくとも一部の要素の情報が暗号化されている、
請求項１または２記載の検索プログラム。
【請求項４】
前記マスク情報の生成では、前記検索条件を入力するユーザの項目の属性ごとの検索権限の有無に基づいて、前記検索対象項目を決定する、
請求項１乃至３のいずれかに記載の検索プログラム。
【請求項５】
前記マスク情報の生成では、第１レコード内の特定の属性の項目に設定されている要素が所定の条件を満たすか否かに基づいて、前記第１レコード内の各項目について前記検索対象項目にするか否かを決定する、
請求項１乃至４のいずれかに記載の検索プログラム。
【請求項６】
前記マスク情報の生成では、第２レコード内の項目に設定されている内容に基づいて、前記第２レコード内のすべての項目を前記検索対象項目から除外するか否かを決定する、
請求項１乃至５のいずれかに記載の検索プログラム。
【請求項７】
前記マスク情報の生成では、前記第２レコードに特定の単語が含まれる場合、前記第２レコード内のすべての項目を前記検索対象項目から除外するものと決定する、
請求項６記載の検索プログラム。
【請求項８】
前記マスク情報の生成では、前記第２レコード内の特定の項目に設定されている数値が、特定の数値範囲から外れる場合、前記第２レコード内のすべての項目を前記検索対象項目から除外するものと決定する、
請求項６または７記載の検索プログラム。
【請求項９】
コンピュータが、
デリミタにより区切られた複数の項目からなる複数のレコードを有するファイルに対し、前記複数のレコードの前記複数の項目をそれぞれ構成する要素ごとに、前記要素それぞれと符号との対応関係を示す符号化辞書を用いて符号化し、
前記複数の要素と、前記複数の要素それぞれの前記ファイル内での位置とを対応付けるインデックスを生成し、
前記複数の項目のうち、特定の検索対象項目の、前記ファイル内での範囲を示すマスク情報を生成し、
検索条件に基づき、前記マスク情報に示される前記検索対象項目の範囲内にあることが前記インデックスに示されている検索対象要素から、前記検索条件を満たす１以上の要素列を検索する、
検索方法。
【請求項１０】
デリミタにより区切られた複数の項目からなる複数のレコードを有するファイルを記憶する記憶部と、
前記ファイルに対し、前記複数のレコードの前記複数の項目をそれぞれ構成する要素ごとに、前記要素それぞれと符号との対応関係を示す符号化辞書を用いて符号化し、前記複数の要素と、前記複数の要素それぞれの前記ファイル内での位置とを対応付けるインデックスを生成し、前記複数の項目のうち、特定の検索対象項目の、前記ファイル内での範囲を示すマスク情報を生成し、検索条件に基づき、前記マスク情報に示される前記検索対象項目の範囲内にあることが前記インデックスに示されている検索対象要素から、前記検索条件を満たす１以上の要素列を検索する処理部と、
を有する検索装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、検索プログラム、検索方法、および検索装置に関する。
【背景技術】
【０００２】
コンピュータで取り扱う情報は、所定のフォーマット形式で保存される。例えば帳票に用いる情報は、カンマ区切り（ＣＳＶ：Comma-Separated Values）形式のテキストファイルに格納されることがある。
【０００３】
帳票には複数のカラムが設けられ、帳票に登録されるレコードはカラムごとのフィールドを有し、各フィールドには、対応するカラムの属性に応じた数値または文字列（カラムデータ）が設定される。各カラムには、そのカラムに対応するフィールドに設定されるカラムデータの意味を表す属性が定義されている。このとき、カラムの属性によっては、対応するフィールドに、機密性の高いカラムデータが登録される場合がある。例えば、マイナンバー（国民一人ひとりが持つ番号）のような機密性の高い個人情報を登録するためのカラムがある。このように、機密性の高い情報が帳票に含まれる場合、例えば帳票のファイル全体が暗号化して保存される。
【０００４】
データの安全性向上に関する技術としては、例えば、不正アクセスなどの対策、マスク処理等の作業の手間の削減、データ利用用途に応じた柔軟なマスク処理などを実現するデータベースアクセス管理システムが考えられている。またユーザに応じて秘匿すべきカラムの公開を確実に制限するデータ管理検索システムも考えられている。さらにデータベースに対して多様なアクセス制御を可能にするデータベースシステムも考えられている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１３−００８１２１号公報
【特許文献２】特開２０１０−２８２３０４号公報
【特許文献３】特開２００２−１７５２１７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
暗号化して保存された帳票ファイル内の機密性の低い情報を利用する場合、帳票ファイル全体を復号した後、その帳票ファイルから利用する情報を抽出することとなる。この場合、機密性の低い情報を抽出できればよいにもかかわらず、機密性の高い情報までも復号され、情報の安全性が低下してしまう。
【０００７】
ここで、帳票内の機密性が高い情報が登録された項目のみを暗号化することも考えられる。ただし、大規模なシステムでは、帳票内の情報検索用に、インデックスが設けられていることが多い。機密性が高い情報が登録された項目が暗号化されていても、その情報の存在がインデックスに反映されていると、機密性が高い情報が検索要求にヒットし、該情報へのアクセス権限を有していないユーザにも、その情報の存在が認識されてしまう。すなわち、従来技術では、帳票に対するインデックス検索において、帳票内の各カラムやレコードやページに対するユーザの権限の有無に応じて、検索対象を制限することができない。その結果、機密性の高い情報の安全性が不十分なものとなっている。
【０００８】
１つの側面では、本件は、機密性の高い情報の安全性を向上させることを目的とする。
【課題を解決するための手段】
【０００９】
１つの案では、コンピュータに以下の処理を実行させる検索プログラムが生成される。
コンピュータは、デリミタにより区切られた複数の項目からなる複数のレコードを有するファイルに対し、複数のレコードの複数の項目をそれぞれ構成する要素ごとに、要素それぞれと符号との対応関係を示す符号化辞書を用いて符号化する。またコンピュータは、複数の要素と、複数の要素それぞれのファイル内での位置とを対応付けるインデックスを生成する。次にコンピュータは、複数の項目のうち、特定の検索対象項目の、ファイル内での範囲を示すマスク情報を生成する。そしてコンピュータは、検索条件に基づき、マスク情報に示される検索対象項目の範囲内にあることがインデックスに示されている検索対象要素から、検索条件を満たす１以上の要素列を検索する。
【発明の効果】
【００１０】
１態様によれば、機密性の高い情報の安全性を向上させることができる。
【図面の簡単な説明】
【００１１】
【図１】第１の実施の形態に係る検索装置の構成例を示す図である。
【図２】第２の実施の形態に用いるコンピュータのハードウェアの一構成例を示す図である。
【図３】帳票検索機能を示すブロック図である。
【図４】ＣＳＶ圧縮データ記憶部の一例を示す図である。
【図５】インデックスの生成例を示す図である。
【図６】レコードインデックスの一例を示す図である。
【図７】カラムインデックスの一例を示す図である。
【図８】検索権限の一例を示す図である。
【図９】マスクビット生成処理の手順の一例を示すフローチャートである。
【図１０】ユーザごとのマスクビット列の生成例を示す図である
【図１１】格納されたマスクビット列の一例を示す図である。
【図１２】検索処理の手順の一例を示すフローチャートである。
【図１３】ビットマップ型転置インデックスを用いた検索の一例を示す図である。
【図１４】ユーザの検索権限に応じた権限内検索結果の例を示す図である。
【図１５】検索権限の一例を示す図である。
【図１６】検索例を示す図である。
【図１７】マイナンバーに対する検索例を示す図である。
【図１８】第３の実施の形態における権限管理テーブルの一例を示す図である。
【図１９】第３の実施の形態におけるマスクビット生成処理の手順の一例を示すフローチャートである。
【図２０】カラム内容別マスクビット生成処理の手順の一例を示すフローチャートである。
【図２１】カラム内容別権限指定とレコードの内容との照合例を示す図である。
【図２２】カラム内容別のマスクビット設定例を示す図である。
【図２３】カラム内容別権限指定がある場合の検索例を示す図である。
【図２４】第４の実施の形態における権限管理テーブルの一例を示す図である。
【図２５】第４の実施の形態におけるマスクビット生成処理の手順の一例を示すフローチャートである。
【図２６】検索除外レコード適用マスクビット生成処理の手順の一例を示すフローチャートである。
【図２７】検索除外レコード指定を適用したマスクビット生成例を示す図である。
【図２８】検索除外レコード指定がある場合の検索例を示す図である。
【図２９】第５の実施の形態における権限管理テーブルの一例を示す図である。
【図３０】第５の実施の形態におけるマスクビット生成処理の手順の一例を示すフローチャートである。
【図３１】検索対象レコード指定マスクビット生成処理の手順の一例を示すフローチャートである。
【図３２】数値範囲で検索対象レコードを指定したときのマスクビット生成例を示す図である。
【図３３】数値範囲による検索対象レコード指定がある場合の検索例を示す図である。
【発明を実施するための形態】
【００１２】
以下、本実施の形態について図面を参照して説明する。なお各実施の形態は、矛盾のない範囲で複数の実施の形態を組み合わせて実施することができる。
〔第１の実施の形態〕
まず、第１の実施の形態について説明する。
【００１３】
図１は、第１の実施の形態に係る検索装置の構成例を示す図である。第１の実施の形態に係る検索装置１０は、記憶部１０−１と処理部１０−２とを有する。記憶部１０−１は、例えば検索装置１０が有するメモリまたはストレージ装置である。処理部１０−２は、例えば検索装置１０が有するプロセッサである。
【００１４】
記憶部１０−１は、デリミタにより区切られた複数の項目からなる複数のレコードを有するファイル１を記憶する。デリミタとは、複数の要素を列挙する際に、要素の区切りとなる記号や特殊文字である。ファイル１は、例えばＣＳＶ形式のテキストデータである。ファイル１がＣＳＶ形式のテキストデータの場合、項目を区切るカンマがデリミタである。
【００１５】
処理部１０−２は、符号化手段１１、マスク情報生成手段１２、および検索手段１３を有する。
符号化手段１１は、ファイル１を符号化し、圧縮データ２を生成する。例えば符号化手段１１は、ファイル１に対し、複数のレコードの複数の項目それぞれを構成する要素ごとに、要素それぞれと符号との対応関係を示す符号化辞書２ａを用いて符号化する。これにより、符号を並べたコード列２ｂが生成される。符号化単位の要素は、例えば単語や数値である。図１の例では、一文字ごとに符号化単位の要素となっている。
【００１６】
また符号化手段１１は、複数の要素と、複数の要素それぞれのファイル１内での位置を対応付けるインデックス２ｃを生成する。インデックス２ｃは、例えばファイル１に出現する文字ごとの、その文字が出現する位置を示すビット列である。ビット列の各ビットは、ファイル１内の各要素に対して、ファイルの先頭の要素から順番に対応付けられている。そしてビット列内のビットは、対応する要素の文字が、ビット列に対応する文字であれば、「１」が設定される。例えば「東」に対するビット列では、ファイル１内の「東」の要素に対応するビットに「１」が設定されている。
【００１７】
符号化手段１１は、符号化に用いた符号化辞書２ａ、生成したコード列２ｂ、および生成したインデックス２ｃを纏めて、ファイル１の圧縮データ２とする。符号化手段１１は、生成した圧縮データ２を、検索装置１０内のメモリまたはストレージ装置に格納する。
【００１８】
マスク情報生成手段１２は、複数の項目のうちの、特定の検索対象項目の、ファイル１内での範囲を示すマスク情報４を生成する。特定の検索対象項目とは、例えば検索対象とすることが許容されている項目である。マスク情報４は、例えばファイル１内の各要素に対応するビットのビット列（マスクビット列）である。マスク情報４は、例えば、検索対象項目に設定された要素に対応するビットには「１」が設定され、検索対象項目以外の項目に設定された要素に対応するビットには「０」が設定される。この場合、「１」の値が設定されたビットの範囲が、検索対象項目のファイル１内での範囲を表している。
【００１９】
なお、マスク情報生成手段１２は、検索条件を入力するユーザの項目の属性ごとの検索権限の有無に基づいて、検索対象項目を決定してもよい。検索装置１０には、例えば、予めユーザごとの検索権限３を設定しておくことができる。マスク情報生成手段１２は、各ユーザの検索権限３に基づいて、ユーザごとのマスク情報４を生成する。図１の例では、ユーザ「Ａ」は、すべての属性の項目に対する検索権限を有している。そのため、ユーザ「Ａ」に対応するマスク情報４を示すマスクビット列では、すべてのビットの値が「１」となる。またユーザ「Ｂ」は、氏名を設定する項目である「項目１」に対する検索権限を有しているが、住所を設定する項目である「項目２」に対する検索権限を有していない。そのためユーザ「Ｂ」に対応するマスク情報４を示すマスクビット列では、「項目１」の範囲に対応するビットに「１」が設定され、「項目２」の範囲に対応するビットに「０」が設定されている。
【００２０】
検索手段１３は、検索条件５に基づき、マスク情報４に示される検索対象項目の範囲内にあることがインデックス２ｃに示されている検索対象要素から、検索条件５を満たす１以上の要素列を検索する。例えば検索手段１３は、まず、インデックス２ｃに基づいて、検索権限を考慮せずに、検索条件５を満たす要素列を検索する。この検索の結果を、中間検索結果とする。次に検索手段１３は、中間検索結果とマスクビット列とのビットごとのＡＮＤ（論理積）演算を行う。この演算結果が、検索権限を考慮した検索結果（権限内検索結果）となる。権限内検索結果では、検索でヒットした要素列の最後尾の要素の位置に対応するビットに「１」が設定されている。
【００２１】
なお、ユーザごとにマスクビット列が生成されている場合、検索手段１３は、検索条件５を入力したユーザのマスクビット列を用いて検索を行う。図１の例では、ユーザ「Ｂ」が検索条件５を入力している。検索条件５は、「東京」の文字列の完全一致検索であるものとする。この場合、検索手段１３は、インデックス２ｃ内の、「東」に対応するビット列と「京」に対応するビット列とを参照する。そして検索手段１３は、「東」に対応するビット列内の「１」のビットの次のビット（図１では左隣りのビット）に対応する、「京」に対応するビット列内のビットの値を確認する。検索手段１３は、該当ビットの値が「１」であれば、そのビットの位置に「東京」を表す要素列が存在するものと判断する。そして、検索手段１３は、「東京」を表す要素列の「京」に対応する位置に「１」を設定した中間検索結果を生成する。この中間検索結果と、ユーザ「Ｂ」のマスクビット列とのＡＮＤ演算により、権限内検索結果が得られる図１の例では、住所の「項目２」に含まれる「東京」の文字列はヒットしないが、氏名の「項目１」に含まれる「東京」の文字列はヒットする。
【００２２】
検索手段１３は、権限内検索結果でヒットした位置の項目あるいはその項目が属するレコード全体に対応する符号をコード列２ｂから取得し、符号化辞書２ａを用いて復号する。そして検索手段１３は、復号して得られた要素列を、検索結果６として出力する。図１の例では、検索でヒットした項目に設定された要素が復号され、「東京太郎」の文字列を示す検索結果６が出力されている。
【００２３】
このような検索装置１０によれば、検索権限によって、帳票内の検索対象とする項目を容易に制限することができる。例えば機密性が高い情報が設定された項目については、検索権限を与えないことで、機密性が高い情報に合致する検索条件が入力されても、その情報をヒットさせずに済む。その結果、機密性が高い情報の安全性が向上する。
【００２４】
また検索装置１０では、ユーザごとに異なる検索権限を適用することができる。これにより、例えば、高い権限を有するユーザには、機密性の高い情報についても検索対象とすることで、帳票を利用した業務の遂行の利便性を高めることができる。他方、低い権限しか持たないユーザには、機密性の高い情報については検索させないことで、機密性が高い情報の安全性を維持することができる。これにより、帳票のデータの有効利用と機密の保持との両立を図ることができる。
【００２５】
なお、符号化辞書２ａでは、符号化する少なくとも一部の要素の情報について、暗号化しておくことができる。例えばマイナンバーのような、機密性が極めて高い情報については、符号化辞書２ａ内で暗号化される。これにより、機密性が高い情報の安全性をより高めることができる。
【００２６】
また、マスク情報４として、各要素に対応するビットを含むマスクビット列を用いることで、検索対象とするか否かについての、細かな設定が可能である。例えば、マスク情報生成手段１２は、レコード内の特定の属性の項目に設定されている要素が所定の条件を満たすか否かに基づいて、レコード内の各項目について検索対象項目にするか否かを決定することができる。またマスク情報生成手段１２は、レコード内の項目に設定されている内容に基づいて、レコード内のすべての項目を検索対象項目から除外するか否かを決定することもできる。またマスク情報生成手段１２は、レコードに特定の単語が含まれる場合、レコード内のすべての項目を検索対象項目から除外するものと決定してもよい。さらにマスク情報生成手段１２は、レコード内の特定の項目に設定されている数値が、特定の数値範囲から外れる場合、レコード内のすべての項目を検索対象項目から除外するものと決定することもできる。
【００２７】
このように、レコードの内容に応じて、各レコード内の項目を検索対象項目とするか否かを決定することで、例えば機密性の高い人物の個人情報を示すレコードに対する検索を抑止することができる。また、検索を行うユーザと、検索対象のレコードに示される個人との関係（例えば所属部署が同じか否か）に応じて、検索対象の項目を変えることもできる。
【００２８】
しかも、検索対象の範囲はマスク情報４に予め設定しておくことができ、検索対象の範囲を細かく調整しても、検索時の処理負荷の増加はない。その結果、柔軟性の高い検索を、検索処理の負荷を増加させずに実現できる。
【００２９】
なお、図１に示した符号化手段１１、マスク情報生成手段１２、および検索手段１３は、例えば検索装置１０が有するプロセッサにより実現することができる。例えば符号化手段１１、マスク情報生成手段１２、および検索手段１３の処理が記述された検索プログラムをプロセッサに実行させることで、図１に示した検索方法で検索を行う検索装置１０が実現される。また、図１に示した各要素間を接続する線は通信経路の一部を示すものであり、図示した通信経路以外の通信経路も設定可能である。
【００３０】
〔第２の実施の形態〕
次に第２の実施の形態について説明する。第２の実施の形態は、ＣＳＶ形式の帳票を圧縮して格納しておき、その帳票に含まれるデータのインデックスを用いて、帳票の検索を行うものである。
【００３１】
図２は、第２の実施の形態に用いるコンピュータのハードウェアの一構成例を示す図である。コンピュータ１００は、プロセッサ１０１によって装置全体が制御されている。プロセッサ１０１には、バス１０９を介してメモリ１０２と複数の周辺機器が接続されている。プロセッサ１０１は、マルチプロセッサであってもよい。プロセッサ１０１は、例えばＣＰＵ（Central Processing Unit）、ＭＰＵ（Micro Processing Unit）、またはＤＳＰ（Digital Signal Processor）である。プロセッサ１０１がプログラムを実行することで実現する機能の少なくとも一部を、ＡＳＩＣ（Application Specific Integrated Circuit）、ＰＬＤ（Programmable Logic Device）などの電子回路で実現してもよい。
【００３２】
メモリ１０２は、コンピュータ１００の主記憶装置として使用される。メモリ１０２には、プロセッサ１０１に実行させるＯＳ（Operating System）のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、メモリ１０２には、プロセッサ１０１による処理に必要な各種データが格納される。メモリ１０２としては、例えばＲＡＭ（Random Access Memory）などの揮発性の半導体記憶装置が使用される。
【００３３】
バス１０９に接続されている周辺機器としては、ストレージ装置１０３、グラフィック処理装置１０４、入力インタフェース１０５、光学ドライブ装置１０６、機器接続インタフェース１０７およびネットワークインタフェース１０８がある。
【００３４】
ストレージ装置１０３は、内蔵した記録媒体に対して、電気的または磁気的にデータの書き込みおよび読み出しを行う。ストレージ装置１０３は、コンピュータの補助記憶装置として使用される。ストレージ装置１０３には、ＯＳのプログラム、アプリケーションプログラム、および各種データが格納される。なお、ストレージ装置１０３としては、例えばＨＤＤ（Hard Disk Drive）やＳＳＤ（Solid State Drive）を使用することができる。
【００３５】
グラフィック処理装置１０４には、モニタ２１が接続されている。グラフィック処理装置１０４は、プロセッサ１０１からの命令に従って、画像をモニタ２１の画面に表示させる。モニタ２１としては、ＣＲＴ（Cathode Ray Tube）を用いた表示装置や液晶表示装置などがある。
【００３６】
入力インタフェース１０５には、キーボード２２とマウス２３とが接続されている。入力インタフェース１０５は、キーボード２２やマウス２３から送られてくる信号をプロセッサ１０１に送信する。なお、マウス２３は、ポインティングデバイスの一例であり、他のポインティングデバイスを使用することもできる。他のポインティングデバイスとしては、タッチパネル、タブレット、タッチパッド、トラックボールなどがある。
【００３７】
光学ドライブ装置１０６は、レーザ光などを利用して、光ディスク２４に記録されたデータの読み取りを行う。光ディスク２４は、光の反射によって読み取り可能なようにデータが記録された可搬型の記録媒体である。光ディスク２４には、ＤＶＤ（Digital Versatile Disc）、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ（Compact Disc Read Only Memory）、ＣＤ−Ｒ（Recordable）／ＲＷ（ReWritable）などがある。
【００３８】
機器接続インタフェース１０７は、コンピュータ１００に周辺機器を接続するための通信インタフェースである。例えば機器接続インタフェース１０７には、メモリ装置２５やメモリリーダライタ２６を接続することができる。メモリ装置２５は、機器接続インタフェース１０７との通信機能を搭載した記録媒体である。メモリリーダライタ２６は、メモリカード２７へのデータの書き込み、またはメモリカード２７からのデータの読み出しを行う装置である。メモリカード２７は、カード型の記録媒体である。
【００３９】
ネットワークインタフェース１０８は、ネットワーク２０に接続されている。ネットワークインタフェース１０８は、ネットワーク２０を介して、他のコンピュータまたは通信機器との間でデータの送受信を行う。
【００４０】
以上のようなハードウェア構成によって、第２の実施の形態の処理機能を実現することができる。なお、第１の実施の形態に示した装置も、図２に示したコンピュータ１００と同様のハードウェアにより実現することができる。
【００４１】
コンピュータ１００は、例えばコンピュータ読み取り可能な記録媒体に記録されたプログラムを実行することにより、第２の実施の形態の処理機能を実現する。コンピュータ１００に実行させる処理内容を記述したプログラムは、様々な記録媒体に記録しておくことができる。例えば、コンピュータ１００に実行させるプログラムをストレージ装置１０３に格納しておくことができる。プロセッサ１０１は、ストレージ装置１０３内のプログラムの少なくとも一部をメモリ１０２にロードし、プログラムを実行する。またコンピュータ１００に実行させるプログラムを、光ディスク２４、メモリ装置２５、メモリカード２７などの可搬型記録媒体に記録しておくこともできる。可搬型記録媒体に格納されたプログラムは、例えばプロセッサ１０１からの制御により、ストレージ装置１０３にインストールされた後、実行可能となる。またプロセッサ１０１が、可搬型記録媒体から直接プログラムを読み出して実行することもできる。
【００４２】
次に、コンピュータ１００を用いて帳票検索を行うためのコンピュータ１００内の機能について説明する。
図３は、帳票検索機能を示すブロック図である。コンピュータ１００は、圧縮部１１０、ＣＳＶ圧縮データ記憶部１２０、レコードインデックス記憶部１３０、カラムインデックス記憶部１４０、検索権限記憶部１５０、マスクビット生成部１６０、マスクビット記憶部１７０、および検索部１８０を有する。
【００４３】
圧縮部１１０は、ＣＳＶ形式の帳票のデータ圧縮を行う。圧縮部１１０は、圧縮したデータをＣＳＶ圧縮データ記憶部１２０に格納する。また圧縮部１１０は、帳票を圧縮する際に、レコードインデックスとカラムインデックスを作成する。レコードインデックスは、各レコードの帳票内での位置を示す情報である。カラムインデックスは、各カラムに対応するフィールドの帳票内での位置を示す情報である。圧縮部１１０は、作成したカラムインデックスを、例えば所定のアルゴリズムでハッシュ化し、カラムインデックス記憶部１４０に格納する。
【００４４】
ＣＳＶ圧縮データ記憶部１２０は、ＣＳＶ形式の帳票データを圧縮した圧縮データ（ＣＳＶ圧縮データ）を記憶する。ＣＳＶ圧縮データには、データ圧縮で生成されたコード列、文字を圧縮した後のコードとその文字との対応関係を示す符号化辞書、圧縮された文字が帳票内で出現する位置を示すインデックスが含まれる。
【００４５】
レコードインデックス記憶部１３０は、レコードインデックスを記憶する。レコードインデックスは、ハッシュ化されることでデータ量が圧縮されている。
カラムインデックス記憶部１４０は、カラムインデックスを記憶する。カラムインデックスは、ハッシュ化されることでデータ量が圧縮されている。
【００４６】
検索権限記憶部１５０は、ユーザの検索権限を記憶する。例えば検索権限は、カラムごとに設定される。
マスクビット生成部１６０は、各ユーザの検索権限に応じて、ユーザごとのマスクビット列を生成する。マスクビット列は、各ユーザが、各カラムに対応するフィールド内のカラムデータを検索対象とすることができるのかを示す複数のビットである。マスクビット生成部１６０は、生成したマスクビット列をマスクビット記憶部１７０に格納する。
【００４７】
マスクビット記憶部１７０は、マスクビット生成部１６０で生成されたマスクビット列を記憶する。
検索部１８０は、検索クエリが入力されると、検索クエリを入力したユーザの検索権限に応じて、ＣＳＶ圧縮データを用いた帳票の検索を行う。例えば検索部１８０は、検索クエリを用いて、制限なしにＣＳＶ圧縮データを検索する。次に検索部１８０は、マスクビット記憶部１７０から検索クエリを入力したユーザのマスクビット列を読み出す。そして検索部１８０は、マスクビット列を用いて、制限なしでの検索結果から、検索権限のないカラムのフィールド内のカラムデータに関する情報を除外することで、検索権限に応じた検索結果を生成する。検索部１８０は、検索権限に応じた検索結果に基づいて、ＣＳＶ圧縮データから検索クエリに示される条件に合致する帳票を特定し、その帳票を復号して出力する。
【００４８】
なお、図３に示した各要素間を接続する線は通信経路の一部を示すものであり、図示した通信経路以外の通信経路も設定可能である。また、図３に示した各要素の機能は、例えば、その要素に対応するプログラムモジュールをコンピュータに実行させることで実現することができる。
【００４９】
図４は、ＣＳＶ圧縮データ記憶部の一例を示す図である。ＣＳＶ圧縮データ記憶部１２０には、例えば符号化辞書１２１、コード列１２２、およびインデックス１２３が記憶される。
【００５０】
符号化辞書１２１には、単語のコードとの対応関係が示される。例えば、英語、日本語、それぞれの単語の出現頻度に基づき、高頻度な単語に対して１または２バイトのコードが予め割り当てられる。また符号化辞書１２１には、低頻度の単語や数値には、２バイトまたは３バイトのコードが、その単語が出現するごとに動的に割り当てられる。
【００５１】
例えば符号化辞書１２１は、出現頻度が高い単語についての静的辞書１２１ａと、出現頻度が低い単語についての動的辞書１２１ｂとを含む。静的辞書１２１ａは、静的に設定されたコード（静的コード）に対応付けて、そのコードに変換する文字列、およびその文字列の文字列長が設定されている。動的辞書１２１ｂには、数値または文字列が出現したときに設定されたコード（動的コード）に対応付けて、そのコードに変換する数値または文字列へのポインタが設定されている。動的コードに変換される数値または文字列は、バッファ１２１ｃに格納される。
【００５２】
なお、バッファ１２１ｃに格納される数値が、マイナンバーのような機密性の高い情報の場合、バッファ１２１ｃを暗号化することで、機密性の高い情報の安全性を高めることができる。
【００５３】
コード列は、圧縮対象のＣＳＶデータに含まれる単語を符号化辞書１２１に従ってコード化して得られるコードを一列に並べたものである。
インデックスは、帳票に含まれる単語などキーワードを示す情報である。例えばインデックスは、ビットマップ型転置インデックスである。
【００５４】
図５は、インデックスの生成例を示す図である。ＣＳＶデータ３０には、カラムに対応する複数のフィールドが設けられている。各フィールドはカンマで区切られている。各フィールドには、対応するカラムの属性に応じたカラムデータが登録されている。図５の例では、「カラム１」のフィールドには、日時を表すカラムデータ「2015/7/15」が登録されている。「カラム２」のフィールドには、数値を表すカラムデータ「15370185」が登録されている。「カラム３」のフィールドには、物品名を示すカラムデータ「冷蔵庫（赤）」が登録されている。なお、ＣＳＶデータ３０には、複数のレコードが登録されており、各レコードに「カラム１」、「カラム２」、「カラム３」、・・・のカラムデータが含まれる。
【００５５】
ＣＳＶデータ３０に設定された文字および数値は、オフセットによって、ＣＳＶデータ３０内での位置が表される。このとき、かな漢字文字は１文字ごとにオフセットが与えられ、英数字はフィールド単位でオフセットが与えられる。オフセットは、オフセットを付与した文字または英数字の、ＣＳＶデータ３０内での先頭からの順番を表している。図５の例では、「2015/7/15」のオフセットは「０」である。「15370185」のオフセットは「１」である。「冷蔵庫（赤）」には文字ごとにオフセットが与えられ、オフセットはそれぞれ「２」〜「７」である。
【００５６】
英数字および文字がＣＳＶデータ３０内のどこに出現するのかは、ビットマップ３１で表される。例えばビットマップ３１には、ＣＳＶデータ３０内に出現する単語ごとのビット列が含まれる。図５に示すビット列は、右端を先頭とし、先頭のビットから順に、各ビットにオフセットが対応付けられている。各単語のビット列では、その単語が出現する位置を示すオフセットに対応するビットの値が「１」であり、その他のビットの値が「０」である。例えば文字「冷」のオフセットは「２」であるため、ビットマップ３１内の「冷」に対応するビット列におけるオフセット「２」に対応するビットに「１」が設定されている。文字「冷」が、他の位置にも出現するのであれば、その位置のオフセットに応じたビットが「１」となる。
【００５７】
このようなビットマップ３１が、例えば帳票のページごとに設けられる。そしてページごとのビットマップ３１の集合が、インデックス３２となる。インデックス３２は、例えばＸ軸をオフセット、Ｙ軸を単語ＩＤ、Ｚ軸をページＩＤとした３次元空間で表現できる。
【００５８】
なお、ＣＳＶデータ３０内の各レコードの位置や各カラムに対応するフィールドの位置も、オフセットで表すことができる。そこで、圧縮部１１０は、レコードの位置をオフセットで表したレコードインデックスを生成し、レコードインデックス記憶部１３０に格納する。また圧縮部１１０は、カラムごとのフィールドの位置をオフセットで表したカラムインデックスを生成し、カラムインデックス記憶部１４０に格納する。
【００５９】
図６は、レコードインデックスの一例を示す図である。レコードインデックス記憶部１３０に記憶されたレコードインデックス１３１には、例えばレコードごとのビット列が含まれる。図６に示すビット列は、右端を先頭とし、先頭のビットから順に、各ビットにオフセットが対応付けられている。各レコードのビット列では、そのレコードの先頭の位置を示すオフセットに対応するビットの値が「１」であり、その他のビットの値が「０」である。例えば「レコード１」では、オフセット「０」のビットの値が「１」である。これはＣＳＶデータ３０のオフセット「０」の位置に「レコード１」が存在することを示している。
【００６０】
図７は、カラムインデックスの一例を示す図である。カラムインデックス記憶部１４０に記憶されたカラムインデックス１４１には、例えばカラムごとのビット列が含まれる。図７に示すビット列は、右端を先頭とし、先頭のビットから順に、各ビットにオフセットが対応付けられている。各カラムのビット列では、そのカラムに対応するフィールドが出現する位置を示すオフセットに対応するビットの値が「１」であり、その他のビットの値が「０」である。例えば「カラム１」では、オフセット「０」のビットと、オフセット「２０」のビットとの値が「１」である。これはＣＳＶデータ３０のオフセット「０」の位置とオフセット「２０」の位置に、「カラム１」に対応するフィールドが存在することを示している。なお、複数の単語を含むフィールドの位置は、例えばそのフィールド内の先頭の単語のオフセットで表される。
【００６１】
なお、カラムインデックス１４１は、圧縮して記憶しておくことができる。例えばカラムインデックス１４１に含まれる各ビット列を、所定のアルゴリズムでハッシュ化して、データ量を短くすることができる。
【００６２】
次に、検索権限記憶部１５０に記憶される検索権限について説明する。
図８は、検索権限の一例を示す図である。検索権限記憶部１５０は、例えば権限管理テーブル１５１を記憶する。権限管理テーブル１５１には、権限ＩＤに関連付けて、各カラムに対応するフィールド内のカラムデータを検索対象とする権限の有無を示すフラグが設定される。権限ＩＤは、検索権限の管理対象となるユーザのユーザＩＤである。図８の例では、権限ＩＤで示されるユーザが検索権限を有するカラムの列には丸印が設定され、検索権限を有していないカラムの列にはばつ印が設定されている。例えばユーザＩＤが「ＵＩＤ０１」のユーザは「カラム３」に対応するフィールドに設定されたカラムデータを検索対象とすることができる。それに対して、ユーザＩＤが「ＵＩＤ０２」のユーザは「カラム３」に対応するフィールドに設定されたカラムデータを検索対象とすることができない。
【００６３】
このような権限管理テーブル１５１を参照し、マスクビット生成部１６０により、マスクビットが生成される。
図９は、マスクビット生成処理の手順の一例を示すフローチャートである。以下、図９に示す処理をステップに沿って説明する。
【００６４】
［ステップＳ１０１］マスクビット生成部１６０は、権限管理テーブル１５１の権限ＩＤの欄に設定されている、未処理のユーザを選択する。マスクビット生成部１６０は、選択したユーザのマスクビット列を生成する。生成されるマスクビット列には、ＣＳＶデータ３０内の各単語のオフセットに応じたビット（マスクビット）が含まれる。生成されたマスクビット列内の各マスクビットの値の初期値は、例えば「０」である。
【００６５】
［ステップＳ１０２］マスクビット生成部１６０は、カラムを１つ選択する。
［ステップＳ１０３］マスクビット生成部１６０は、カラムインデックス１４１を参照し、選択したカラムに対応する、マスクビット列内のマスクビットを特定する。
【００６６】
［ステップＳ１０４］マスクビット生成部１６０は、権限管理テーブル１５１を参照し、選択したユーザが選択したカラムに対応するフィールド内のカラムデータを検索対象とする権限を有するか否かを判断する。権限を有する場合、処理がステップＳ１０５に進められる。権限を有していない場合、処理がステップＳ１０６に進められる。
【００６７】
［ステップＳ１０５］マスクビット生成部１６０は、マスクビット列内のステップＳ１０３で特定したビットに「１」を設定する。その後、処理がステップＳ１０７に進められる。
【００６８】
［ステップＳ１０６］マスクビット生成部１６０は、マスクビット列内のステップＳ１０３で特定したビットに「０」を設定する。なおマスクビット列内の各ビットの初期値が「０」であれば、マスクビット生成部１６０は、特定したビットの値を変更せずに、処理をステップＳ１０７に進める。
【００６９】
［ステップＳ１０７］マスクビット生成部１６０は、未選択のカラムがあるか否かを判断する。未選択のカラムがあれば、処理がステップＳ１０２に進められる。未選択のカラムがなければ、処理がステップＳ１０８に進められる。
【００７０】
［ステップＳ１０８］マスクビット生成部１６０は、選択したユーザのマスクビット列を、マスクビット記憶部１７０に格納する。
［ステップＳ１０９］マスクビット生成部１６０は、未選択のユーザがいるか否かを判断する。未選択のユーザがいれば、処理がステップＳ１０１に進められる。未選択のユーザがいなければ、マスクビット生成処理が終了する。
【００７１】
以上のようにして、ユーザごとのマスクビット列が生成され、マスクビット生成部１６０に格納される。
図１０は、ユーザごとのマスクビット列の生成例を示す図である図１０の例では、「カラム２」までのマスクビットの設定が完了し、「カラム３」のマスクビットを設定する場合を示している。まずマスクビット生成部１６０は、カラムインデックス１４１から「カラム３」と「カラム４」との、対応するフィールドの位置を示すビット列を取得する。そしてマスクビット生成部１６０は、「カラム４」のビット列と「カラム３」のビット列とを２進数の数値として、「カラム４」の値から「カラム３」の値を減算する。減算の結果は、「カラム３」のフィールドに設定された単語または数値の位置を「１」のビットで表したビット列となる。
【００７２】
ユーザが「カラム３」に対応するフィールド内のカラムデータに対する検索権限を有している場合、マスクビット生成部１６０は、「カラム３」に対応するビットを示すビット列とユーザのマスクビット列との、ビットごとのＯＲ演算を行う。これにより、マスクビット列に、「カラム３」に対する検索権限の有無が設定される。
【００７３】
その後、「カラム４」が選択され、「カラム３」のマスクビットの設定が行われる。なお、ユーザが「カラム３」に対応するフィールド内のカラムデータに対する検索権限を有していない場合は、マスクビット列に対する操作を行わずに、「カラム４」についての処理に進められる。
【００７４】
このような処理がすべてのカラムに関して行われることで、選択したユーザのマスクビット列が生成される。生成されたマスクビット列は、マスクビット記憶部１７０に格納される。
【００７５】
図１１は、格納されたマスクビット列の一例を示す図である。マスクビット記憶部１７０には、ユーザごとのマスクビットを含むマスクビットマップ１７１が記憶される。マスクビットマップ１７１によって、どのユーザがどのカラムに関する検索権限を有しているのかが表されている。
【００７６】
その後、ユーザから検索クエリが入力されると、そのユーザのマスクビットを用いて、検索権限に応じた検索が実行される。
図１２は、検索処理の手順の一例を示すフローチャートである。以下、図１２に示す処理をステップ番号に沿って説明する。
【００７７】
［ステップＳ１２１］検索部１８０は、検索クエリを取得する。例えば検索部１８０は、ユーザがキーボードを用いて入力した検索要求を、検索クエリとして取得する。
［ステップＳ１２２］検索部１８０は、ＣＳＶ圧縮データ記憶部１２０に記憶されているインデックス１２３を用いて、検索クエリに示される条件に合致する情報が、圧縮元の帳票に含まれているか否かを検索する。以下、この検索の結果を、制限なし検索結果と呼ぶ。
【００７８】
［ステップＳ１２３］検索部１８０は、検索クエリを入力したユーザに対応するマスクビット列を、マスクビット記憶部１７０から読み出す。
［ステップＳ１２４］検索部１８０は、マスクビット列を用いて、ユーザが検索権限を有していないカラムを、中間検索結果から除外する。以下、この処理の結果を、権限内検索結果と呼ぶ。
【００７９】
［ステップＳ１２５］検索部１８０は、権限内検索結果において、検索クエリに示される数値または文字列を含むことが示されているレコードの情報を、帳票に対する検索結果として出力する。例えば検索部１８０は、レコードインデックス記憶部１３０内のレコードインデックス１３１を参照し、権限内検索結果において、検索クエリに合致することが示されている数値または文字列を含むレコードを判断する。次に、検索部１８０は、ＣＳＶ圧縮データ記憶部１２０内のコード列から、該当レコードのコードを抽出し、辞書を用いて復号する。そして検索部１８０は、復号したレコード内の情報を、所定の形式の検索結果画面に表示する。
【００８０】
このようにしてユーザの検索権限に応じた検索が行われる。なお、検索対象の帳票に含まれる数値や文字列を示すインデックス１２３が、ビットマップ型転置インデックスである。ビットマップ型転置インデックスを用いることで、帳票を対象とする全文検索が容易となる。
【００８１】
図１３は、ビットマップ型転置インデックスを用いた検索の一例を示す図である。図１３には、「冷蔵庫」をキーワードとした完全一致検索の例が示されている。
検索部１８０は、まず「冷」に対応するビットマップを、インデックス１２３から取得する。ビットマップがハッシュ値にハッシュ化されている場合、検索部１８０は、ハッシュ値から元のビットマップを復元する。
【００８２】
次に検索部１８０は、「冷」のビットマップの値を左にシフトする。この際、検索部１８０は、ビットマップの先頭のビット（オフセット「０」に対応するビット）には「０」を設定する。
【００８３】
次に検索部１８０は、「蔵」に対応するビットマップを、インデックス１２３から取得する。ビットマップがハッシュ値にハッシュ化されている場合、検索部１８０は、ハッシュ値から元のビットマップを復元する。
【００８４】
次に検索部１８０は、「冷」のビットマップと「蔵」のビットマップとの、対応するビットごとのＡＮＤ（論理積）演算を行う。これにより「冷蔵」の文字列の位置を示すビットマップが生成される。
【００８５】
次に検索部１８０は、「冷蔵」のビットマップの値を左にシフトする。この際、検索部１８０は、ビットマップの先頭のビット（オフセット「０」に対応するビット）には「０」を設定する。
【００８６】
次に検索部１８０は、「庫」に対応するビットマップを、インデックス１２３から取得する。ビットマップがハッシュ値にハッシュ化されている場合、検索部１８０は、ハッシュ値から元のビットマップを復元する。
【００８７】
最後に検索部１８０は、「冷蔵」のビットマップと「蔵」のビットマップとの、対応するビットごとのＡＮＤ演算を行う。これにより「冷蔵庫」の文字列の位置を示すビットマップが生成される。このビットマップが、中間検索結果である。
【００８８】
生成された中間検索結果に対して、ユーザの検索権限に応じた修正が施され、権限内検索結果が生成される。
図１４は、ユーザの検索権限に応じた権限内検索結果の例を示す図である。図１４では、上段に検索クエリを入力したユーザが「ＵＩＤ０１」の場合の検索結果を示し、下段に検索クエリを入力したユーザが「ＵＩＤ０２」の場合の検索結果を示している。各ユーザの検索権限は、図８に示した権限管理テーブル１５１に設定されている通りであるものとする。この場合、各ユーザのマスクビットのビット列は、図１１に示す通りである。
【００８９】
「ＵＩＤ０１」のユーザが検索を行った場合、「ＵＩＤ０１」に対応するマスクビット列が取得される。そして「冷蔵庫」の中間検索結果と、取得したマスクビット列との、ビットごとのＡＮＤ演算が行われ、権限内検索結果が生成される。「ＵＩＤ０１」のユーザはすべてのカラムに対して検索権限を有しているため、「冷蔵庫」の中間検索結果が、そのまま権限内検索結果となる。
【００９０】
「ＵＩＤ０２」のユーザが検索を行った場合、「ＵＩＤ０２」に対応するマスクビット列が取得される。そして「冷蔵庫」の中間検索結果と、取得したマスクビット列との、ビットごとのＡＮＤ演算が行われ、権限内検索結果が生成される。「ＵＩＤ０２」のユーザは「カラム３」に対する検索権限を有していない。「冷蔵庫」の中間検索結果において、「１」のビットが立っているのは、「カラム３」のフィールドに対応する位置であり、その位置のマスクビット列におけるマスクビットの値は「０」である。そのため、権限内検索結果では、すべてのビットの値が「０」となる。
【００９１】
このように、第２の実施の形態によれば、ユーザのカラムごとの検索権限に応じた検索結果を生成することができる。その結果、高い権限を有するユーザの利便性を損なわずに、機密性の高い情報の安全性を確保することができる。企業で取り扱う個人情報のうち、機密性の高い情報として、従業員の住所やマイナンバーなどがある。以下、機密性の高い情報に対する検索の制限について、具体的に説明する。
【００９２】
図１５は、検索権限の一例を示す図である。図１５に示す権限管理テーブル１５１ａでは、管理する立場にあるユーザ（管理者）のユーザＩＤは「ＵＩＤ０１」であり、単なる従業員であるユーザ（Ａ社員）のユーザＩＤは「ＵＩＤ０２」である。図１５の例では、管理者のユーザは、すべてのカラムに対する検索権限を有している。それに対してＡ社員は、住所が設定されている「カラム３」と、マイナンバーが設定されている「カラム５」に対する検索権限を有していない。
【００９３】
図１６は、検索例を示す図である。帳票を表すＣＳＶデータ３０ａには、支店名、氏名、住所、性別などの属性のカラムが定義されている。そして従業員ごとのレコードには、定義されたカラムに対応するフィールドが含まれており、各フィールドに、対応するカラムに応じた従業員の個人情報が設定されている。
【００９４】
このようなＣＳＶデータ３０ａを圧縮する際に、各カラムの位置を示すカラムインデックス１４１が生成される。図１６には、生成されたカラムインデックス１４１のうち、「カラム３」と「カラム４」との位置を示すビット列が示されている。
【００９５】
そして、カラムインデックス１４１を用いて、ユーザごとのマスクビット列が生成される。管理者である「ＵＩＤ０１」のマスクビット列は、含まれるすべてのビットの値が「１」である。それに対してＡ社員のマスクビット列は、住所を示す「カラム３」の位置に対応するビットの値が「０」となっている。
【００９６】
このときＡ社員がキーワード「鎌倉」で検索を行ったものとする。ＣＳＶデータ３０ａの先頭のレコードでは、支店名、氏名、住所それぞれに「鎌倉」の文字列が含まれる。そのため、中間検索結果では、該当する文字列の「倉」位置に対応するビットに「１」が設定される。それ以外のビットの値は「０」である。
【００９７】
このような中間検索結果に対して、Ａ社員のマスクビット列とのＡＮＤ演算が行われ、権限内検索結果が生成される。権限内検索結果では、住所の「鎌倉」に対応するビットの値が「０」に変更されている。すなわち、支店名や氏名の「鎌倉」は検索でヒットするが、住所の「鎌倉」はヒットしない。その結果、住所に関する情報の機密性が保たれる。
【００９８】
なお、マイナンバーのような特に機密性の高い情報は暗号化して保存される。しかし、マイナンバーが登録されているカラムが検索対象となっている場合、検索クエリとしてマイナンバーを入力することで、検索結果画面にマイナンバーが表示されていなくても、特定の個人のマイナンバーを推定できる。第２の実施の形態であれば、そのようなマイナンバーの露呈を抑止することができる。
【００９９】
図１７は、マイナンバーに対する検索例を示す図である。図１７には、管理者４１とＡ社員４４とが、マイナンバーを検索のキーワードとした検索を行った場合の例が示されている。
【０１００】
管理者４１が入力した検索クエリ４２には、検索対象の属性として「マイナンバー」が指定され、マイナンバーの値が検索のキーワードとして設定されている。このような検索クエリ４２に基づいて検索部１８０によって検索が行われ、モニタ２１には結果表示画面４３が表示される。管理者４１は、マイナンバーに対する検索権限を有しているため、入力したマイナンバーの値を有するレコードの内容が、結果表示画面４３に表示される。例えば結果表示画面４３は、氏名や従業員番号が表示される。マイナンバーの値は暗号化されており、復号処理を行わない限り、結果表示画面４３では非表示となる。
【０１０１】
このような結果表示画面４３では、マイナンバーの値は非表示であるものの、管理者４１が検索クエリで指定した値が、結果表示画面４３に示される個人のマイナンバーであることが分かる。管理者４１は、マイナンバーに対する検索権限を有しているため、管理者４１が個人のマイナンバーを認識できることに問題はない。
【０１０２】
同様に、Ａ社員４４が入力した検索クエリ４５にも、検索対象の属性として「マイナンバー」が指定され、マイナンバーの値が検索のキーワードとして設定されている。このような検索クエリ４５に基づいて検索部１８０によって検索が行われ、モニタ２１には結果表示画面４６が表示される。Ａ社員４４は、マイナンバーに対する検索権限を有していないため、結果表示画面４６には、該当者が存在しないことが表示される。従って、Ａ社員は、検索クエリ４５で指定したマイナンバーを有する者が誰なのかを知ることはできない。
【０１０３】
このように、管理者４１に対しては、マイナンバーを用いた検索を許容することで、高い利便性を提供しながら、Ａ社員のような権限の低いユーザにはマイナンバーを用いた検索を禁止することができる。
【０１０４】
〔第３の実施の形態〕
次に第３の実施の形態について説明する。第３の実施の形態は、各レコードの特定のカラムの内容に応じて、該当レコードへの検索権限を設定できるようにしたものである。以下、第２の実施の形態との相違点を中心にして、第３の実施の形態について説明する。
【０１０５】
図１８は、第３の実施の形態における権限管理テーブルの一例を示す図である。図１８に示す権限管理テーブル１５２には、カラム内容別権限指定の欄が設けられている。カラム内容別権限指定の欄には、検索権限の区別に使用するカラムのカラム名と、そのカラムの値に関する条件とが設定されている。例えば「ＵＩＤ０１」のユーザは、横浜支店の社員であるものとする。このユーザに対して、「支店名（カラム１）が横浜支店以外」というカラム内容別権限指定と、「支店名（カラム１）が横浜支店」というカラム内容別権限指定とが設定されている。
【０１０６】
そして各カラム内容別権限指定について、各カラムについての検索権限の有無が設定されている。図１８の例では、「ＵＩＤ０１」のユーザは、支店名が「横浜支店」以外のレコードに対しては、氏名が設定された「カラム２」と住所が設定された「カラム３」とに対する検索権限がない。「ＵＩＤ０１」のユーザは、支店名が「横浜支店」のレコードに対しては、氏名が設定された「カラム２」と住所が設定された「カラム３」とに対する検索権限を有している。
【０１０７】
このように、カラム内容別で検索権限が設定された場合、マスクビット生成部１６０により、各レコードのカラム内容に応じたマスクビットが生成される。
図１９は、第３の実施の形態におけるマスクビット生成処理の手順の一例を示すフローチャートである。図１９に示す処理のうち、ステップＳ２０１，Ｓ２０４〜Ｓ２１１の各処理は、それぞれ図９に示した第２の実施の形態のマスクビット生成処理におけるステップＳ１０１〜Ｓ１０９の処理と同じである。以下、第２の実施の形態と異なるステップＳ２０２，Ｓ２０３について説明する。
【０１０８】
［ステップＳ２０２］マスクビット生成部１６０は、権限管理テーブル１５２を参照し、選択したユーザに対して、カラム内容別権限指定が設定されているか否かを判断する。カラム内容別権限指定が設定されていれば、処理がステップＳ２０３に進められる。カラム内容別権限指定が設定されていなければ、処理がステップＳ２０４に進められる。
【０１０９】
［ステップＳ２０３］マスクビット生成部１６０は、カラム内容別マスクビット生成処理を実行する。この処理の終了後、処理がステップＳ２１０に進められる。
図２０は、カラム内容別マスクビット生成処理の手順の一例を示すフローチャートである。以下、図２０に示す処理をステップ番号に沿って説明する。
【０１１０】
［ステップＳ２２１］マスクビット生成部１６０は、ＣＳＶデータ内のレコードを１つ選択する。例えばマスクビット生成部１６０は、レコードインデックス１３１に示されているレコードを１つずつ選択する。
【０１１１】
［ステップＳ２２２］マスクビット生成部１６０は、選択したユーザに設定されたカラム内容別権限指定と、選択したレコードの内容とを照合する。例えば図１８に示す「ＵＩＤ０１」のユーザが選択されている場合を想定する。この場合、マスクビット生成部１６０は、選択したレコードの「カラム１」を検索対象として、「横浜」の文字列の検索を行う。「横浜」の文字列が検出された場合、「支店名（カラム１）が横浜支店」というカラム内容別権限指定に対応する検索権限が適用される。「横浜」の文字列が検出されなかった場合、「支店名（カラム１）が横浜支店以外」というカラム内容別権限指定に対応する検索権限が適用される。
【０１１２】
［ステップＳ２２３］マスクビット生成部１６０は、カラム内容別権限指定に対応する検索権限を、権限管理テーブル１５２から取得する。
［ステップＳ２２４］マスクビット生成部１６０は、選択したレコード内のカラムを１つ選択する。
【０１１３】
［ステップＳ２２５］マスクビット生成部１６０は、レコードインデックス１３１とカラムインデックス１４１とを参照し、選択したレコード内の選択したカラムに対応する、マスクビット列内のマスクビットを特定する。
【０１１４】
［ステップＳ２２６］マスクビット生成部１６０は、ステップＳ２２３で取得した検索権限に基づき、選択したユーザが選択したカラムに対応するフィールド内のカラムデータを検索対象とする権限を有するか否かを判断する。権限を有する場合、処理がステップＳ２２７に進められる。権限を有していない場合、処理がステップＳ２２８に進められる。
【０１１５】
［ステップＳ２２７］マスクビット生成部１６０は、マスクビット列内のステップＳ２２５で特定したビットに「１」を設定する。その後、処理がステップＳ２２９に進められる。
【０１１６】
［ステップＳ２２８］マスクビット生成部１６０は、マスクビット列内のステップＳ２２５で特定したビットに「０」を設定する。なおマスクビット列内の各ビットの初期値が「０」であれば、マスクビット生成部１６０は、特定したビットの値を変更せずに、処理をステップＳ２２９に進める。
【０１１７】
［ステップＳ２２９］マスクビット生成部１６０は、選択中のレコード内に未選択のカラムがあるか否かを判断する。未選択のカラムがあれば、処理がステップＳ２２４に進められる。未選択のカラムがなければ、処理がステップＳ２３０に進められる。
【０１１８】
［ステップＳ２３０］マスクビット生成部１６０は、未選択のレコードがあるか否かを判断する。未選択のレコードがあれば、処理がステップＳ２２１に進められる。未選択のレコードがなければ、カラム内容別マスクビット生成処理が終了する。
【０１１９】
このように、第３の実施の形態では、レコードごとに、そのレコード内の特定のカラムの内容に応じた検索権限が適用される。これにより、より細かな検索権限の指定が可能となる。
【０１２０】
ここで、カラム内容別権限指定がある場合には、ステップＳ２２２に示すように、カラム内容別権限指定とレコードの内容との照合が行われる。以下、図２１を参照し、カラム内容別権限指定とレコードの内容との照合方法について具体的に説明する。
【０１２１】
図２１は、カラム内容別権限指定とレコードの内容との照合例を示す図である。図２１の例では、ＣＳＶデータ３０ｂ内に、支店名、氏名、住所、性別のカラムに対応するフィールドを有する複数のレコードが登録されている。ここで「レコード２」に対応するマスクビットの設定例について説明する。
【０１２２】
マスクビット生成部１６０は、まずレコードインデックス１３１から、「レコード２」の位置を示すビット列と「レコード３」の位置を示すビット列とを抽出する。次にマスクビット生成部１６０は、各ビット列を２進数の数値とみなして、「レコード３」から「レコード２」を減算する。減算の結果、「レコード２」に属する数値または文字の位置のビットに「１」が設定されたビット列が生成される。
【０１２３】
またマスクビット生成部１６０は、まずカラムインデックス１４１から、「カラム１」の位置を示すビット列と「カラム２」の位置を示すビット列とを抽出する。次にマスクビット生成部１６０は、各ビット列を２進数の数値とみなして、「カラム２」から「カラム１」を減算する。減算の結果、「カラム１」に対応するフィールドに属する数値または文字の位置のビットに「１」が設定されたビット列が生成される。
【０１２４】
次にマスクビット生成部１６０は、「レコード２」に対応するビットを示すビット列と、「カラム１」に対応するビットを示すビット列との、ビットごとのＡＮＤ演算を行う。これにより、「レコード２」内の「カラム１」に対応するビットを示すビット列が生成される。マスクビット生成部１６０は、このビット列と、「横浜」の検索結果とのＡＮＤ演算を行う。このＡＮＤ演算の結果は、レコードの内容の照合結果となる。すなわち、少なくとも１つのビットに「１」が設定されていれば、「レコード２」の「カラム１」には「横浜」の文字列が含まれることとなる。すなわち「レコード２」は、横浜支店に所属する者に関するレコードであり、「支店名（カラム１）が横浜支店」の場合の検索権限が適用される。
【０１２５】
このようにして、レコードごとに適用する検索権限が決定される。そして各レコードのマスクビットが、適用する検索権限に応じて決定される。
図２２は、カラム内容別のマスクビット設定例を示す図である。図２２の例では、「レコード１」には「支店名（カラム１）が横浜支店以外」の場合の検索権限が適用され、「レコード２」には「支店名（カラム１）が横浜支店」の場合の検索権限が適用される。ここで、「レコード２」の「カラム１」までマスクビットの設定が完了しており、次に「レコード２」の「カラム２」のマスクビットの設定を行うものとする。
【０１２６】
マスクビット生成部１６０は、「レコード２」内の「カラム２」に属する数値または文字の位置を示すビット列を生成する。このビット列の生成方法は、図２１に示した、「レコード２」内の「カラム１」に属する数値または文字の位置を示すビット列の生成方法と同じである。
【０１２７】
マスクビット生成部１６０は、「レコード２」に適用する検索権限における「カラム２」の権限を参照し、権限有りと判断する。そこで、マスクビット生成部１６０は、「レコード２」の「カラム１」までのマスクビットの設定が完了しているマスクビット列と、「レコード２」内の「カラム２」に属する数値または文字の位置を示すビット列とのＯＲ演算を行う。その結果、マスクビット列における「レコード２」内の「カラム２」に対応するビットに「１」が設定される。
【０１２８】
このようにして、順次マスクビットの設定が行われ、ユーザ「ＵＩＤ０１」用のマスクビット列が完成する。そして、ユーザ「ＵＩＤ０１」が検索を行うと、ユーザ「ＵＩＤ０１」用のマスクビット列を用いた検索が行われる。
【０１２９】
図２３は、カラム内容別権限指定がある場合の検索例を示す図である。図２３には、横浜支店長である「ＵＩＤ０１」のユーザが「鎌倉」のキーワードを検索クエリで指定した場合を想定している。この場合、まず「鎌倉」のキーワードにより検索が行われ、検索権限による制約を受けていない中間検索結果が得られる。この中間検索結果と、「ＵＩＤ０１」に対応するマスクビット列とのＡＮＤ演算が行われ、演算結果が権限内検索結果として出力される。
【０１３０】
図２３の例では、横浜支店ではない「レコード１」の「カラム２（氏名）」や「カラム３（住所）」のフィールドに含まれている「鎌倉」は、検索でヒットしない。それに対して、横浜支店である「レコード２」の「カラム２（氏名）」や「カラム３（住所）」のフィールドに含まれている「鎌倉」は、検索でヒットしている。
【０１３１】
このようにして、各レコードのカラムの内容に応じた検索権限を設定することができる。これにより、例えば検索者とレコードに示される個人との関係（同じ支店に所属するか）に応じて、各レコード内の検索可能範囲を設定することができる。この場合であっても、各ユーザに１つずつのマスクビット列を生成すればよく、検索時の処理負荷の増加はない。そのため、細かな検索権限の制御を伴う検索を、効率的に実施することができる。
【０１３２】
〔第４の実施の形態〕
次に第４の実施の形態について説明する。第４の実施の形態は、特定の文字列を含むレコード全体を、検索対象から除外するものである。以下、第２の実施の形態との相違点を中心にして、第４の実施の形態について説明する。
【０１３３】
図２４は、第４の実施の形態における権限管理テーブルの一例を示す図である。図２４に示す権限管理テーブル１５３には、検索除外レコード指定の欄が設けられている。検索除外レコード指定の欄には、検索対象から除外するレコードに含まれる数値または文字に関する条件が設定されている。例えば「ＵＩＤ０１」のユーザに対して、「鎌倉」を含むレコードを検索対象から除外することが設定されている。
【０１３４】
このように、検索除外レコード指定が設定された場合、マスクビット生成部１６０により、各レコードについて検索対象から除外するか否かに応じたマスクビットが生成される。
【０１３５】
図２５は、第４の実施の形態におけるマスクビット生成処理の手順の一例を示すフローチャートである。図２５に示す処理のうち、ステップＳ３０１，Ｓ３０４〜Ｓ３１１の各処理は、それぞれ図９に示した第２の実施の形態のマスクビット生成処理におけるステップＳ１０１〜Ｓ１０９の処理と同じである。以下、第２の実施の形態と異なるステップＳ３０２，Ｓ３０３について説明する。
【０１３６】
［ステップＳ３０２］マスクビット生成部１６０は、権限管理テーブル１５２を参照し、選択したユーザに対して、検索除外レコード指定が設定されているか否かを判断する。検索除外レコードが設定されていれば、処理がステップＳ３０３に進められる。検索除外レコードが設定されていなければ、処理がステップＳ３０４に進められる。
【０１３７】
［ステップＳ３０３］マスクビット生成部１６０は、検索除外レコード適用マスクビット生成処理を実行する。この処理の終了後、処理がステップＳ３１０に進められる。
図２６は、検索除外レコード適用マスクビット生成処理の手順の一例を示すフローチャートである。以下、図２６に示す処理をステップ番号に沿って説明する。
【０１３８】
［ステップＳ３２１］マスクビット生成部１６０は、ＣＳＶデータ内のレコードを１つ選択する。例えばマスクビット生成部１６０は、レコードインデックス１３１に示されているレコードを１つずつ選択する。
【０１３９】
［ステップＳ３２２］マスクビット生成部１６０は、選択したユーザに設定された検索除外レコード指定と、選択したレコードの内容とを照合する。例えば図２４に示す「ＵＩＤ０１」のユーザが選択されている場合を想定する。この場合、マスクビット生成部１６０は、選択したレコード内の全カラムを検索対象として、「鎌倉」の文字列の検索を行う。「鎌倉」の文字列が検出された場合、選択したレコードは検索除外対象となる。「鎌倉」の文字列が検出されなかった場合、選択したレコードは検索対象となる。
【０１４０】
［ステップＳ３２３］マスクビット生成部１６０は、選択したレコードが検索除外対象であれば、処理をステップＳ３２４に進める。また、マスクビット生成部１６０は、選択したレコードが検索対象であれば、処理をステップＳ３２５に進める。
【０１４１】
［ステップＳ３２４］マスクビット生成部１６０は、マスクビット内の選択したレコードに対応するビットに「０」を設定する。その後、処理がステップＳ３３１に進められる。なお、マスクビット内の各ビットの初期値が「０」であれば、マスクビットの値の変更をせずに、処理がステップＳ３３１に進められる。
【０１４２】
［ステップＳ３２５］マスクビット生成部１６０は、選択したレコード内のカラムを１つ選択する。
［ステップＳ３２６］マスクビット生成部１６０は、レコードインデックス１３１とカラムインデックス１４１とを参照し、選択したレコード内の選択したカラムに対応する、マスクビット列内のマスクビットを特定する。
【０１４３】
［ステップＳ３２７］マスクビット生成部１６０は、選択したユーザの検索権限に基づき、選択したユーザが選択したカラムに対応するフィールド内のカラムデータを検索対象とする権限を有するか否かを判断する。権限を有する場合、処理がステップＳ３２８に進められる。権限を有していない場合、処理がステップＳ３２９に進められる。
【０１４４】
［ステップＳ３２８］マスクビット生成部１６０は、マスクビット列内のステップＳ３２６で特定したビットに「１」を設定する。その後、処理がステップＳ３３０に進められる。
【０１４５】
［ステップＳ３２９］マスクビット生成部１６０は、マスクビット列内のステップＳ３２６で特定したビットに「０」を設定する。なおマスクビット列内の各ビットの初期値が「０」であれば、マスクビット生成部１６０は、特定したビットの値を変更せずに、処理をステップＳ３３０に進める。
【０１４６】
［ステップＳ３３０］マスクビット生成部１６０は、選択中のレコード内に未選択のカラムがあるか否かを判断する。未選択のカラムがあれば、処理がステップＳ３２５に進められる。未選択のカラムがなければ、処理がステップＳ３３１に進められる。
【０１４７】
［ステップＳ３３１］マスクビット生成部１６０は、未選択のレコードがあるか否かを判断する。未選択のレコードがあれば、処理がステップＳ３２１に進められる。未選択のレコードがなければ、検索除外レコード適用マスクビット生成処理が終了する。
【０１４８】
このように、第３の実施の形態では、検索対象から除外するものと指定されたレコードが検索されないようなマスクビットが生成される。これにより、より細かな検索権限の指定が可能となる。
【０１４９】
図２７は、検索除外レコード指定を適用したマスクビット生成例を示す図である。図２７の例に示すＣＳＶデータ３０ｃでは、１つ目の「レコード１」内の支店名のカラムに「鎌倉」の文字が含まれる。また２つ目の「レコード２」内の氏名のカラムに「鎌倉」の文字が含まれる。このとき図２４に示す権限管理テーブル１５３に基づいて、「ＵＩＤ０１」のユーザのマスクビット列を生成するものとする。また「レコード１」、「レコード２」に対応するマスクビットの設定が完了しており、次に「レコード３」の「カラム１」に対するマスクビットの設定を行うものとする。
【０１５０】
マスクビット生成部１６０は、まずレコードインデックス１３１から、「レコード３」の位置を示すビット列と「レコード４」の位置を示すビット列とを抽出する。次にマスクビット生成部１６０は、各ビット列を２進数の数値とみなして、「レコード４」から「レコード３」を減算する。減算の結果、「レコード３」に属する数値または文字の位置のビットに「１」が設定されたビット列が生成される。マスクビット生成部１６０は、このビット列と、「鎌倉」の検索結果とのＡＮＤ演算を行う。このＡＮＤ演算の結果は、「レコード３」に対する「鎌倉」の検索結果となる。すなわち、検索結果の少なくとも１つのビットに「１」が設定されていれば、「レコード３」内に「鎌倉」の文字列が含まれることとなる。図２７の例では「レコード３」には「鎌倉」の文字列は含まれない。そのため「レコード３」は検索対象になると判断される。
【０１５１】
そこでマスクビット生成部１６０は、「レコード３」内の「カラム１」に属する数値または文字の位置を示すビット列を生成する。このビット列の生成方法は、図２１に示した、「レコード２」内の「カラム１」に属する数値または文字の位置を示すビット列の生成方法と同じである。マスクビット生成部１６０は、「ＵＩＤ０１」のユーザに適用する検索権限における「カラム１」の権限を参照し、権限有りと判断する。そこで、マスクビット生成部１６０は、「レコード２」までのマスクビットの設定が完了しているマスクビット列と、「レコード３」内の「カラム１」に属する数値または文字の位置を示すビット列とのＯＲ演算を行う。その結果、マスクビット列における「レコード３」内の「カラム１」に対応するビットに「１」が設定される。
【０１５２】
このようにして、順次マスクビットの設定が行われ、ユーザ「ＵＩＤ０１」用のマスクビット列が完成する。そして、ユーザ「ＵＩＤ０１」が検索を行うと、ユーザ「ＵＩＤ０１」用のマスクビット列を用いた検索が行われる。
【０１５３】
図２８は、検索除外レコード指定がある場合の検索例を示す図である。図２８には、「ＵＩＤ０１」のユーザが「神奈川」のキーワードを検索クエリで指定した場合を想定している。この場合、まず「神奈川県」のキーワードにより検索が行われ、検索権限による制約を受けていない中間検索結果が得られる。この中間検索結果と、「ＵＩＤ０１」に対応するマスクビット列とのＡＮＤ演算が行われ、演算結果が権限内検索結果として出力される。
【０１５４】
図２８の例では、「レコード１」については、住所の「カラム３」に「神奈川県」の文字列が含まれており、「レコード１」内の他のカラムに「鎌倉」の文字列も含まれる。そのため、「レコード１」全体が検索の対象外となる。その結果、権限内検索結果において、「レコード１」に含まれる「神奈川県」の文字列はヒットしていない。それに対して、「レコード３」については、住所の「カラム３」に「神奈川県」の文字列が含まれているが、「レコード１」内のどこにも「鎌倉」の文字列は含まれていない。そのため、「レコード３」は検索の対象となる。その結果、権限内検索結果において、「レコード３」に含まれる「神奈川県」の文字列はヒットしている。
【０１５５】
このようにして、所定の文字列を含むレコードを検索対象から除外することができる。なお検索除外レコード指定は、例えば特定のカラム内における文字列の指定とすることもできる。
【０１５６】
〔第５の実施の形態〕
次に第５の実施の形態について説明する。第５の実施の形態は、特定のカラムの数値が所定の範囲内にあるレコードのみを検索対象とするものである。換言すると、特定のカラムの数値が所定の範囲外にあるレコードを、検索対象から除外するものである。以下、第２の実施の形態との相違点を中心にして、第５の実施の形態について説明する。
【０１５７】
図２９は、第５の実施の形態における権限管理テーブルの一例を示す図である。図２９に示す権限管理テーブル１５４には、検索対象レコード指定の欄が設けられている。検索対象レコード指定の欄には、検索権限の有無の判定に使用するカラムのカラム名と、そのカラムの値に関する条件とが設定されている。例えば「ＵＩＤ０１」のユーザに対して、『部コード（カラム１）が「１００１〜１０３０」』という検索対象レコード指定が設定されている。
【０１５８】
このように、検索対象レコード指定が設定された場合、マスクビット生成部１６０により、各レコードが検索対象か否かに応じたマスクビットが生成される。
図３０は、第５の実施の形態におけるマスクビット生成処理の手順の一例を示すフローチャートである。図３０に示す処理のうち、ステップＳ４０１，Ｓ４０４〜Ｓ４１１の各処理は、それぞれ図９に示した第２の実施の形態のマスクビット生成処理におけるステップＳ１０１〜Ｓ１０９の処理と同じである。以下、第２の実施の形態と異なるステップＳ４０２，Ｓ４０３について説明する。
【０１５９】
［ステップＳ４０２］マスクビット生成部１６０は、権限管理テーブル１５４を参照し、選択したユーザに対して、検索対象レコード指定が設定されているか否かを判断する。検索対象レコード指定が設定されていれば、処理がステップＳ４０３に進められる。検索対象レコード指定が設定されていなければ、処理がステップＳ４０４に進められる。
【０１６０】
［ステップＳ４０３］マスクビット生成部１６０は、検索対象レコード指定マスクビット生成処理を実行する。この処理の終了後、処理がステップＳ４１０に進められる。
図３１は、検索対象レコード指定マスクビット生成処理の手順の一例を示すフローチャートである。図３１に示す処理のうち、ステップＳ４２１，Ｓ４２４〜Ｓ４３１の各処理は、それぞれ図２６に示した第４の実施の形態の検索除外レコード適用マスクビット生成処理におけるステップＳ３２１，Ｓ３２４〜Ｓ３３１の処理と同じである。以下、第４の実施の形態と異なるステップＳ４２２，Ｓ４２３について説明する。
【０１６１】
［ステップＳ４２２］マスクビット生成部１６０は、選択したユーザに設定された検索対象レコード指定と、選択したレコードの内容とを照合する。例えば図２９に示す「ＵＩＤ０１」のユーザが選択されている場合を想定する。この場合、マスクビット生成部１６０は、選択したレコード内の部コードの「カラム１」の値が、「１００１〜１０３０」の範囲内か否かを判断する。部コードの値が指定された範囲内の場合、選択したレコードは検索対象となる。部コードの値が指定された範囲外の場合、選択したレコードは検索対象外となる。
【０１６２】
［ステップＳ４２３］マスクビット生成部１６０は、選択したレコードが検索対象であれば、処理をステップＳ４２５に進める。また、マスクビット生成部１６０は、選択したレコードが検索対象外であれば、処理をステップＳ４２４に進める。
【０１６３】
このように、第４の実施の形態では、検索対象と指定されたレコードのみを検索対象とするようなマスクビットが生成される。これにより、より細かな検索権限の指定が可能となる。
【０１６４】
図３２は、数値範囲で検索対象レコードを指定したときのマスクビット生成例を示す図である。図３２の例に示すＣＳＶデータ３０ｄでは、１つ目の「レコード１」内の部コードのカラムには「１１０３」が設定されている。２つ目の「レコード２」内の部コードのカラムには「１０２７」が設定されている。３つ目の「レコード３」内の部コードのカラムには「１００３」が設定されている。このとき図２９に示す権限管理テーブル１５４に基づいて、「ＵＩＤ０１」のユーザのマスクビット列を生成するものとする。また「レコード１」に対応するマスクビットの設定が完了しており、次に「レコード２」の「カラム１」に対するマスクビットの設定を行うものとする。
【０１６５】
マスクビット生成部１６０は、まずレコードインデックス１３１から、「レコード２」の位置を示すビット列と「レコード３」の位置を示すビット列とを抽出する。次にマスクビット生成部１６０は、各ビット列を２進数の数値とみなして、「レコード３」から「レコード２」を減算する。減算の結果、「レコード２」に属する数値または文字の位置のビットに「１」が設定されたビット列が生成される。マスクビット生成部１６０は、このビット列と、部コードを対象とした「１００１〜１０３０」の数値範囲検索結果とのＡＮＤ演算を行う。このＡＮＤ演算の結果は、「レコード２」に対する部コードを対象とした「１００１〜１０３０」の数値範囲検索結果となる。すなわち、検索結果の少なくとも１つのビットに「１」が設定されていれば、「レコード２」の部コードの値が「１００１〜１０３０」の範囲内であることになる。図３２の例では「レコード２」の部コードは「１０２７」であり、「１００１〜１０３０」の数値範囲内である。そのため「レコード２」は検索対象になると判断される。
【０１６６】
そこでマスクビット生成部１６０は、「レコード２」内の「カラム１」に属する数値または文字の位置を示すビット列を生成する。このビット列の生成方法は、図２１に示した、「レコード２」内の「カラム１」に属する数値または文字の位置を示すビット列の生成方法と同じである。マスクビット生成部１６０は、「ＵＩＤ０１」のユーザに適用する検索権限における「カラム１」の権限を参照し、権限有りと判断する。そこで、マスクビット生成部１６０は、「レコード１」までのマスクビットの設定が完了しているマスクビット列と、「レコード２」内の「カラム１」に属する数値または文字の位置を示すビット列とのＯＲ演算を行う。その結果、マスクビット列における「レコード２」内の「カラム１」に対応するビットに「１」が設定される。
【０１６７】
このようにして、順次マスクビットの設定が行われ、ユーザ「ＵＩＤ０１」用のマスクビット列が完成する。そして、ユーザ「ＵＩＤ０１」が検索を行うと、ユーザ「ＵＩＤ０１」用のマスクビット列を用いた検索が行われる。
【０１６８】
図３３は、数値範囲による検索対象レコード指定がある場合の検索例を示す図である。図３３には、「ＵＩＤ０１」のユーザが「富士山」のキーワードを検索クエリで指定した場合を想定している。この場合、まず「富士山」のキーワードにより検索が行われ、検索権限による制約を受けていない中間検索結果が得られる。この中間検索結果と、「ＵＩＤ０１」に対応するマスクビット列とのＡＮＤ演算が行われ、演算結果が権限内検索結果として出力される。
【０１６９】
図３３の例では、「レコード１」については、部コードが「１１０３」であり、指定された数値範囲外である。そのため、「レコード１」全体が検索の対象外となる。その結果、権限内検索結果において、「レコード１」に含まれる「富士山」の文字列はヒットしていない。それに対して、「レコード２」の部コードは「１０２７」であり、指定された数値範囲内である。同様に、「レコード３」の部コードは「１００３」であり、指定された数値範囲内である。そのため、「レコード２」と「レコード３」とは検索の対象となる。その結果、権限内検索結果において、「レコード２」と「レコード３」とのそれぞれに含まれる「富士山」の文字列はヒットしている。
【０１７０】
このようにして、所定のカラムの値が所定の数値範囲内のレコードに限定した検索を行うことができる。なお、検索対象レコード指定は、例えば特定のカラム内の文字列の指定であってもよい。
【０１７１】
〔その他の実施の形態〕
上記各実施の形態では、各ユーザのマスクビット列を予め生成しているが、ユーザから検索要求が入力されたときに、そのユーザのマスクビット列を生成するようにしてもよい。
【０１７２】
以上、実施の形態を例示したが、実施の形態で示した各部の構成は同様の機能を有する他のものに置換することができる。また、他の任意の構成物や工程が付加されてもよい。さらに、前述した実施の形態のうちの任意の２以上の構成（特徴）を組み合わせたものであってもよい。
【符号の説明】
【０１７３】
１  ファイル
２  圧縮データ
３  検索権限
４  マスク情報
５  検索条件
６  検索結果
１０  検索装置
１０−１  記憶部
１０−２  処理部
１１  符号化手段
１２  マスク情報生成手段
１３  検索手段
【図１】
2018060370.tif 000003
【図２】
2018060370.tif 000004
【図３】
2018060370.tif 000005
【図４】
2018060370.tif 000006
【図５】
2018060370.tif 000007
【図６】
2018060370.tif 000008
【図７】
2018060370.tif 000009
【図８】
2018060370.tif 000010
【図９】
2018060370.tif 000011
【図１０】
2018060370.tif 000012
【図１１】
2018060370.tif 000013
【図１２】
2018060370.tif 000014
【図１３】
2018060370.tif 000015
【図１４】
2018060370.tif 000016
【図１５】
2018060370.tif 000017
【図１６】
2018060370.tif 000018
【図１７】
2018060370.tif 000019
【図１８】
2018060370.tif 000020
【図１９】
2018060370.tif 000021
【図２０】
2018060370.tif 000022
【図２１】
2018060370.tif 000023
【図２２】
2018060370.tif 000024
【図２３】
2018060370.tif 000025
【図２４】
2018060370.tif 000026
【図２５】
2018060370.tif 000027
【図２６】
2018060370.tif 000028
【図２７】
2018060370.tif 000029
【図２８】
2018060370.tif 000030
【図２９】
2018060370.tif 000031
【図３０】
2018060370.tif 000032
【図３１】
2018060370.tif 000033
【図３２】
2018060370.tif 000034
【図３３】
2018060370.tif 000035