我々が扱っている知識は木構造であることが多い
-RDBに木構造のデータを格納する際は表変換を行う必要があり、データ構造が煩雑になりやすい
-分散木構造データベースJungleの開発を行っている
+我々が扱っている知識は木構造であることが多い。
+RDBに木構造のデータを格納する際は表変換を行う必要があり、データ構造が煩雑になりやすい。
+木構造のデータを直接格納できるデータベースJungleの開発を行っている。
Jungle上に組織の許認可管理アプリケーションmaTrixを実装する。
-データベースの表現力、機能の十分性、実用的な性能実証実験を行う
+データベースの表現力、機能の十分性、実用的な性能実証実験を行う。
+新しい木構造を作成することでデータの編集を行う
-- -
ロックをかける必要があるのはルートノードを入れ替えるときのみ
- + +JungleのTreeはNodeの集合で表現されている。
+ +Nodeは自身の子どもと、属性名と属性値の組でデータを保持しています。
+一般的なDBと比べると、NodeがCOLUMN、TreeがTABLEに相当します。
+新しい木構造を作成することでデータの編集を行う。
+ +書き込み時に、ロックをかける必要があるのはルートノードを入れ替えるときのみ。
+データの上書きが無いため、読み込み中にロックをかける必要がない。
+ +人、組織、役割等の情報を木構造として保持しており、Idでお互いに参照し組織構造を表現している
-許認可の判断は、ポリシーファイルに記述されたルールにそって行われる
-ポリシーファイルは組織構造を参照するため木に対する参照機能が必要になる
+人、組織、役割等の情報を木構造として保持しており、Idでお互いに参照し組織構造を表現している。
+許認可の判断は、アクセスルールが記述されたポリシーファイルにそって行われる。
+以下のXMLは、maTrixの人物Treeの一部である。
-+
この図は、maTrixの人物Treeの一部をJungleに格納したものである。
+この様にJungleでは木構造のデータを読み込む。
+maTrixを用いた許認可は、組織構造だけでは判断されない
-アクセス可能な時間等のアクセスルールは組織構造では表現できないからである。
-そこでアクセスルールを定義できるXACML形式で記述したポリシーファイルを用いて許認可管理を行う
-XACMLは、subject(誰が)、Resource(何を)、Action(どうするか)を記述する。
- -以下に許認可管理の流れを示す
-maTrixの組織構造は純粋な木構造ではない
+Idを用いて木同士が相互参照を行うことで組織構造を表現している。
+ +この図だと、人物Treeと組織Treeがお互い参照を行い組織運用モデルを表現している。
+木同士の参照はIdの検索を用いて表現する
-- -
例えば人物Treeと組織Treeがお互い参照を行い組織運用モデルを表現している。
+ +maTrixを用いた許認可は、組織構造だけでは判断されない。
+アクセス可能な時間等のルールは組織構造では表現できないからである。
+リソース管理を allow deny
+そこでアクセスルールを記述したポリシーファイルを用いて許認可管理を行う。
+ポリシーファイルには、subject(誰が)、Resource(何に対して)、Action(何が出来るか)を記述する。
+以下に許認可管理の流れを示す
+Treeの検索は、Traverserを使用する
+ +Treeの検索は、Jungleが提供しているTraverserを使用する。
TraverserはTreeのNodeを走破するクラスです。
TreeからgetTraverserで取得可能。
第一引数で 検索を行う際にIndexを使用するかどうかを選択できる。
- +Traverser.findでTreeに対して検索を行う。
第一引数には、探索の条件を記述する関数boolean condition(TreeNode)を定義したQueryを受け取る。
+第二、第三引数の、String key、String valueはIndexの取得に使用する。
+条件に一致したNodeのIteratorを返す。
Jungleは過去のTreeを全て保持しているため、Treeのversion毎にIndexを持っている必要がある。
-FunctionalJavaのTreeMapを使用してIndexの実装を行った
-データの更新が行われた際に、一度作られたIndexに対して更新を行わず、新しいIndexを構築する。
-その際、過去のIndexを最大限共有している。
+version毎にIndexを作るとメモリを多量消費してしまう。
+FunctionalJavaのTreeMapを使用してIndexの実装を行った。
+データの更新が行われた際に、一度作られたIndexに対して更新を行わず、新しいIndexを構築します。
+その際、過去のIndexとデータを共有している。
+複数のversionのIndexがあっても、データの差分しかメモリは消費されない。
メモリの使用量を抑えつつ複数のversionでIndexを保持できる。
+ +maTrixで許認可を判断する際に、木構造の親を辿る検索を行う必要がある。
+以下に親を辿る検索を行う例を記す。
+TreeNodeでgetを行うと、親Nodeを返すParentIndexを実装した。
+3番目の処理でParentIndexを使用する。
+maTrixで許認可を判断する際に、木構造の親を辿って検索を行う必要がある。
-以下に親を辿る検索を行う例を記す。
-TreeNodeでgetを行うと、親Nodeを返すParentIndexを実装した。
-3番目の処理でParentIndexを使用する。
+ +Jungle上での許認可判断は、組織構造とポリシーファイルを参照して行う。
+引数にポリシーファイルと、誰が(subject)、何に(Resource)、どうするか(Action)を取る。
+返り値は、許可(Permit) or 拒否(Deny)がある。
+実際にJungleの上で許認可判断が行えるようになった。
+ +Jungle上での許認可判断は、組織構造とポリシーファイルを参照して行う。
+引数にポリシーファイルと、誰が(subject)、何に(Resource)、どうするか(Action)を取る。
+返り値は、許可(Permit) or 拒否(Deny)がある。
+実際にJungleの上で許認可判断が行えるようになった。
+ +今は、maTrixのデータ構造をそのまま格納しているため、Jungleに合ったデータ構造を設計する。
+Jungle上での許認可判断は、組織構造の参照とポリシーファイルを使用して許認可判断を行う。
-引数にポリシーファイルと、誰が(subject)、何に(Resource)、どうするか(Action)を引数に取る。
-返り値は許可(Permit) or 拒否(Deny)が返ってくる
-実際にJungleの上で許認可判断が行えるようになった
-今は、maTrixのデータ構造をそのまま格納しているため、Jungleに合ったデータ構造を設計する。
+ +Jungle上で実用アプリケーションを構築できた。
+その際に必要だった機能をJungleに追加した。
+実際にポリシーファイルを読み込み許認可を行えた。
+