(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-11-01
(45)【発行日】2023-11-10
(54)【発明の名称】データベース管理システム、および、データベース処理方法
(51)【国際特許分類】
G06F 16/24 20190101AFI20231102BHJP
G06F 21/62 20130101ALI20231102BHJP
【FI】
G06F16/24
G06F21/62 354
(21)【出願番号】P 2019181186
(22)【出願日】2019-10-01
【審査請求日】2022-08-15
【国等の委託研究の成果に係る記載事項】(出願人による申告)平成31年度、国立研究開発法人 科学技術振興機構、「革新的研究開発推進プログラム(ImPACT)」「社会リスクを低減する超ビッグデータプラットフォーム/超高速動的スケーラブルデータベースエンジンの基盤技術の研究開発、超高速動的スケーラブルデータベースエンジンの実用化技術の研究開発」委託研究、産業技術力強化法第17条の適用を受ける特許出願
(73)【特許権者】
【識別番号】000005108
【氏名又は名称】株式会社日立製作所
(73)【特許権者】
【識別番号】504137912
【氏名又は名称】国立大学法人 東京大学
(74)【代理人】
【識別番号】110002365
【氏名又は名称】弁理士法人サンネクスト国際特許事務所
(72)【発明者】
【氏名】礒田 有哉
(72)【発明者】
【氏名】茂木 和彦
(72)【発明者】
【氏名】西川 記史
(72)【発明者】
【氏名】合田 和生
(72)【発明者】
【氏名】早水 悠登
(72)【発明者】
【氏名】喜連川 優
【審査官】松尾 真人
(56)【参考文献】
【文献】特開2016-126579(JP,A)
【文献】特開2017-182508(JP,A)
【文献】国際公開第2019/073967(WO,A1)
【文献】米国特許出願公開第2015/0169895(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 16/00-16/958
G06F 21/60-21/88
(57)【特許請求の範囲】
【請求項1】
関係表を格納するデータベースを管理するデータベース管理システムであって、
前記関係表に含まれる列毎に存在し複数の一般化規則を示す匿名加工規則情報のうち前記関係表の第1の列に対応する第1の匿名加工規則情報を指定した第1の命令を含む一つ以上の命令を受け付ける命令受付部と、
前記一つ以上の命令の各々を実行する命令実行部と、
前記一つ以上の命令の各々の実行結果を応答する命令応答部と
を備え、
前記命令実行部は、
(a)前記第1の命令に応じて、前記関係表から第1の列を読み込み、
(b)前記第1の列の属性値のそれぞれを前記第1の匿名加工規則情報に示される複数の一般化規則のいずれかに基づき一般化した第1の一時結果を生成し、
(c)当該第1の一時結果を集計した第1の集計結果を生成し、
(d)(c)又は(f)で生成された結果が、開示規則情報が示す開示規則を満たすか否かを判定し、
(e)(d)の判定結果が真の場合、前記第1の列の属性値のそれぞれと前記第1の匿名加工規則情報に示される前記複数の一般化規則のいずれかとの対応関係を示す汎化情報を含んだ第1の匿名加工方法を生成し、
(f)(d)の判定結果が偽の場合、前記第1の一時結果の全部または一部の属性値に対し、汎化度のより高い一般化規則に基づき一般化した結果を生成できた場合に、再度(d)を行い、
(g)(e)の後、前記第1の命令、または、
当該第1の匿名加工方法を含む第2の命令に応じて、前記第1の匿名加工方法に基づき前記関係表を加工した結果である第1の匿名加工情報を生成し、
前記命令応答部
は、
前記第1の匿名加工情報の全部または一部である第1の匿名加工結果を応答する、
ことを特徴とするデータベース管理システム。
【請求項2】
請求項1に記載のデータベース管理システムであって、
前記命令応答部は、前記
生成された第1の匿名加工方法を、前記第1の命令に対する応答として、応答し、
前記命令受付部は、
前記第2の命令を受け付け、
前記命令実行部は、前記第2の命令に応じて、前記第1の匿名加工
情報を生成する、
ことを特徴とするデータベース管理システム。
【請求項3】
請求項1に記載のデータベース管理システムであって、
前記命令応答部は、前記第1の匿名加工規則情報に含まれる複数の一般化規則のいずれにおいても、前記第1の集計結果が前記開示規則情報を満たさない場合、前記開示規則情報を満たす匿名加工方法がないことを示す情報を、前記第1の命令に対する応答として応答する、
ことを特徴とするデータベース管理システム。
【請求項4】
請求項1に記載のデータベース管理システムであって、
前記第1の匿名加工方法の生成日時を示す匿名加工方法履歴と、前記関係表に対する操作のうち削除の最終実行日時を示す関係表履歴とを管理する履歴管理部を更に備え、
前記命令実行部は、前記第1の匿名加工方法の前記生成日時が、前記最終実行日時以前の場合、当該第1の匿名加工方法の実行を抑制する、
ことを特徴とするデータベース管理システム。
【請求項5】
請求項1に記載のデータベース管理システムであって、
前記開示規則情報が、前記関係表における参照権限と出力権限のうち少なくとも出力権限を表す情報を含む、
ことを特徴とするデータベース管理システム。
【請求項6】
請求項5に記載のデータベース管理システムであって、
前記開示規則情報において、前記出力権限を表す情報が、前記第1の匿名加工方法のうち出力が禁止される部分を示す情報を含む、
ことを特徴とするデータベース管理システム。
【請求項7】
請求項5に記載のデータベース管理システムであって、
前記開示規則情報において、前記参照権限または前記出力権限を表す情報が、前記第1の列を参照することの禁止を表す情報、または、前記第1の匿名加工方法および前記第1の匿名加工結果を出力することの禁止を表す情報を含む場合、前記第1の命令または前記第2の命令に応じた実行無しに、前記命令応答部が、エラー応答を返す、
ことを特徴とするデータベース管理システム。
【請求項8】
請求項1に記載のデータベース管理システムであって、
前記命令実行部が、前記第1の列における属性値を基に前記汎化情報の生成に使用される情報である再帰汎化情報を生成し、
前記再帰汎化情報は、前記第1の列における属性値の分布を示す、
ことを特徴とするデータベース管理システム。
【請求項9】
請求項8に記載のデータベース管理システムであって、
前記第1の列について、前記再帰汎化情報は、当該第1の列に関して取得し得る値毎に、当該値の件数と、当該値が属し当該第1の列に関して取得し得る別の値と、匿名加工するか否かとを含み、
当該値は、属性値、または、属性値にいずれかの一般化規則を適用することで得られる汎化値である、
ことを特徴とするデータベース管理システム。
【請求項10】
請求項9に記載のデータベース管理システムであって、
前記命令実行部が、前記再帰汎化情報を可視化
した匿名加工管理ビューを提供し、
前記匿名加工管理ビューは、前記第1の列に関して取得し得る値間の関係を示す、
ことを特徴とするデータベース管理システム。
【請求項11】
請求項10に記載のデータベース管理システムであって、
前記開示規則情報が、前記関係表における出力権限を表す情報を含み、
前記出力権限を表す情報は、前記再帰汎化情報のうち出力が禁止される部分を示す情報を含み、
前記匿名加工管理ビューが表示する情報は、前記出力権限を表す情報に依存する、
ことを特徴とするデータベース管理システム。
【請求項12】
請求項1に記載のデータベース管理システムであって、
前記関係表を構成する複数の列のうち、前記第1の列を含む二つ以上の列の各々が匿名化対象の列であり、
前記命令実行部は、
前記二つ以上の列の各々について、当該列の先頭の属性値から順次に匿名加工し得られた汎化値の件数を持った集計結果であるランレングス集計結果を生成し、
前記二つ以上の列にそれぞれ対応した二つ以上のランレングス集計結果を基に、匿名加工方法を生成する、
ことを特徴とするデータベース管理システム。
【請求項13】
請求項12に記載のデータベース管理システムであって、
前記命令実行部は、前記二つ以上の列の各々のカーディナリティに基づいて、列結合を行う、
ことを特徴とするデータベース管理システム。
【請求項14】
請求項13に記載のデータベース管理システムであって、
前記命令実行部は、計算負荷状況とメモリ空き状況とに基づいて、バランスツリーとレフトディープのいずれかの方式で列結合を行うことを選択する、
ことを特徴とするデータベース管理システム。
【請求項15】
関係表を格納するデータベースを管理するデータベース管理方法であって、
(A)前記関係表に含まれる列毎に存在し複数の一般化規則を示す匿名加工規則情報のうち前記関係表の第1の列に対応する第1の匿名加工規則情報を指定した第1の命令を含む一つ以上の命令を受け付け、
(B)前記第1の命令に応じて、前記関係表から第1の列を読み込み、
(C)前記第1の列の属性値のそれぞれを前記第1の匿名加工規則情報に示される複数の一般化規則のいずれかに基づき一般化した第1の一時結果を生成し、
(D)当該第1の一時結果を集計した第1の集計結果を生成し、
(E)(D)又は(G)で生成された結果が、開示規則情報が示す開示規則を満たすか否かを判定し、
(F)(E)の判定結果が真の場合、前記第1の列の属性値のそれぞれと前記第1の匿名加工規則情報に示される前記複数の一般化規則のいずれかとの対応関係を示す汎化情報を含んだ第1の匿名加工方法を生成し、
(G)(E)の判定結果が偽の場合、前記第1の一時結果の全部または一部の属性値に対し、汎化度のより高い一般化規則に基づき一般化した結果を生成できた場合に、再度(E)を行い、
(H)(F)の後、前記第1の命令、または、
当該第1の匿名加工方法を含む第2の命令に応じて、前記第1の匿名加工方法に基づき前記関係表を加工した結果である第1の匿名加工情報を生成し、
(I)前記第1の匿名加工情報の全部または一部である第1の匿名加工結果を応答する、
ことを
コンピュータとしてのデータベース管理システムにより実行することを特徴とするデータベース管理方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、概して、データ処理に関し、例えば、データベース管理に関する。
【背景技術】
【0002】
関係表が格納されたデータベースの一例として、医療情報(例えば、電子カルテ)のデータベースがある。そのような医療情報の利活用による医療技術の向上が期待されている。
【0003】
しかし、医療情報はプライバシー情報を含む。このため、医療情報の利活用にあたり、匿名加工技術を適用することが検討される。
【0004】
データベースの匿名加工技術として、特許文献1および非特許文献1に開示の技術がある。
【先行技術文献】
【特許文献】
【0005】
【非特許文献】
【0006】
【文献】Kristen LeFevre, David J. DeWitt, and Raghu Ramakrishnan, “Incognito: Efficient Full-Domain K-Anonymity”, SIGMOD 2005, p49-60, June 14-16, 2005
【発明の概要】
【発明が解決しようとする課題】
【0007】
匿名加工技術を適用することで、データベースのうちのプライバシー情報(匿名加工対象の情報の一例)を、開示規則(典型的には、k値、l値等の条件)を満たすよう匿名加工することができる。
【0008】
匿名加工処理が高速であることが望まれる。しかし、特許文献1および非特許文献1のいずれも、匿名加工処理を高速に行う技術を開示も示唆もしていない。
【課題を解決するための手段】
【0009】
データベース管理システムが、関係表に含まれる列毎に存在し複数の一般化規則を示す匿名加工規則情報のうち関係表の第1の列に対応する第1の匿名加工規則情報を指定した第1の命令を受け付ける。データベース管理システムが、第1の命令に応じて、関係表から第1の列を読み込み、第1の列の属性値のそれぞれを第1の匿名加工規則情報に示される複数の一般化規則のいずれかに基づき一般化した第1の一時結果を生成する。データベース管理システムが、当該第1の一時結果を集計した第1の集計結果を生成する。当該第1の集計結果が、開示規則情報が示す開示規則を満たす場合、データベース管理システムが、第1の列の属性値のそれぞれと第1の匿名加工規則情報に示される複数の一般化規則のいずれかとの対応関係を示す汎化情報を含んだ第1の匿名加工方法を生成する。データベース管理システムが、第1の命令または第2の命令に応じて、第1の匿名加工方法に基づき関係表を加工した結果である第1の匿名加工情報を生成し、第1の匿名加工情報の全部または一部である第1の匿名加工結果を応答する。
【発明の効果】
【0010】
関係表のうち第1の列のみを読み込んで匿名加工方法を生成し、当該匿名加工方法に基づき関係表を加工することで匿名加工結果を生成できる。このため、匿名加工処理を高速に行うことができる。
【図面の簡単な説明】
【0011】
【
図1】本発明の一実施形態に係るDBMSを実行するDBサーバを含むシステム全体の構成例を示す図である。
【
図2】
図1に示した命令実行部、匿名化加工方法およびデータベース管理の構成例を示す図である。
【
図5】関係表履歴および匿名加工方法履歴の構成例を示す図である。
【
図9】匿名加工のチェックのための命令と当該命令に対する応答の一例を示す図である。
【
図10】ユーザ指定共通開示規則と個別のユーザ指定開示規則とが競合する場合に行われる処理の一例を示す図である。
【
図12】DBMSが行う処理全体の流れの一例を示す図である。
【
図13】匿名加工方法の生成(
図12のS1233)の詳細の一例を示す図である。
【
図14】応答生成(
図12のS1234)の詳細の一例を示す図である。
【
図15】匿名加工方法の生成および応答の命令と、当該命令に対する応答との一例を示す図である。
【
図16】匿名加工処理の命令の一例と、当該命令に応じた匿名加工処理において生成される単純集計結果およびランレングス集計結果の一例とを示す図である。
【
図17】命令解釈(
図12のS1202)の詳細の一例を示す図である。
【
図18】匿名加工処理の命令の一例と、当該匿名加工処理のための匿名加工クエリの一例とを示す図である。
【
図19】
図18に例示の命令に応じた匿名加工処理における集計結果の生成の一例を示す図である。
【
図20】
図18に例示の命令に応じた匿名加工処理において更なる匿名化を行う列の選択の一例を示す図である。
【
図21】匿名加工処理の命令の一例と、当該匿名加工処理のための匿名加工クエリの一例とを示す図である。
【
図22】バランスツリーに従う列結合の一例を示す図である。
【
図23】レフトディープに従う列結合の一例を示す図である。
【
図24】匿名加工管理ビューの一例を示す図である。
【発明を実施するための形態】
【0012】
以下の説明では、データベース管理システムを「DBMS」と言い、DBMSを有するサーバを「DBサーバ」と言う。DBMSに対するクエリの発行元は、DBMSの外部のコンピュータプログラム(例えばアプリケーションプログラム)でよい。外部のコンピュータプログラムは、DBサーバ内で実行されるプログラムでもよいし、DBサーバに接続された装置(例えばクライアント)で実行されるプログラムでもよい。
【0013】
また、以下の説明では、「インターフェースユニット」は、一つ以上のインターフェースである。一つ以上のインターフェースは、一つ以上の同種のインターフェースデバイス(例えば一つ以上のNIC(Network Interface Card))であってもよいし二つ以上の異種のインターフェースデバイス(例えばNICとHBA(Host Bus Adapter))であってもよい。
【0014】
また、以下の説明では、「記憶デバイスユニット」は、一つ以上の記憶デバイスである。記憶デバイスは、揮発性メモリ(例えば、主記憶メモリ)でもよいし、不揮発性メモリ(例えば、フラッシュメモリまたはそれを有するSSD(Solid State Drive))でもよいし、ディスクデバイス(例えば、HDD(Hard Disk Drive))でもよい。記憶デバイスユニットでは、全て同種の記憶デバイスの存在でもよいし、異種の記憶デバイスの混在でもよい。
【0015】
また、以下の説明では、「プロセッサユニット」は、一つ以上のプロセッサである。少なくとも一つのプロセッサは、典型的には、CPU(Central Processing Unit)である。プロセッサは、処理の一部または全部を行うハードウェア回路を含んでもよい。
【0016】
また、以下の説明では、「kkk部」の表現にて機能を説明することがあるが、機能は、一つ以上のコンピュータプログラムがプロセッサユニットによって実行されることで実現されてもよいし、一つ以上のハードウェア回路(例えばFPGA(Field-Programmable Gate Array)またはASIC(Application Specific Integrated Circuit))によって実現されてもよい。プログラムがプロセッサユニットに実行されることによって機能が実現される場合、定められた処理が、適宜に記憶デバイスユニットおよび/またはインターフェースユニットを用いながら行われるため、機能はプロセッサユニットの少なくとも一部とされてもよい。機能を主語として説明された処理は、プロセッサユニットあるいはそのプロセッサユニットを有する装置が行う処理としてもよい。プログラムは、プログラムソースからインストールされてもよい。プログラムソースは、例えば、プログラム配布計算機または計算機が読み取り可能な記録媒体(例えば非一時的な記録媒体)であってもよい。各機能の説明は一例であり、複数の機能が1つの機能にまとめられたり、1つの機能が複数の機能に分割されたりしてもよい。
【0017】
また、以下の説明では、同種の要素を区別しないで説明する場合には、参照符号のうちの共通部分を使用し、同種の要素を区別する場合は、参照符号を使用することがある。例えば、記憶装置を区別しない場合には、「記憶装置130」と言い、記憶装置を区別する場合には、「記憶装置130A」、「記憶装置130B」のように言う。
【0018】
また、以下の説明では、データベースに含まれる関係表が有する各列について、「属性項目」は、当該列のラベル(例えば、列名)を意味し、「属性値」は、当該列の属性項目についての値を意味する。列毎に、一つの属性項目と、一つ以上の属性値が存在する。
【0019】
以下、図面を参照しながら、本発明の一実施形態を説明する。なお、以下の説明により本発明が限定されるものではない。
【0020】
図1は、本発明の一実施形態に係るDBMSを実行するDBサーバを含むシステム全体の構成例を示す図である。
図2は、
図1に示される一部の機能および情報の詳細を示す図である。
【0021】
DBサーバ100は、計算機システムの一例である。DBサーバ100は、例えば、パーソナルコンピュータ、ワークステーションまたはメインフレームであってよいし、これらの計算機において仮想化プログラムによって構成された仮想的な計算機であってよいし、クラウド環境(例えば、インターフェースデバイス、記憶デバイスおよびプロセッサといった複数の計算リソースを含んだ計算リソースプール)上で実現されてもよい。
【0022】
DBサーバ100に、図示しないネットワークを介してクライアント110が接続される。クライアント110は、クエリ発行元の一例であり、DBサーバ100に、データベースに対するクエリのような命令を発行する。ネットワークは、FC(Fibre Channel)ネットワーク、イーサネット(登録商標)、InfiniBandおよびLocal Area Networkのいずれでもよい。クライアント110のオペレータは、管理者であってもユーザであってもよい。
【0023】
また、例えば、DBサーバ100に、図示しないネットワークを介してストレージシステム120が接続される。ストレージシステム120は、記憶装置130Bを有している。ストレージシステム120は、DBサーバ100からI/O要求を受けた場合には、当該I/O要求に応答して、記憶装置130Bに対するデータのI/Oを行う。ストレージシステム120が接続されるネットワークは、クライアント110が接続されるネットワークと同じでも異なってもよい。
【0024】
DBサーバ100は、インターフェースユニット101、記憶装置130Aおよびそれらに接続されたプロセッサユニット102を有する。DBサーバ100は、キーボードやポインティングデバイス等の入力デバイス(図示しない)と液晶ディスプレイ等の出力デバイス(図示しない)を有してもよい。入力デバイスおよび出力デバイスは、プロセッサユニット102に接続されていてよい。入力デバイスと出力デバイスは一体であってもよい。
【0025】
インターフェースユニット101が、クライアント110およびストレージシステム120に図示しない一つ以上のネットワーク経由で接続される。インターフェースユニット101経由で、DBサーバ100は、ストレージシステム120およびクライアント110と通信することができる。
【0026】
記憶装置130Aおよび130Bのいずれも、一つ以上の記憶デバイスを有する。記憶装置130Aおよび150Bの構成は同一でも異なっていてもよい。同種の(例えばI/O性能が同等の)二つ以上の記憶デバイスで構成された記憶装置130があってもよいし、異種の(例えばI/O性能が異なる)二つ以上の記憶デバイスで構成された記憶装置130があってもよい。本実施形態では、記憶装置130Aにデータベース150が格納されるが、データベース150の一部または全部が、記憶装置130Bに格納されてもよい。
【0027】
記憶装置130Aが、プロセッサユニット102によって実行されるプログラムと、プログラムが使用するデータを記憶する。プログラムとして、例えば、DBMS140およびOS(Operating System)180がある。DBMS140が、クライアント110から命令を受け、その命令を実行する。その命令の実行において、DBMS140は、データベースからデータを読み込むために、または、データベースにデータを書き込むために、I/O(Input/Output)要求をOS180に発行する。OS180は、そのI/O要求を受け、そのI/O要求に基づくI/O要求を記憶装置130Aへ発行し、結果をDBMS140に返す。
【0028】
DBMS140は、データベース150、匿名加工規則151、開示規則152、一般化階層153、匿名加工方法154、匿名加工結果155およびデータベース管理156といった情報を管理する。
【0029】
データベース150に含まれる関係表を構成する列毎に、匿名加工規則151が存在する。各列について、匿名加工規則151は、当該列について複数の一般化規則を示す情報である。
【0030】
開示規則152は、開示規則を示す情報である。開示規則の典型例は、匿名加工がk-匿名化であればk値(k値下限)であり、匿名加工がl-多様化であればl値(l値下限)である。
【0031】
関係表を構成する各列について、当該列に対応した匿名加工規則151を基に、一般化階層153を生成することができる。一般化階層153は、属性値と属性値刻み(属性値範囲)間の関係、および、属性値刻み間の関係を示す情報である。一般化階層153は、例えば、属性値と属性値刻みをそれぞれノードとした木構造であるが、木構造以外の構造が採用されてよい。
【0032】
匿名加工方法154は、命令に応じて生成される情報である。匿名加工方法154は、どのデータ(例えばどの列)がどのように匿名加工されるかを示す情報である。具体的には、例えば、匿名加工方法154は、一つの匿名加工クエリ201、一つ以上の汎化表202(汎化情報の一例)および一つ以上の再帰汎化表203(再帰汎化情報の一例)のうち少なくとも一つを含む。本実施形態では、匿名加工方法154は、主に、一つの匿名加工クエリ201と、匿名加工列の数と同数の汎化表202とを含む。再帰汎化表203から汎化表202を生成することが可能である。従って、汎化表202が含まれるということは、汎化表202それ自体が含まれることであってもよいし、汎化表202に代えてまたは加えて再帰汎化表203が含まれることであってもよい。
【0033】
匿名加工結果155は、匿名加工方法154がデータベース150に含まれる関係表に適用された結果としての情報である。
【0034】
データベース管理156は、データベース150の統計と履歴に関する情報である。具体的には、例えば、データベース管理156は、データベース統計211、関係表履歴212および匿名加工方法履歴213を含む。データベース統計211は、データベース150の統計情報である。関係表履歴212は、関係表に対するデータベース操作(例えば、行の追加が生じる操作(INSERT)や行の削除が生じる操作(UPDATE、DELETE))の履歴を示す情報である。匿名加工方法履歴213は、匿名加工方法の生成の履歴を示す情報である。
【0035】
DBMS140は、命令受付部141、命令解釈部142、命令実行部143、命令応答部144およびデータベース管理部145を有する。
【0036】
命令受付部141は、データベースに対するクエリまたはその他の命令をクライアント110から受け付ける。クエリは、例えば、SQL(Structured Query Language)によって記述される。
【0037】
命令解釈部142は、命令受付部141が受け付けた命令を解釈する。
【0038】
命令実行部143は、命令解釈部142が解釈した命令を実行する。命令実行部143は、実行制御部170および匿名加工処理部160を含む。
【0039】
実行制御部170は、命令解釈部142が解釈した命令の実行を制御する。例えば、実行制御部170は、受け付けたクエリに基づいて当該クエリを実行するために必要なクエリプランを生成してよい。クエリプランは、例えば、一つ以上のデータベース演算子と、データベース演算子の実行順序の関係を含む情報でよい。クエリプランは、例えば、データベース演算子をノード、データベース演算子の実行順序の関係をエッジとする木構造で表されることがある。また、実行制御部170は、匿名加工処理が不要なクエリを、クエリプランに基づいて実行してよい。また、実行制御部170は、匿名加工処理が必要な場合、匿名加工処理部160に匿名加工処理を実行させてよい。
【0040】
匿名加工処理部160は、匿名加工処理を行う。匿名加工処理部160は、匿名加工方法生成部161、匿名加工方法適用部162および匿名加工チェック部163を含む。
【0041】
匿名加工方法生成部161は、匿名加工方法154を生成する。匿名加工方法適用部162は、匿名加工方法154を関係表に適用する。匿名加工チェック部163は、匿名加工の成否をチェックする。
【0042】
命令応答部144は、命令の実行結果としての情報を含んだ応答を返す。
【0043】
データベース管理部145は、データベース統計211、関係表履歴212および匿名加工方法履歴213を参照または更新する。
【0044】
以上が、本実施形態に係るシステム全体についての説明である。なお、DBMS140の構成は一例に過ぎない。例えば、ある構成要素は複数の構成要素に分割されていてもよく、複数の構成要素が1つの構成要素に統合されていてもよい。また、記憶装置130Aはメモリでよく、故に、データベース150は、インメモリデータベースでよい。また、DBMS140によりデータベース150から読み込まれたデータは、記憶装置130Aのメモリ(例えば、ワーク領域)に格納されてよい。
【0045】
本実施形態では、DBMS140は、
図3に例示する命令処理1と
図4に例示する命令処理2のいずれも行うことができる。
【0046】
【0047】
命令処理1は、クライアント110からの命令に応じて、匿名加工方法154の生成および適用を行い、匿名加工結果155の応答を行う処理である。つまり、命令処理1では、一つの命令に応じて、匿名加工方法154の生成と適用の両方が行われる。具体的には、以下の通りである。
【0048】
命令受付部141が、命令1(第1の命令の一例)をクライアント110から受け付ける。命令1は、関係表300を指定し、且つ、列Aを匿名化列とし複数の匿名加工規則151のうち列Aに対応する匿名加工規則151Aを指定した命令である。命令解釈部142が、命令1を解釈する。
【0049】
命令実行部143において、匿名加工方法生成部161が、命令1に応じて、関係表300のうち列Aを読み込み、匿名加工規則151Aと開示規則152とを基に、列Aの匿名加工方法154Aを生成する。その後、匿名加工方法適用部162が、命令1で指定されている関係表300(列A~列E)を読み込み、列Aについては匿名加工方法154Aを適用することで列Aを匿名加工する。匿名加工方法適用部162が、匿名加工された列Aと、非匿名加工化列B~列Eの全部または一部を含む匿名加工結果155Aを生成する。命令応答部144が、匿名加工結果155Aを、命令1に対する応答として、クライアント110に返す。
【0050】
なお、命令処理1では、匿名加工方法154Aの生成において、命令1で指定された関係表300の列A~列Eが予め読み込まれ、匿名加工方法154Aの適用において、列A~列Eの読み込みが不要とされてもよい。例えば、計算負荷が所定負荷未満でありメモリ空き容量が所定量以上である状況にあれば、列A~列Eが読み込まれ、一方、計算負荷が所定負荷以上であるまたはメモリ空き容量が所定量未満である状況にあれば、列Aのみが読み込まれてよい。
【0051】
【0052】
命令処理2は、クライアント110からの命令に応じて、匿名加工方法154の生成および応答を行い、クライアント110からの別の命令に応じて、匿名加工方法154の適用と匿名加工結果155の応答を行う処理である。つまり、命令処理2では、一つの命令に応じて匿名加工方法154の生成が行われるが匿名加工方法154の適用は行われず、別の命令に応じて匿名加工方法154の適用が行われる。具体的には、以下の通りである。
【0053】
上述した命令1に応じて、列Aの匿名加工方法154Aが生成され、命令応答部144が、命令1の応答として、匿名加工方法154Aをクライアント110に返す。
【0054】
その後、命令受付部141が、クライアント110から命令2(第2の命令の一例)を受け付ける。命令2は、関係表300を指定し、且つ、匿名加工方法154Aを有した命令である。命令解釈部142が、命令2を解釈する。
【0055】
命令実行部143において、匿名加工方法適用部162が、命令2で指定されている関係表300(列A~列E)を読み込み、列Aについては匿名加工方法154Aを適用することで、上述した匿名加工結果155Aを生成する。命令応答部144が、匿名加工結果155Aを、命令2に対する応答として、クライアント110に返す。
【0056】
命令処理2では、命令1に対する応答として、生成された匿名加工方法154Aを受け、当該匿名加工方法154Aを確認した後に、当該匿名加工方法154Aを適用することの命令2をクライアント110は送信することができる。
【0057】
命令処理2では、匿名加工方法154Aの生成後から命令2の受け付けまでに、関係表300の行が削除(UPDATEまたはDELETE)されている可能性がある。匿名加工方法154Aの生成後に行が削除されていると、匿名加工方法154Aの生成時点ではk値やl値といった開示規則が満たされていても、匿名加工方法154Aの適用時点では開示規則が満たされていない可能性がある。
【0058】
そこで、本実施形態では、命令処理2において、データベース管理部145が、関係表履歴212および匿名加工方法履歴213を参照して、匿名加工方法154Aの適用を許可するか否かを決定する。匿名加工方法154Aの適用が許可された場合に、匿名加工方法適用部162が、匿名加工方法154Aの適用を行う。
【0059】
図5は、関係表履歴212および匿名加工方法履歴213の構成例を示す図である。
【0060】
関係表履歴212は、例えば表形式の情報である。関係表履歴212は、関係表300毎に行を有する。各行が、関係表ID501、挿入日時502、削除日時503、参照権限504および出力権限505といった情報を保持する。なお、
図5の例では、日時は、年月日で表現されているが、年月日よりも細かい単位(例えば、年月日時分秒)で表現されてもよい。
【0061】
関係表ID501は、関係表300のIDである。挿入日時502は、関係表300に行が挿入された最新の日時を示す。削除日時503は、関係表300から行が削除された最新の日時を示す。参照権限504は、関係表300のうち参照が許可された列の列IDのリストである(“ALL”は、全ての列を意味する)。出力権限505は、関係表300のうち出力が許可された列の列IDのリストである(“ALL”は、全ての列を意味する)。挿入日時502および削除日時503は、例えば命令実行部143により更新される。
【0062】
匿名加工方法履歴213は、例えば表形式の情報である。匿名加工方法履歴213は、匿名加工方法154毎に行を有する。各行が、匿名加工方法ID511、関係表ID512、生成日時513および適用フラグ514といった情報を保持する。
【0063】
匿名加工方法ID511は、匿名加工方法154のIDである。関係表ID512は、匿名加工方法154が適用される関係表300のIDである。生成日時513は、匿名加工方法154が生成された日時を示す。適用フラグ514は、匿名加工方法154を関係表300に適用するか否か(“1”または“0”)を示す。匿名加工方法ID511、関係表ID512および生成日時513は、例えば匿名加工方法生成部161により更新される。適用フラグ514は、例えばデータベース管理部145により更新される。
【0064】
命令処理2では、データベース管理部145が、匿名加工方法154Aの生成日時513が関係表300の行の削除日時503より古い場合、適用フラグ514を“0”(適用禁止を意味する値)に更新する。匿名加工方法適用部162は、匿名加工方法154Aに対応した適用フラグ514が“1”であれば、匿名加工方法154Aの適用を行うが、匿名加工方法154Aに対応した適用フラグ514が“0”であれば、匿名加工方法154Aの適用を行わない。このように、命令処理2では、匿名加工方法154Aの生成日時513が関係表300の行の削除日時503より古い場合(つまり、匿名加工方法154Aの生成後に関係表300の行の削除が行われた場合)、データベース管理部145が、匿名加工方法154Aの適用を禁止する。これにより、開示規則を満たさない匿名加工結果が生成されてクライアント110に開示されることを防ぐことができる。
【0065】
以下、本実施形態を詳細に説明する。
【0066】
図6が、匿名加工処理の一例の詳細を示す図である。
図7が、一般化階層153の一例を示す図である。
図8が、匿名加工方法154の一例を示す図である。
図6~
図8を参照して、匿名加工処理の一例の詳細を説明する。
【0067】
匿名加工規則151(“Gen_age”という名の匿名加工規則151)と、関係表300(“patient_table”という名の関係表300)があるとする。匿名加工規則151は、複数の一般化規則“Level 0”(1歳刻み)、“Level 1”(5歳刻み)および“Level 2”(10歳刻み)を示しているとする。関係表300は、列“age”、列“ICD10”および列“weight”で構成されているとする。
【0068】
命令601は、第1の命令の一例であり、命令処理1で使用される命令の一例である。命令601は、列指定611、表指定612、処理内容指定613および匿名化列指定614を含む。
【0069】
列指定611は、匿名加工結果155の構成要素とされる列の指定である。
図6の例では、列指定611の値が“age”のため、指定されている列は列“age”のみである。
【0070】
表指定612は、読込み元とされる関係表300の指定である。
図6の例では、表指定612の値が“patient_table”のため、指定されている関係表300は関係表300である。
【0071】
処理内容指定613は、匿名加工処理の詳細の指定である。当該指定は、例えば、関数“ANONYMIZE”で構成されている。詳細の一例は、下記の通りである。
【0072】
処理内容指定613において、“対象指定-範囲指定-RECODING”が、匿名化列に対する一般化規則の適用の仕方の指定に該当する。
【0073】
「対象指定」は、匿名化の対象の指定である。「対象指定」の値は、例えば、“GLOBAL”または“LOCAL”である。“GLOBAL”は、匿名化列全体が匿名化の対象であることを意味する。“LOCAL”は、匿名化列のうちの一部だけが匿名化の対象であることを意味する。
【0074】
「範囲指定」は、匿名化の対象のうち同一の一般化規則の適用範囲の指定である。「範囲指定」の値は、例えば、“LEVEL”または“NODE”である。“LEVEL”は、同一の一般化規則の適用範囲が匿名化の対象全体であることを意味する。このため、例えば、匿名化の対象全体(例えば、匿名化列全体)に対して、同一の一般化規則“Level 1”が適用される。一方、“NODE”は、同一の一般化規則の適用範囲が所定の条件を満たすノードの下位ノード全体のみであることを意味する。このため、例えば、30代については一般化規則“Level 1”が適用され、40代については一般化規則“Level 2”が適用されることの指定が可能である。
【0075】
以上のことから、例えば、“GLOBAL-LEVEL-RECODING”は、匿名化列全体に対して同一の一般化規則を適用することを意味する。また、例えば、“GLOBAL-NODE-RECODING”は、匿名化列全体のうちの或る属性値範囲については或る一般化規則を適用し別の属性値範囲については別の一般化規則を適用し得ることを意味する。
【0076】
処理内容指定613において、“Gen_age”は、規則指定の値の一例である。「規則指定」とは、匿名加工規則151の指定である。
図6の例によれば、匿名加工規則151が指定されている。
【0077】
処理内容指定613において、“age = Gen_age.Level1”は、結合条件の値の一例である。ここで言う「結合条件」は、適用する一般化規則の指定を含み、匿名化列と、匿名化列をその一般化規則により匿名加工した結果としての列との結合を意味する。
図6の例によれば、列“age”と、匿名加工規則151が示す一般化規則“Level 1”により列“age”を匿名加工した結果としての列が結合されることを意味する。その結合の結果の一例が、
図8の汎化表202である。
【0078】
処理内容指定613は、図示しないオプショナルな指定を含んでよい。例えば、指定“DELETE(x)”がオプショナルな指定の一例でもよい。を含んでよい。“DELETE(x)”は、開示規則(例えば、k値またはl値)を満たすために匿名化列の内x%を削除することを許容することを意味する。
【0079】
匿名化列指定614は、匿名化の種類と匿名化列の指定である。“K-ANONYMITY”が、匿名化の種類としてk-匿名化であることを意味する値であり、当該値に対応付けられている“age”が、k-匿名化に従う匿名化の匿名化列が列“age”であることを意味する。
【0080】
命令601によれば、以下のような匿名化処理が行われる。
【0081】
匿名加工方法生成部161が、命令601に応じて、関係表300から列“age”(第1の列の一例)を読み込む。匿名加工方法生成部161が、列“age”の属性値のそれぞれを一般化規則“Level 1”に基づき一般化した一時結果651(第1の一時結果の一例)を生成する。一時結果651を構成する値は、列“age”の属性値が一般化規則“Level 1”で一般化された値である汎化値である。
【0082】
匿名加工方法生成部161が、一時結果651を集計した集計結果652X(第1の集計結果の一例)を生成する。集計結果652Xは、汎化値毎に、当該汎化値の合計を示す。
【0083】
匿名加工方法生成部161は、集計結果652Xが、開示規則152が示す開示規則を満たすか否かを判定する。例えば、開示規則においてk値=3の場合、符号653が示すように、汎化値“40-44”の件数がk値未満のため、k値が満たされていない。このため、判定結果NGが得られる。この場合、匿名加工方法生成部161は、処理内容指定613に応じて、一時結果651の全部または一部の汎化値の元になった属性値に対して、汎化度合のより大きい一般化規則を適用する。
図6の例によれば、“GLOBAL-NODE-RECODING”であるため、一部の属性値範囲“40-49”に属する各属性値に対して、汎化度合が一つ大きい一般化規則“Level 2”が適用される。このため、汎化値“40-44”と汎化値“45-49”に代えてそれぞれ汎化値“40-49”が得られる。結果として、集計結果652Yが得られる。集計結果652Yによれば、符号654が示すように、k値未満の件数が無い。
【0084】
匿名加工方法生成部161は、集計結果652Yが、開示規則152が示す開示規則を満たすか否かを判定する。上述したようにk値未満の件数が無いため、判定結果OKが得られる。この場合、匿名加工方法生成部161は、
図8に例示する匿名加工方法154、すなわち、少なくとも汎化表202を含む匿名加工方法154を生成する。
【0085】
匿名加工方法適用部162が、匿名加工方法154を、列指定611により指定された列“age”に適用することで、匿名加工情報660を得る。匿名加工情報660の全部または一部である匿名加工結果155が、命令601に対する応答として、命令応答部144により、クライアント110に返される。なお、クライアント110に返される匿名加工結果155は、
図6に例示のような詳細に代えて、匿名加工処理の結果のサマリ(例えば、集計結果652Y)でもよい。
【0086】
列“age”について、列“age”と匿名加工規則151を基に、
図7に例示する一般化階層153が得られる。一般化階層153は、汎化度合の最も小さい値を末端ノードとし汎化度合の最も大きい値を最上位ノードとした木構造で表現される。一般化階層153を表形式で表現することで、列“age”の再帰汎化表203が得られる。一般化階層153について、具体的には、例えば以下の通りである。
【0087】
取り得る複数の属性値がそれぞれ複数の末端ノードとされている。ここでは、取り得る複数の属性値に対してそれぞれ汎化度合の最も小さい一般化規則“Level 0”が適用されたことにより得られた複数の値がそれぞれ複数の末端ノードとされている。各末端ノードについて、当該ノードに対応した値に、汎化度合が一つ大きい一般化規則“Level 1”が適用されることで、汎化値が得られる。同一の汎化値が一つのノードとされ、当該ノードに、当該ノードに対応した汎化値の元になった値のノードが子ノードとされる。このようにして、汎化度合が最も大きい一般化規則“Level 2”についてもノードが得られる。各ノードにノードIDが割り振られる。図示の例では、“NID”が、ノードIDを意味し、“NID(x)”(xは0以上の整数)が、ノードID=xを意味する。
【0088】
以下の説明では、或るノードに対して、汎化度合がより大きい値に対応したノードを「上位ノード」と言い、特に、汎化度合が一つ大きい値に対応したノードを「親ノード」と言うことがある。一方、或るノードに対して、汎化度合がより小さい値に対応したノードを「下位ノード」と言い、特に、汎化度合が一つ小さい値に対応したノードを「子ノード」と言うことがある。図示の例では、ノードNID(130)の親ノードは、ノードNID(156)であり、ノードNID(130)の子ノードは、末端ノードNID(0)~NID(4)の各々である。
【0089】
図7を参照して、
図6に例示の“GLOBAL-NODE-RECODING”の一例を説明すると、次の通りである。すなわち、集計結果652Xによれば、汎化値“40-44”の件数が“1”のため、汎化値“40-44”(5歳刻み)に対応したノードが特定される。そして、当該ノードの親ノード、つまり、汎化値“40-49”(10歳刻み)に対応したノードが特定される。汎化値“40-49”に対応したノードの全ての下位ノードに対して、一般化規則“Level 2”が適用される。このため、汎化値“40-44”と汎化値“45-49”に代えてそれぞれ汎化値“40-49”が得られる。このようにして、範囲指定の値が“NODE”の場合には、或るノードをトップノードとした範囲について、汎化度合がより大きい一般化規則が適用される。
【0090】
図8に示すように、匿名加工方法154は、少なくとも汎化表202を含む。
【0091】
汎化表202(“Anony_age”という名の汎化表202)は、表形式の情報であり、列“Before”と列“After”で構成される。列“Before”は、匿名加工前の匿名化列(つまり、列“age”の複製)である。列“After”は、匿名加工後の匿名化列である。
図8に例示の列“After”によれば、一般化規則“Level 1”(5歳刻み)が適用された汎化値と、一般化規則“Level 2”(10歳刻み)が適用された汎化値とが混在している。開示規則を守るためである。なお、汎化表202は、匿名化列毎に存在する。
図8の例では、匿名化列は一つのため、汎化表202は一つであるが、匿名化列が二つ以上の場合、二つ以上の汎化表202が生成される。つまり、匿名化列と同数の汎化表202が生成される。
【0092】
匿名加工クエリ201は、
図4に示した命令2の一例、すなわち、匿名加工方法154を持った命令の一例でよい。本実施形態では、概念的に、匿名加工方法154が匿名加工クエリ201を含むが、匿名加工クエリ201は匿名加工方法154に含まれないでもよい。匿名加工クエリ201は、列指定811と、表指定812とを含む。
【0093】
列指定811は、匿名化列の指定と、当該匿名化列の匿名加工後の出力の指定とを含む。列指定811の一例である“Anony_age.After AS age”は、列“age”の匿名加工後の列“After”を出力することを意味する。
【0094】
表指定812は、汎化表202の指定と当該汎化表202を用いた匿名加工を行うことの指定とを含む。表指定812の一例である“patient_table JOIN Anony_age ON patient_table.age = Anony_age.Before”は、汎化表202を用いて列“age”を匿名加工すること、言い換えれば、列“Before”に対応した列“After”を得ることを意味する。
【0095】
再帰汎化表203(“RcAnony_age”という名の汎化表202)は、表形式の情報であり、汎化表202を生成するために使用される情報である。再帰汎化表203を木構造で表現した情報が、
図7に例示した一般化階層153である。再帰汎化表203を基に汎化表202を生成することができる。このため、匿名化列毎に再帰汎化表203が生成される。つまり、匿名化列と同数の再帰汎化表203が生成される。再帰汎化表203は、入力を列“age”(匿名化列の一例)とし出力を汎化表202としたいわゆる中間生成物に相当する。例えば、
図6に例示の命令601に応じて、汎化表202が生成される前に、再帰汎化表203が生成され、その後に、再帰汎化表203を用いて汎化表202が生成される。再帰汎化表203が、最終生成物として、命令元(例えば、クライアント110または管理者)に返されてもよい。命令元において、再帰汎化表203を参照することで、匿名加工前または匿名加工後のデータの分布(偏り)を把握することができる。
【0096】
再帰汎化表203は、例えば、列“NID”、“件数”、“情報量”、“子情報量総和”、“匿名加工フラグ”、“親NID”および“ラベル”で構成される。これらの列におけるそれぞれの値を、一つのノード(
図8の説明において「注目ノード」)を例に取り説明する。再帰汎化表203は、下記のようにノードの親子関係を表す情報を持ち、当該親子関係から汎化表202を生成することができる。また、再帰汎化表203における“ラベル”と“件数”との組が、上述した集計結果652に相当する。
【0097】
列“NID”における値は、注目ノードのノードIDである。
【0098】
列“件数”における値は、注目ノードに属する属性値(列“age”における属性値)の数である。
【0099】
列“情報量”における値は、注目ノードに属する属性値の数に従う情報量である。例えば、注目ノードについて、情報量は、情報量=(注目ノードの件数)×log2{(注目ノードの件数)/(列“age”の総行数)}、である。
【0100】
列“子情報量総和”における値は、注目ノードの全ての子ノードの情報量の総和である。注目ノードについて、子情報量総和-情報量=情報損失量である。本実施形態では、情報損失量が最小になるように匿名加工処理を行うことができる。
【0101】
列“匿名加工フラグ”における値は、匿名加工を行うか否かを意味する。“1”は、匿名加工することを意味し、“0”は、匿名加工しないことを意味する。
【0102】
列“親NID”における値は、注目ノードの親ノードのノードIDである。
【0103】
列“ラベル”における値は、注目ノードのラベル、例えば、注目ノードに対応した属性値または属性値範囲(言い換えれば、汎化値)である。この例では、ラベルは、列“age”における属性値または属性値範囲である。言い換えれば、ラベルは、列“age”に関して取得し得る属性値または汎化値の一例である。
【0104】
図8によれば、例えば次の処理が走る。すなわち、匿名加工化方法生成部161は、NID(0)に対応した匿名加工フラグが“1”のため、ノードNID(0)に対応したラベル(属性値)“0”の匿名加工を行うことを決定する。しかし、匿名加工化方法生成部161は、NID(0)の親NID(130)をNID(130)とした行によれば、匿名加工フラグが“0”のため、匿名加工を行わない。
【0105】
以上が、匿名加工処理及および匿名加工方法154の一例である。なお、
図6~
図8の例によれば、匿名加工列は“age”のみであるため、列“age”に対応した一つの汎化表202と、一つの再帰汎化表203が生成される。ここで、匿名加工列が“age”およびICD10”の二つの列であるとすると、一つの匿名加工クエリ201(列“age”および列“ICD10”の匿名加工処理のためのクエリ)と、二つの汎化表202(列“age”の汎化表、および、列“ICD10”の汎化表)と、三つの再帰汎化表203(列“age”の再帰汎化表、列“ICD10”の再帰汎化表、および、列“age”+列“ICD10”の再帰汎化表)が生成される。また、匿名加工列が“age”、“ICD10”および“weight”の三つの列であるとすると、一つの匿名加工クエリ201(列“age”、列“ICD10”および列“weight”の匿名加工処理のためのクエリ)と、三つの汎化表202(列“age”の汎化表、列“ICD10”の汎化表、および、列“weight”の汎化表)と、四つの再帰汎化表203(列“age”の再帰汎化表、列“ICD10”の再帰汎化表、列“weight”の再帰汎化表、および、列“age”+列“ICD10”+列“weight”の再帰汎化表)が生成される。このように、匿名化列の数がn(nは2以上の整数)の場合には、一つの匿名加工クエリ201と、nの汎化表202と、(n+1)の再帰汎化表203が生成される。故に、匿名化列が増えても、匿名化列の組合せ毎の匿名加工方法の生成は不要であり、結果として、匿名加工処理の高速化が期待できる。
【0106】
図9は、匿名加工のチェックのための命令と当該命令に対する応答の一例を示す図である。
【0107】
本実施形態では、匿名加工のチェックのための関数“CHECK ANONYMIZATION”が用意されている。当該関数を指定した命令901を命令受付部141が受け付け、当該命令901に応じて、関数“CHECK ANONYMIZATION”を匿名加工チェック部163が実行することができる。
【0108】
命令901の構成は、匿名加工の成否のチェック(事前実行)か匿名加工の実行かという点を除いて、
図6に例示の命令601と同様の構成でよい。すなわち、命令901は、列指定911、表指定912、処理内容指定913および匿名化列指定914を含む。
【0109】
図9に例示の匿名化列指定914によれば、匿名化列として、列“age”と列“ICD10”が指定されている。
【0110】
また、匿名化列指定914によれば、匿名化列毎にk値が指定されている。列“age”のk値は、“age(2)”のカッコ内の数値(つまりk値=2)である。列“ICD10”のk値は、“ICD10(5)”のカッコ内の数値(つまりk値=5)である。なお、匿名化列指定914で指定されている匿名化種類として、“K-ANONYMITY”に代えてまたは加えて“L-DIVERSITY”があれば、匿名化列毎にl値が指定されてよい。以下、混同を避けるために、匿名化列指定914において指定されたk値やl値のような開示規則を、「ユーザ指定開示規則」と言い、開示規則152が示す開示規則を、「デフォルト開示規則」またはこれまでのように単に「開示規則」と言うことがある。また、“ALL(3)”が示す値“3”のようなユーザ指定開示規則を、「ユーザ指定共通開示規則」と言うことがある。
【0111】
更に、匿名化列指定914によれば、指定された全匿名化列についての共通のk値が指定されている。共通のk値は、“ALL(3)”のカッコ内の数値(つまり共通のk値=3)である。なお、図示の例では、列“age”のk値“2”は共通のk値“3”未満であるが、この場合、所定のポリシーに従い、“ALL”または個別の匿名化列が優先されてよい(その一例を、後に
図10を参照して説明する)。
【0112】
匿名加工チェック部163は、命令901に従い匿名加工方法154を生成するための処理を行う。その処理において、匿名加工チェック部163は、途中得られる集計結果652などの情報を基に、デフォルト開示規則やユーザ指定開示規則などの匿名加工許可条件(匿名加工の実行が許可される条件)を満たしているか否かの成否判定を行う。成否判定の結果が真であれば、匿名加工チェック部163は、成功応答920を生成する。成否判定の結果が偽であれば、匿名加工チェック部163は、失敗応答930を生成する。成否判定の詳細は、
図14が示す処理と同じでよい。成否判定が、匿名加工チェック処理、すなわち、匿名加工許可条件を満たすように匿名加工方法154の生成が可能であるかの判定の処理でよい。
【0113】
成功応答920は、チェック結果レポート921と、匿名加工クエリ922とのうちの少なくとも一つを含んでよい。
【0114】
チェック結果レポート921は、成否判定において得られた統計情報を含んでよい。例えば、チェック結果レポート921は、“Success”(匿名加工の成功を意味する値)、“Records”(表指定912において指定されている関係表300の行数)、“K-ANONYMITY”(成否判定において得られたk値のうちの最小値)、“Loss Ratio (Record)”(成否判定において削除した行数の割合)、および、“Loss Ratio (Entropy)”(匿名加工方法154の生成において損失した情報量の割合)を含んでよい。例えば、“K-ANONYMITY”に対応した値“OK(4)”によれば、最小のk値“4”が、デフォルト開示規則の一例であるk値“3”(および、ユーザ指定共通開示規則であるk値“3”)以上であるので、デフォルト開示規則もユーザ指定開示規則も満たされていることになる。“Loss Ratio (Record)”に対応した値が、上述したオプショナルな指定“DELETE(x)”の値xと比較されてよい。
【0115】
匿名加工クエリ922は、チェック結果レポート921が表す結果を得るための匿名加工クエリである。この匿名加工クエリ922を、命令1の一例として命令受付部141が受け付け、命令処理1または命令処理2が行われることで、応答として、匿名加工結果155または匿名加工方法154が返る。
【0116】
失敗応答930は、チェック結果レポート931を含む。チェック結果レポート931は、“Failure”(匿名加工の失敗を意味する値)と、匿名加工許可条件のうち満たされなかった条件を示す情報とを含む。その条件の一例が、“K-ANONYMITY”である。チェック結果レポート931によれば、最小のk値“2”が、デフォルト開示規則の一例であるk値“3”(および、ユーザ指定共通開示規則であるk値“3”)未満のため、匿名加工に失敗したことがわかる。
【0117】
クライアント110は、命令901をDBMS140に送信し、成功応答920または失敗応答930を受けることで、匿名加工に成功するか否かを事前に確かめることができる。
【0118】
図10は、ユーザ指定共通開示規則と個別のユーザ指定開示規則とが競合する場合に行われる処理の一例を示す図である。
【0119】
図10が示す例では、匿名化列“age”に適用される一般化規則の汎化度合も、匿名化列“ICD10”に適用される一般化規則の汎化度合も、最低の汎化度合(言い換えれば、属性値それ自体が汎化値として採用される汎化度合)であるとする。そのような汎化度合の一般化規則が適用されたとしても、匿名化列“age”および“ICD10”のいずれについても、ユーザ指定開示規則が満たされている。
【0120】
しかし、匿名化列“age”のユーザ指定開示規則(age(2))は、上述したように、ユーザ指定共通開示規則(ALL(3))を満たさない。このため、列“age”については、age(2)を満たすがALL(3)を満たさない属性値(例えばk=2である“33”)が生じ得る。
【0121】
そこで、本実施形態では、匿名加工方法生成部161も匿名加工チェック部163も、次の処理を行う。すなわち、ALL(x)、列名(y)、および、Default(z)(デフォルト開示規則が示す値がz)であったとする。z≦x≦yが成り立たない場合、匿名加工方法生成部161も匿名加工チェック部163も、下記のようにxまたはyのk値を更新する。
図10の例によれば、(2)が採用されている。これにより、ユーザ指定共通開示規則と個別のユーザ指定開示規則との競合も、ユーザ指定共通開示規則とデフォルト開示規則との競合も解消することができる。
(1)「x < z」の場合、xにzを代入する。
(2)「y < x」の場合、yにxを代入する。
【0122】
【0123】
開示規則152が示す開示規則として、“K-ANONYMITY”(k-匿名性におけるk値)と“L-DIVERSITY”(l-多様性におけるl値)とのうちの少なくとも一つの他に、図示の通り、下記のうちの少なくとも一つを含んでよい。
・“権限受領者”:命令元の種類を意味する。例えば、“admin”は、管理者を意味する。“USER01”は、高信頼のユーザを意味する。“USER02”は、低信頼のユーザを意味する。ユーザの信頼度に応じて、k値またはl値が決定されたり、出力される情報が制限されたりする。
・“オブジェクト名”:参照可能な関係表を意味する。
・“SELECT”:参照許可を意味する。
・“OUTPUT TABLE”:出力許可を意味する。“100”や“90”といった値Pは、出力対象の行のP%を出力することを意味する。“on”や“off”といった値Qは、匿名加工結果のk値(またはl値)の保証の有無を意味する。“on”が保証を意味し、“off”が保証しないことを意味する。
・“CHECK ANONYMIZATION”:匿名加工の成否の事前チェックとチェック結果レポートの出力とを許可するか否かを意味する。“yes”が許可を意味し、“no”が禁止を意味する。
・“CREATE STATIC VIEW”:匿名加工方法154の生成を許可するか否かを意味する。“yes”が許可を意味し、“no”が禁止を意味する。
・“IMPORT ANONYMIZATION”:匿名加工方法154のインポート(適用)を許可するか否かを意味する。“yes”が許可を意味し、“no”が禁止を意味する。
・“EXPORT ANONYMIZATION”:匿名加工方法154のエクスポートを許可するか否かを意味する。“yes”が許可を意味し、“no”が禁止を意味する。
・“OUTPUT ANONYMIZATION”:匿名加工方法の出力を許可するか否かを意味する。例えば、匿名加工クエリ201の出力を許可するか否か、再帰汎化表203の出力を許可するか否か(例えば、階層情報のみを許可、“件数”や“情報量”といった特定の列のみを許可など)、および、汎化表202の出力を許可するか否かの指定が可能でよい。
【0124】
“SELECT”が、参照権限の一例である。“OUTPUT TABLE”および“OUTPUT ANONYMIZATION”が、出力権限の一例である。
【0125】
図11に例示の開示規則152によれば、例えば、命令受付部141が命令を受け付けた場合、命令解釈部142が、当該命令を解釈することで命令元の種類を特定し、命令実行部143が、特定された命令元種類に応じて、命令の実行や命令の結果としての応答とを制御してよい。このようにして、命令元の種類(例えば信頼度)に応じて、開示される情報を制限することができる。
【0126】
また、
図11の例によれば、出力権限の設定が可能である。すなわち、匿名加工方法154を生成するための参照は許可されても、匿名加工結果155の全てまたは一部の出力は禁止するといった出力権限設定が可能である。一例は、例えば下記である。
・匿名加工結果155の一部または全部の情報を削減することで、情報削減前の匿名加工結果155がk値(またはl値)を満たしていても情報削減後の匿名加工結果155がk値(またはl値)を満たさなくなるおそれがある。そこで、“OUTPUT TABLE”において、値Pと値Qの組合せにより、匿名加工結果155から(100-P)%の情報を削減した場合にk値(またはl値)の保証をするか否かが規定されている。これにより、匿名加工結果155から情報が削減された場合にk値(またはl値)が満たされなくなっても情報削減後の匿名加工結果155を出力するか否かを制御することができる。
・匿名加工方法154の一部または全部を出力禁止対象とすることで、開示される情報を制限できる。例えば、再帰汎化表203の一部または全部を出力禁止対象とすることで、後述の匿名加工管理ビューに表示される情報の内容や、匿名加工管理ビューを出力可能とするか否かを制御できる。
【0127】
図12は、DBMS140が行う処理全体の流れの一例を示す図である。
【0128】
命令受付部141が、命令をクライアント110から受け付ける(S1201)。
【0129】
命令解釈部142が、受け付けられた命令を解釈する(S1202)。
【0130】
命令実行部143が、解釈された命令を実行する(S1203)。具体的には、下記の通りである。
【0131】
命令実行部143が、前処理を行う(S1231)。命令の内容によって前処理はスキップされてもよい。「前処理」は、匿名加工処理の前処理であり、例えば、クエリプランの生成と、生成されたクエリプランに従う処理の実行でよい。前処理は、匿名加工処理を含まない。
【0132】
前処理の後、命令実行部143が、匿名加工方法154の生成の要否を判定する(S1232)。この判定では、受け付けられ解釈された命令の種類が判定される。例えば、命令が、“ANONYMIZE”や“CHECK ANONYMIZATION”といった命令のように匿名加工方法の生成が必要であることを意味する記述を含んでいる場合、S1232の判定結果が真となる。一方、命令が、匿名加工方法の生成が必要であることを意味する記述を含んでいない場合、S1232の判定結果が偽となる。
【0133】
S1232の判定結果が真の場合(S1232:Yes)、命令実行部143が、匿名加工方法154の生成を行う(S1233)。
【0134】
S1232の判定結果が偽の場合(S1232:No)、または、S1233の後、命令実行部143が、応答の生成を行う(S1234)。
【0135】
以上のような命令実行(S1203)の後、命令応答部144が、応答を返す(S1204)。
【0136】
なお、命令解釈(S1202)の結果によっては、エラー応答が生成されることがある。その場合には、命令実行(S1203)はスキップされ、命令応答部144が、生成されたエラー応答を返す。
【0137】
図13は、匿名加工方法154の生成(
図12のS1233)の詳細の一例を示す図である。
【0138】
匿名加工方法生成部161が、実行制御部170から呼び出される。匿名加工方法生成部161が、一つまたは複数の匿名化列から選択した匿名化列の一般化階層153から、当該匿名化列の再帰汎化表203を生成する(S1301)。S1301では、例えば、匿名化列に対応した複数の一般化規則(例えば、Level 0(1歳刻み)、Level 1(5歳刻み)およびLevel 2(10歳刻み))に応じて、一般化階層153における各ノードにNIDが付与される。S1301では、件数は再帰汎化表203に登録されない。
【0139】
匿名加工方法生成部161が、命令において指定されている関係表300から当該匿名化列を抽出し、匿名化列における属性値を基に、ノード毎に、件数をカウントしカウントされた件数を再帰汎化表203に登録する。
【0140】
匿名加工方法生成部161が、命令において指定されている一般化規則を用いて、当該匿名化列における属性値を匿名化し、当該属性値に対応したノードやその上位ノードについて、匿名加工フラグを更新する(S1303)。例えば、
図7を例に取れば、匿名化列“age”全体に対して適用された一般化規則がLevel 0の場合、末端ノードに対応した匿名加工フラグは“1”となるが、末端ノードの親ノード(例えば、Level 1に対応したノード)に対応した匿名加工フラグは“0”である。
【0141】
匿名加工方法生成部161が、S1303の結果に従う一時結果651から、集計結果652を生成する(S1304)。S1304では、少なくとも後述の単純集計結果652S(
図16参照)が生成される。
【0142】
匿名加工方法生成部161が、単純集計結果652Sから開示規則(k値またはl値)を満たすか否かを判定する(S1305)。
【0143】
S1305の判定結果が偽の場合(S1305:No)、匿名加工方法生成部161が、開示規則を満たさない行に関係する情報量を算出し、情報損失量が最少となるように匿名化を実施する(S1306)。例えば、複数の匿名化列にそれぞれ対応した複数の一時結果651の組合せとしての一時結果に基づく後述の結合単純集計結果があるとする。複数の匿名化列の一例として、列“age”と列“ICD10”があるとする。結合単純集計結果について、k値(またはl値)が満たされていない場合、列“age”と列“ICD10”のいずれかに対してより汎化度合の大きい一般化規則を適用することで更なる匿名化が行われる。ここで、“age”を匿名化すると情報損失量は“10”であるが、“ICD10”を匿名化すると情報損失量は“100”であるとする。この場合、“age”を匿名化することが実施される。“age”の方が情報損失量が少ないからである。
【0144】
匿名加工方法生成部161が、このような匿名化を実施できたか否かを判定する(S1307)。例えば、汎化度合のより大きい一般化規則が無い場合には、S1307の判定結果は偽(解なし)となる。
【0145】
S1307の判定結果が偽の場合(S1307:No)、匿名加工方法生成部161が、匿名加工方法の生成失敗を設定する(S1308)。この場合、
図14のS1401を経て、命令応答部144により、匿名加工方法の生成失敗を意味する応答が、クライアント110に返る。
【0146】
S1307の判定結果が真の場合(S1307:Yes)、S1306後の情報についてS1305が行われる。
【0147】
S1305の判定結果が真の場合(S1305:Yes)、匿名加工方法生成部161が、全ての匿名化列を検査したか(S1301以降を行ったか)を判定する(S1309)。S1309の判定結果が偽の場合(S1309:No)、別の匿名化列についてS1301が行われる。このようにして、匿名化列毎に、当該匿名化列の一般化階層153から再帰汎化表203が生成される。また、S1304では、複数の匿名化列を組み合わせた一時結果651が生成される。
【0148】
S1309の判定結果が真の場合(S1309:Yes)、匿名加工方法生成部161が、生成済の再帰汎化表203から匿名加工クエリ201または汎化表202を生成する。
【0149】
図14は、応答生成(
図12のS1234)の詳細の一例を示す図である。
【0150】
実行制御部170は、匿名加工処理の要否を判定する(S1401)。例えば、匿名加工方法154が生成済の場合、或いは、命令が匿名加工方法154を持っており当該匿名加工方法154の適用が必要な場合、S1401の判定結果が真となる。一方、例えば、命令が、匿名加工処理を不要とするクエリの場合、あるいは、命令解釈(
図12のS1202)においてエラー応答が生成されている場合、S1401の判定結果が偽となる。S1401の判定結果が偽の場合(S1401:No)、応答生成が終了する。この場合、
図12のS1204において、命令応答部144が返す応答は、匿名加工処理を不要とするクエリの実行結果、あるいは、命令解釈において生成されたエラー応答である。
【0151】
S1401の判定結果が真の場合(S1401:Yes)、実行制御部170は、匿名加工方法154を応答するか否かを判定する(S1402)。例えば、命令が、命令処理2(
図4参照)における命令1である場合や、後に
図15を参照して説明する命令1501である場合には、S1402の判定結果が真となる。
【0152】
S1402の判定結果が真の場合(S1402:Yes)、実行制御部170が匿名加工方法生成部161を呼び出し、匿名加工方法生成部161が、S1233において生成した匿名加工方法154を応答として設定する(S1403)。
【0153】
S1402の判定結果が偽の場合(S1402:No)、実行制御部170は、匿名加工結果155を応答するか否かを判定する(S1404)。例えば、命令が、命令処理1(
図3参照)における命令1である場合や、後に
図16を参照して説明する命令1601である場合には、S1404の判定結果が真となる。
【0154】
S1404の判定結果が真の場合(S1404:Yes)、実行制御部170が匿名加工方法適用部162を呼び出し、匿名加工方法適用部162が、ランレングス集計結果が存在するか否かを判定する(S1405)。
【0155】
S1405の判定結果が真の場合(S1405:Yes)、匿名加工方法適用部162が、ランレングス集計結果を基に匿名加工情報660を生成する(S1406)。
【0156】
S1405の判定結果が偽の場合(S1405:No)、匿名加工方法適用部162が、匿名加工方法を基に匿名加工情報660を生成する(S1407)。
【0157】
S1406または1407の後、匿名加工方法適用部162が、開示規則152における“OUTPUT TABLE”に基づき、生成された匿名加工情報660から匿名加工結果155を生成する(S1408)。匿名加工方法適用部162が、生成された匿名加工結果155を応答として設定する(S1409)。
【0158】
以上の応答生成において生成された応答は、匿名加工方法154および匿名加工結果155のうちの少なくとも一つを含む。命令元が、開示規則152が示す出力権限において匿名加工方法154および/または匿名加工結果155に制限がある命令元種類に該当する場合、S1403および/またはS1408において、応答とされる情報が調整されてよい。
【0159】
以上の応答生成では、下記のうちの少なくとも一つが該当してよい。
・“DELETE(x)”がある場合、匿名加工方法154が関係表300に適用されることで得られた匿名加工結果155から、k値未満の行を除外する必要がある。また、開示規則152において“OUTPUT TABLE”の値が(y, on)の場合(“y”は上記P値の一例、“on”は上記Q値の一例)、(100-y)%の行を除外した匿名加工結果155がk値を下回らないように調整する必要がある。この場合、集計がされないと除外対象が定まらない。
・一方、命令に“DELETE(x)”が無く、開示規則152において“OUTPUT TABLE”の値が(y, off)の場合、匿名加工結果155から(100-y)%の情報が除外される。これは、匿名加工方法154の適用から匿名加工結果155の応答までをストリーム(一時保持不要)で実行可能であることを示す。この場合、メモリ消費量や計算量を削減でき、以って、クライアント110への応答時間を短縮することが可能となる。なお、命令に匿名加工方法154の応答が必要であることを意味する記述があることに代えてまたは加えて、“OUTPUT TABLE”の値が(y, off)であることが、匿名加工方法154の応答が不要であることを意味してよい。
【0160】
図15は、匿名加工方法154の生成および応答の命令と、当該命令に対する応答との一例を示す図である。
【0161】
命令1501が、匿名加工方法154の生成および応答の命令の一例である。命令1501は、
図6に示した命令601と同様、列指定1511、表指定1512、処理内容指定1513および匿名化列指定1514を含む。
【0162】
また、命令1501は、匿名加工方法154の生成および応答の命令であることを意味する記述として“CREATE STATIC VIEW”という関数の実行を意味する記述を含む。この記述のうちの“STATIC”は、現時点(命令を受け付けた時点)での関係表300(表指定1512で指定された関係表300)に基づく匿名加工方法154の生成であることを意味する。匿名加工方法154の生成後に当該関係表300から行が削除されると、匿名加工方法154の生成時にはk値(またはl値)を満たしていても、行の削除の後は当該k値(またはl値)が満たされなくなるおそれがあるためである。
【0163】
命令1501に応じて匿名加工方法154を生成できた場合、応答1502Sが返る。応答1502は、生成成功を意味する記述“SUCESS”を有し、生成された匿名加工方法154、具体的には、例えば少なくとも汎化表202が関連付けられている。つまり、この応答1502の送信先に、生成された匿名加工方法154が送信されることとなる。
【0164】
命令1501に応じて匿名加工方法154を生成できなかった場合、応答1502Fが返る。応答1502Fは、生成失敗を意味する記述“FAILURE”を有する。
【0165】
本実施形態において、匿名加工方法154の応答とは、下記のうちのいずれでもよい。
・応答が、匿名加工方法154それ自体を含む。この場合、後述の匿名加工管理ビュー(
図24参照)は、当該応答を受信するクライアント110のような端末において実行されるコンピュータプログラム(例えば、DBMS140と通信するアプリケーションプログラム)、または、当該プログラムとDBMS140との連携によって、表示されてよい。また、この場合、命令2(
図4参照)は、匿名加工方法154それ自体を有することになる。
・匿名加工方法154それ自体は、DBMS140がアクセス可能な記憶装置130に格納され、応答は、当該匿名加工方法154を特定するための情報(例えば、匿名加工方法154に付与されたID)を含む。この場合、後述の匿名加工管理ビューの表示のための命令を命令受付部141が受け付け、命令実行部143が、当該命令に応じて匿名加工管理ビューを命令元に提供してよい。また、この場合、命令2(
図4参照)は、匿名加工方法154を特定するための情報を有することになる。
【0166】
図16は、匿名加工処理の命令の一例と、当該命令に応じた匿名加工処理において生成される単純集計結果およびランレングス集計結果の一例とを示す図である。
【0167】
命令1601が、匿名加工処理の命令の一例である。命令1601は、
図6に示した命令601と同様、列指定1611、表指定1612、処理内容指定1613および匿名化列指定1614を含む。
【0168】
列指定1611と匿名化列指定1614との比較によれば、匿名加工列が列“age”であり非匿名加工列が列“ICD10”であることがわかる。列指定1611において指定されている列“age”および列“ICD10”のうち匿名化列指定1614において指定されている列が列“age”のみであるためである。
【0169】
命令1601の実行において生成される集計結果652として、単純集計結果652Sとランレングス集計結果652Rとがある。
【0170】
単純集計結果652Sは、汎化値毎の件数を示す情報である。単純集計結果652Sによれば、単純に匿名化列“age”を集計し汎化値毎に件数をカウントしているため、列“age”での行の順序関係は崩れる。このため、他の列(匿名化列および非匿名化列のいずれでもよい)と結合することができなくなる。結果として、再度、匿名化列や非匿名化列を全件スキャンする必要がある。しかし、後述のランレングス集計結果652Rからは、k値を満たしているか否かの判断が不可能なため、単純集計結果652Sの生成は必要である。
【0171】
一方、ランレングス集計結果652Rは、図示のように、匿名化列“age”の行の順序を維持した集計の結果としての情報(ランレングス圧縮的な情報)である。このため、他の列との結合が可能である。すなわち、匿名加工後、非匿名化列のみをスキャンするだけで、匿名加工結果155を生成することができる。また、ランレングス集計結果652Rが生成されれば、匿名化列をソートすることで圧縮効果を高めることができる。しかし、列指向では、ソートを行うと結合処理の負荷が増大するので、行指向のみでソートを用いることが好ましい。
【0172】
図17は、命令解釈(
図12のS1202)の詳細の一例を示す図である。
【0173】
命令解釈部142が、命令が匿名加工処理を必要とする命令であるか否かを判定する(S1701)。S1701の判定結果が偽の場合(S1701:No)、命令解釈が終了する。
【0174】
S1701の判定結果が真の場合(S1701:Yes)、命令解釈部142が、命令で指定されている関係表が行指向データベースであるか否かを判定する(S1702)。S1702の判定結果が真の場合(S1702:Yes)、命令解釈部142が、命令に、“ORDER BY”を追加する(S1703)。行指向では、1行単位で抽出するため列結合が発生せず、このため、ソート可能であり、故に、ランレングス集計においてランレングス圧縮効果を高めることができる。なお、“ORDER BY”の対象(つまり、ソートの対象)は、匿名化列とされる。命令が、例えば
図16に例示の命令1601の場合、命令1601に、匿名化列“age”を対象とした“ORDER BY”1750が追加される。また、複数の匿名化列がある場合、圧縮効率を高めるため、カーディナリティが低い列から順にソートすることが望ましい。例えば、匿名化列として、列“age”と列“sex”がある場合、性別“sex”が先にソートされる。
【0175】
S1702の判定結果が偽の場合(S1702:No)、または、S1703の後、命令解釈部142が、開示規則152を参照し、命令を実行可能か否か判定する(S1704)。S1704の判定により、出力ができないにも関わらず匿名加工処理が走ることを防ぐことができる。例えば、命令元について、開示規則152において、“SELECT”の値が“no”となっていれば、関係表300を参照できず、故に、匿名加工方法154および匿名加工結果155を生成できないので、S1704の判定結果が偽となる。
【0176】
S1704の判定結果が偽の場合(S1704:No)、命令解釈部142が、命令の実行不可を意味するエラー応答を生成する(S1705)。この場合、
図12のS1204において、命令応答部144により、当該エラー応答が返る。
【0177】
図18は、匿名加工処理の命令の一例と、当該匿名加工処理のための匿名加工クエリの一例とを示す図である。
【0178】
命令1801が、匿名加工処理の命令の一例である。命令1801は、
図6に示した命令601と同様、列指定1811、表指定1812、処理内容指定1813および匿名化列指定1814を含む。
【0179】
列指定1811と匿名化列指定1814との比較によれば、匿名加工列が列“age”および“ICD10”であり非匿名加工列が無いことがわかる。列指定1811でも匿名化列指定1814でも列“age”および“ICD10”が指定されているためである。
【0180】
また、処理内容指定1813において、“(ICD10 = SUBSTR(ICD10, 1, 3) AND SUBSTR(ICD10, 1, 3) = SUBSTR(ICD10, 1, 2))”は、列“ICD”に対応した一般化階層153の記述である。この記述が表す一般化階層153に従う木構造は、
図18に例示の通りである。すなわち、列“ICD10”の属性値(例えば“C15.2”)が末端ノードであり、属性値の上位3桁(例えば“C15”)が末端ノードの親ノードであり、属性値の上位2桁(例えば“C1”)が更なる親ノードである。このように、一般化階層153の表現形式は限定されない。
【0181】
命令1801に応じた匿名加工処理のための匿名加工クエリの一例が、匿名加工クエリ201Xである。
【0182】
図19は、命令1801に応じた匿名加工処理における集計結果652の生成の一例を示す図である。
【0183】
匿名加工方法生成部161が、関係表300のうち、匿名化列“age”および列“ICD10”の各々について、ランレングス集計結果652Rの生成(S1901)、単純集計結果652Sの生成(S1902)、および、k値(またはl値)を満たしているか否かの判定(S1903)を行う。具体的には、以下の通りである。なお、k値=2とする。
・匿名加工方法生成部161が、関係表300のうち匿名化列“age”からランレングス集計結果652R1を生成し(S1901A)、ランレングス集計結果652R1から単純集計結果652S1を生成する(S1902A)。匿名加工方法生成部161が、単純集計結果652S1から、全ての行(汎化値)がk値を満たしているか否かを判定する。図示の例によれば、いずれの行についても件数が2(k値)以上なので、k値が満たされている。
・匿名加工方法生成部161が、関係表300のうち匿名化列“ICD10”からランレングス集計結果652R2を生成し(S1901B)、ランレングス集計結果652R2から単純集計結果652S2を生成する(S1902B)。匿名加工方法生成部161が、単純集計結果652S2から、全ての行がk値を満たしているか否かを判定する。図示の例によれば、いずれの行についても件数が2(k値)以上なので、k値が満たされている。
【0184】
個々の匿名化列についてk値が満たされていれば、匿名加工方法生成部161が、ランレングス集計結果652R1および652R2を結合した結合ランレングス集計結果652R3を生成する(S1904)。匿名加工方法生成部161が、結合ランレングス集計結果652R3から結合単純集計結果652S3を生成し(S1905)、結合単純集計結果652S3から、全ての行がk値を満たしているか否かを判定する(S1906)。図示の例によれば、いずれの行についても件数が2(k値)以上なので、k値が満たされている。
【0185】
匿名加工方法適用部162が、そのような結合単純集計結果652S3に基づく匿名加工方法154を関係表300の匿名化列“age”および“ICD10”に適用することで、
図19に例示の匿名加工情報660Xを得る。匿名加工情報660Xは、匿名加工後の列“age”と匿名加工後の列“ICD10”の組合せである。
【0186】
図20は、命令1801に応じた匿名加工処理において更なる匿名化を行う列の選択の一例を示す図である。
【0187】
図19を参照した説明において、もし結合単純集計結果652S3のいずれかの行がk値を満たしていない場合、k値を満たすようにするためには、列“age”と列“ICD10”の少なくともいずれかの匿名化が必要である。この場合には、
図13のS1306で説明したように、情報損失量の少ない方の列が匿名加工される。具体的には、例えば、下記の通りである。
(2000-1)匿名加工方法生成部161が、匿名加工が必要な行(件数がk値未満)を、結合単純集計結果652S3から検索する。
(2000-2)匿名加工方法生成部161が、列“age”に対応した再帰汎化表203P(“RcAnony_age”という名の再帰汎化表203)、および、列“ICD10”に対応した再帰汎化表203Q(“RcAnony_ICD10”という名の再帰汎化表203)を参照する。(なお、
図20では、列“レベル”の図示が省略されている。)
(2000-3)匿名加工方法生成部161が、列“age”について情報損失量を計算する。具体的には、匿名加工方法生成部161が、(2000-1)で見つかった行の属性値が属するノードの親ノード(NID=130)について、子情報量総和“131.52”-情報量“119.84”=情報損失量“11.68”を算出する。
(2000-4)匿名加工方法生成部161が、列“ICD10”について情報損失量を計算する。具体的には、匿名加工方法生成部161が、(2000-1)で見つかった行の属性値が属するノードの親ノード(NID=10987)について、子情報量総和“147.94”-情報量“135.45”=情報損失量“12.49”を算出する。
(2000-5)匿名加工方法生成部161が、列“age”について情報損失量“11.68”と列“ICD10”について情報損失量“12.49”を比較する。列“age”について情報損失量が少ないため、匿名加工方法生成部161が、列“age”について情報損失量“11.68”に対応した親ノード(NID=130)の全下位ノード(図示の例では、NID=0~NID=4)について、匿名加工フラグを“0”→“1”に変更する。
【0188】
なお、(2000-1)で見つかった行の属性値が属するノードについて匿名加工フラグが立っている場合、当該ノードに対応した匿名加工フラグを立てる処理はスキップされる。
【0189】
図21は、匿名加工処理の命令の一例と、当該匿名加工処理のための匿名加工クエリの一例とを示す図である。
【0190】
命令2101が、匿名加工処理の命令の一例である。命令2101は、
図6に示した命令601と同様、列指定2111、表指定2112、処理内容指定2113および匿名化列指定2114を含む。
【0191】
列指定2111と匿名化列指定2114との比較によれば、匿名加工列が列“age”、“sex”、“ICD10”および“weight”であり非匿名加工列が無いことがわかる。列指定2111でも匿名化列指定2114でも列“age”、“sex”、“ICD10”および“weight”が指定されているためである。
【0192】
命令2101に応じた匿名加工処理のための匿名加工クエリの一例が、匿名加工クエリ201Yである。
【0193】
なお、命令2101に応じた匿名加工処理において、複数の列の結合(例えば、ランレングス集計結果の結合)が生じる。本実施形態では、複数の列の結合として、バランスツリーとレフトディープのいずれかが採用され、複数の列の計算順序が決定される。バランスツリーとレフトディープのいずれを採用するかは、命令2101または匿名加工クエリ201Yにおいて指定(明示)されていてもよいし、データベース管理156(
図1参照)において予め定義されていてもよいし、計算負荷状況とメモリ空き状況とを基に匿名加工方法生成部161により自動的に選択されてもよい(例えば、計算負荷が低くメモリの空きが大きい状況にあればバランスツリーが選択され、計算負荷が高くメモリの空きが少ない状況にあればレフトディープが選択されてよい)。
【0194】
図22は、バランスツリーに従う列結合の一例を示す図である。
【0195】
バランスツリーに従う列結合では、ランダムアプローチ、カーディナリティアプローチおよび実行時間アプローチのいずれかが採用される。
【0196】
ランダムアプローチでは、匿名加工方法生成部161は、結合する匿名化列をランダムに選択し、選択した匿名化列を結合する。
【0197】
ここで、結合される匿名化列の各々のコストによっては、値の組合せの数が多くなり、k値(またはl値)の計算量が多くなることがある。
【0198】
そこで、コストベースアプローチを採用することが好ましい。コストベースアプローチの種類として、カーディナリティアプローチ2210と実行時間アプローチ2220がある。
【0199】
カーディナリティアプローチ2210では、データベース統計211から、各列のカーディナリティが特定される。データベース統計211は、関係表300における列毎に、カーディナリティを表す数値を含んでいる。匿名加工方法生成部161は、データベース統計211を参照することで、各匿名化列のカーディナリティを特定する。匿名加工方法生成部161は、一つ以上の列結合の各々を、カーディナリティが高い匿名化列とカーディナリティが低い匿名化列との結合とする。その際、匿名化列のカーディナリティが高いほど、当該匿名化列に結合される匿名化列のカーディナリティは低い。これにより、負荷分散(均衡)に伴う並列処理の高速化を実現できる。
【0200】
実行時間アプローチ2220では、匿名化列の匿名加工に要した実行時間が算出される。実行時間が長い列程、実行時間が短い列が結合対象とされる。
【0201】
図23は、レフトディープに従う列結合の一例を示す図である。
【0202】
レフトディープに従う列結合では、ランダムアプローチおよびカーディナリティアプローチのいずれかが採用される。上述した理由から、カーディナリティアプローチを採用することが好ましい。
【0203】
レフトディープのカーディナリティアプローチ2310では、カーディナリティが低いことがランレングス集計結果652Rに有効である。カーディナリティが低いと、行数が少なる確率が高く、結果として、結合処理の際の探索範囲が小さく、メモリ消費量が小さく済むからである。匿名加工方法生成部161は、データベース統計211を参照することで、各匿名化列のカーディナリティを特定する。匿名加工方法生成部161は、カーディナリティが低い順に、匿名化列を選択し、選択した匿名化列を結合する。つまり、カーディナリティが低い順に、列の匿名加工処理が実施される。
【0204】
図24は、匿名加工管理ビューの一例を示す図である。
【0205】
匿名加工管理ビュー2400は、例えばGUI(Graphical User Interface)であり、再帰汎化表203の可視化である。例えば、匿名加工管理ビュー2400は、命令に対して応答された匿名加工方法154に再帰汎化表203が含まれている場合に、当該再帰汎化表203に基づき表示される。
【0206】
図24に例示の匿名加工管理ビュー2400は、匿名加工列“age”に対応した再帰汎化表203に基づくビューである。匿名加工管理ビュー2400は、ノード間の関係を木構造で表している。具体的には、例えば、匿名加工管理ビュー2400は、再帰汎化ツリー2450を表示する。再帰汎化ツリー2450において、各ブロック2401は、ノードに対応する。ブロック2401は、例えば、列方向に並んだ複数のセルを有する。複数のセルは、複数の項目“ラベル”、“NID”、“件数”および“フラグ”(匿名加工フラグ)にそれぞれ対応している。セル内の値は、当該セルに対応した項目についての値である。
【0207】
再帰汎化ツリー2450において、黒色で表示されたブロック2401Bは、匿名加工された属性値(ラベル)が属するノードに対応したブロックである。白色で表示されたブロック2401Tは、匿名加工の結果としてk値(またはl値)を満たす汎化値(ラベル)が属するノードに対応したブロックである。灰色で表示されたブロック2401Aは、ブロック2401Tに対応したノードの上位ノードに対応したブロック、または、当該上位ノードの子ノードに対応したブロックである。
【0208】
図24に例示の匿名加工管理ビュー2400は、開示規則152の“OUTPUT ANONYMIZATION”において再帰汎化表203全体の出力が許可されているが故に再帰汎化表203全体が匿名加工方法154に含まれている場合のビューの一例である。“OUTPUT ANONYMIZATION”において再帰汎化表203の一部の出力が禁止されている場合、匿名加工方法154に含まれる再帰汎化表203は一部の情報を持っていないため、再帰汎化ツリー2450の表示は、
図24に例示の表示と異なる。例えば、匿名加工された属性値に対応したノードの出力が禁止されている場合、ブロック2401Bは存在しない。また、例えば、“件数”の出力が禁止されている場合、各ブロック2401において、“件数”に対応したセルは存在しない。
【0209】
匿名加工管理ビュー2400により、管理者やユーザにとって、再帰汎化表203の構成を理解し易い。
【0210】
以上、一実施形態を説明したが、これは本発明の説明のための例示であって、本発明の範囲をこの実施形態にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実施することが可能である。
【0211】
上述の説明を、以下のように総括することができる。なお、以下の総括は、上述の説明に無い事項を含んでいてもよい。
【符号の説明】
【0212】
100…DBサーバ