# HG changeset patch # User tatsuki # Date 1424304625 -32400 # Node ID ad8c43e3d937d8c5b9a456cff3e4deead74acd8d # Parent 454413db1bfdd97b892b31c13f5eae01320cdcb1 fix diff -r 454413db1bfd -r ad8c43e3d937 fig/sosikiTree.graffle --- a/fig/sosikiTree.graffle Thu Feb 19 04:16:12 2015 +0900 +++ b/fig/sosikiTree.graffle Thu Feb 19 09:10:25 2015 +0900 @@ -52,6 +52,223 @@ GraphicsList + Bounds + {{351, 339.2940673828125}, {92, 46}} + Class + ShapedGraphic + FitText + Vertical + Flow + Resize + FontInfo + + Font + HiraKakuProN-W3 + Size + 24 + + ID + 96 + Shape + Circle + Style + + fill + + Color + + b + 0.974573 + g + 0.998064 + r + 1 + + Draws + NO + + shadow + + Color + + a + 0.75 + b + 0.94523 + g + 0.987116 + r + 1 + + Draws + NO + + stroke + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg932\cocoartf1343\cocoasubrtf140 +\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset128 HiraKakuProN-W3;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs48 \cf0 \'90\'6c\'95\'a8} + + TextRelativeArea + {{0, 0}, {1, 1}} + + + Bounds + {{142.5, 339.29397583007812}, {58, 46}} + Class + ShapedGraphic + FitText + YES + Flow + Resize + FontInfo + + Font + HiraKakuProN-W3 + Size + 24 + + ID + 95 + Shape + Circle + Style + + fill + + Color + + b + 0.974573 + g + 0.998064 + r + 1 + + Draws + NO + + shadow + + Color + + a + 0.75 + b + 0.94523 + g + 0.987116 + r + 1 + + Draws + NO + + stroke + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg932\cocoartf1343\cocoasubrtf140 +\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset128 HiraKakuProN-W3;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs48 \cf0 \'91\'67\'90\'44} + + TextRelativeArea + {{0, 0}, {1, 1}} + Wrap + NO + + + Bounds + {{206, 109.69122314453125}, {177, 46}} + Class + ShapedGraphic + FitText + YES + Flow + Resize + FontInfo + + Font + HiraKakuProN-W3 + Size + 24 + + ID + 93 + Shape + Circle + Style + + fill + + Color + + b + 0.974573 + g + 0.998064 + r + 1 + + Draws + NO + + shadow + + Color + + a + 0.75 + b + 0.94523 + g + 0.987116 + r + 1 + + Draws + NO + + stroke + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg932\cocoartf1343\cocoasubrtf140 +\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset128 HiraKakuProN-W3;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs48 \cf0 \'91\'67\'90\'44\'89\'5e\'97\'70\'83\'82\'83\'66\'83\'8b} + + TextRelativeArea + {{0, 0}, {1, 1}} + Wrap + NO + + AllowLabelDrop Class @@ -65,8 +282,8 @@ 92 Points - {232.10952452165807, 157.11673501303437} - {135.14533693119637, 227.21317166781122} + {287.09929082216718, 184.38243113710641} + {160.36539651533562, 279.58803913090776} Style @@ -104,8 +321,8 @@ 91 Points - {232.10952452165807, 157.11673501303437} - {312.85466306880357, 227.21322397914486} + {287.09929082216718, 184.38243113710641} + {392.63460348466424, 279.58811018062954} Style @@ -131,7 +348,7 @@ Bounds - {{230.70932613760721, 227.21322397914489}, {164.29067386239274, 121.78677602085516}} + {{285.26920696932865, 279.58811018062954}, {214.73079303067118, 165.41188981937034}} Class ShapedGraphic FontInfo @@ -162,20 +379,13 @@ Text - Text - {\rtf1\ansi\ansicpg932\cocoartf1343\cocoasubrtf140 -\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset128 HiraKakuProN-W3;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc - -\f0\fs24 \cf0 \'90\'6c\'95\'a8} VerticalPad 0 Bounds - {{53, 227.21317166781122}, {164.29067386239274, 121.78677602085516}} + {{53.000000000000028, 279.58803913090776}, {214.73079303067118, 165.41188981937034}} Class ShapedGraphic FontInfo @@ -206,20 +416,13 @@ Text - Text - {\rtf1\ansi\ansicpg932\cocoartf1343\cocoasubrtf140 -\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset128 HiraKakuProN-W3;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc - -\f0\fs24 \cf0 \'91\'67\'90\'44} VerticalPad 0 Bounds - {{149.96418759046171, 80.999999999999943}, {164.29067386239274, 76.116735013034443}} + {{179.73389430683159, 80.999999999999972}, {214.73079303067118, 103.38243113710645}} Class ShapedGraphic FontInfo @@ -250,13 +453,6 @@ Text - Text - {\rtf1\ansi\ansicpg932\cocoartf1343\cocoasubrtf140 -\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset128 HiraKakuProN-W3;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc - -\f0\fs24 \cf0 \'91\'67\'90\'44\'89\'5e\'97\'70\'83\'82\'83\'66\'83\'8b} VerticalPad 0 @@ -309,7 +505,7 @@ MasterSheets ModificationDate - 2015-02-18 19:06:49 +0000 + 2015-02-18 23:25:55 +0000 Modifier sister_clown NotesVisible diff -r 454413db1bfd -r ad8c43e3d937 slide/images/TreePersonJungle.png Binary file slide/images/TreePersonJungle.png has changed diff -r 454413db1bfd -r ad8c43e3d937 slide/images/sosikiTree.png Binary file slide/images/sosikiTree.png has changed diff -r 454413db1bfd -r ad8c43e3d937 slide/slide.html --- a/slide/slide.html Thu Feb 19 04:16:12 2015 +0900 +++ b/slide/slide.html Thu Feb 19 09:10:25 2015 +0900 @@ -86,7 +86,7 @@ } ); - + 
@@ -98,29 +98,45 @@
+

知的構造を格納するためのデータベース

-

我々が扱っている知識は木構造であることが多い

-

RDBに木構造のデータを格納する際は表変換を行う必要があり、データ構造が煩雑になりやすい

-

分散木構造データベースJungleの開発を行っている

+

我々が扱っている知識は木構造であることが多い。

+

RDBに木構造のデータを格納する際は表変換を行う必要があり、データ構造が煩雑になりやすい。

+

木構造のデータを直接格納できるデータベースJungleの開発を行っている。

Jungle上に組織の許認可管理アプリケーションmaTrixを実装する。

-

データベースの表現力、機能の十分性、実用的な性能実証実験を行う

+

データベースの表現力、機能の十分性、実用的な性能実証実験を行う。

+
-

分散木構造データベースJungle

-

新しい木構造を作成することでデータの編集を行う

-

- -

ロックをかける必要があるのはルートノードを入れ替えるときのみ

- + +

Jungleのデータ構造

+

JungleのTreeはNodeの集合で表現されている。

+ +

Nodeは自身の子どもと、属性名と属性値の組でデータを保持しています。

+

一般的なDBと比べると、NodeがCOLUMN、TreeがTABLEに相当します。

+
+ +

Jungleのデータの編集

+

新しい木構造を作成することでデータの編集を行う。

+ +

書き込み時に、ロックをかける必要があるのはルートノードを入れ替えるときのみ。

+

データの上書きが無いため、読み込み中にロックをかける必要がない。

+
+
+ + + +
+

組織の中の許認可管理アプリケーションmaTrix

-

人、組織、役割等の情報を木構造として保持しており、Idでお互いに参照し組織構造を表現している

-

許認可の判断は、ポリシーファイルに記述されたルールにそって行われる

-

ポリシーファイルは組織構造を参照するため木に対する参照機能が必要になる

+

人、組織、役割等の情報を木構造として保持しており、Idでお互いに参照し組織構造を表現している。

+

許認可の判断は、アクセスルールが記述されたポリシーファイルにそって行われる。

+
@@ -164,105 +180,146 @@ -->
+

Jungle上でのmaTrixのデータ構造の表現

-

以下のXMLは、maTrixの人物Treeの一部である。

-

+

この図は、maTrixの人物Treeの一部をJungleに格納したものである。

+

この様にJungleでは木構造のデータを読み込む。

+
-

maTrixでの許認可管理

-

maTrixを用いた許認可は、組織構造だけでは判断されない

-

アクセス可能な時間等のアクセスルールは組織構造では表現できないからである。

-

そこでアクセスルールを定義できるXACML形式で記述したポリシーファイルを用いて許認可管理を行う

-

XACMLは、subject(誰が)、Resource(何を)、Action(どうするか)を記述する。

- -

以下に許認可管理の流れを示す

-
    -
  • Aさんが、学科のノートPCの借りるために、maTrixに貸出許可を求める。
  • -
  • maTrix はリポジトリから、貸出許可を与えるかを判断するためのポリシーを取得する。
  • -
  • ポリシーファイルを元に、データにアクセスを行い許可を与えるかどうかを判断する。
  • -
- + +

maTrixの組織構造表現例

+

maTrixの組織構造は純粋な木構造ではない

+

Idを用いて木同士が相互参照を行うことで組織構造を表現している。

+ +

この図だと、人物Treeと組織Treeがお互い参照を行い組織運用モデルを表現している。

+
-

maTrixの組織構造表現例

-

木同士の参照はIdの検索を用いて表現する

-

- -

例えば人物Treeと組織Treeがお互い参照を行い組織運用モデルを表現している。

+ +

maTrixでの許認可管理

+

maTrixを用いた許認可は、組織構造だけでは判断されない。

+

アクセス可能な時間等のルールは組織構造では表現できないからである。

+

リソース管理を allow deny

+

そこでアクセスルールを記述したポリシーファイルを用いて許認可管理を行う。

+

ポリシーファイルには、subject(誰が)、Resource(何に対して)、Action(何が出来るか)を記述する。

+

以下に許認可管理の流れを示す

+
    +
  • Aさん(Subject)が、学科のノートPC(Resource)の借りる(Action)ために、maTrixに貸出許可を求める。
  • +
  • maTrixはリポジトリから、貸出許可を与えるかを判断するためのポリシーを取得する。
  • +
  • ポリシーファイルを元に、組織構造にアクセスを行い許可を与えるかどうかを判断する。
  • +
+
+
-

Idを使った木の相互参照

-

Treeの検索は、Traverserを使用する

+ +

Jungle上でのIdを使った木の相互参照

+

Treeの検索は、Jungleが提供しているTraverserを使用する。

InterfaceTraverser traverser = tree.getTraverser(boolean useIndex);
+

TraverserはTreeのNodeを走破するクラスです。

TreeからgetTraverserで取得可能。

第一引数で 検索を行う際にIndexを使用するかどうかを選択できる。

- +
+

Idを使った木の相互参照2

Traverser.findでTreeに対して検索を行う。

- public Iterator<TreeNode> find(Query query,String key, String searchValue); + public Iterator<TreeNode> nodeIterator = traverser.find(Query query,String key, String searchValue);
-find関数は引数にQuery、String key、String valueの3つの引数を取り、条件に一致したNodeのIteratorを返す。 -第一引数には、探索の条件を記述する関数boolean comdition(TreeNode)を定義したQueryを。 -第二、第三引数の、String key、String valueはIndexの取得を行うために使用する。 - +

第一引数には、探索の条件を記述する関数boolean condition(TreeNode)を定義したQueryを受け取る。

+

第二、第三引数の、String key、String valueはIndexの取得に使用する。

+

条件に一致したNodeのIteratorを返す。

public interface Query {
   boolean condition(TreeNode _node);
}
+
+

JungleのIndex

Jungleは過去のTreeを全て保持しているため、Treeのversion毎にIndexを持っている必要がある。

-

FunctionalJavaのTreeMapを使用してIndexの実装を行った

-

データの更新が行われた際に、一度作られたIndexに対して更新を行わず、新しいIndexを構築する。

-

その際、過去のIndexを最大限共有している。

+

version毎にIndexを作るとメモリを多量消費してしまう。

+

FunctionalJavaのTreeMapを使用してIndexの実装を行った。

+

データの更新が行われた際に、一度作られたIndexに対して更新を行わず、新しいIndexを構築します。

+

その際、過去のIndexとデータを共有している。

+

複数のversionのIndexがあっても、データの差分しかメモリは消費されない。

メモリの使用量を抑えつつ複数のversionでIndexを保持できる。

+
+
+ + +
+ +

木構造の親を辿るQuery

+

maTrixで許認可を判断する際に、木構造の親を辿る検索を行う必要がある。

+

以下に親を辿る検索を行う例を記す。

+
    +
  1. Aさんが、maTrixに工学部の学生にのみ貸出を行っている書籍の貸出許可を求める。
  2. +
  3. Aさんの所属している組織の情報を取得する(情報工学科)。
  4. +
  5. 情報工学科の親の情報を取得する(工学部)。
  6. +
  7. Aさんは工学部に所属しているため本の貸出を許可する。
  8. +
+

TreeNodeでgetを行うと、親Nodeを返すParentIndexを実装した。

+

3番目の処理でParentIndexを使用する。

+
-

木構造の親を辿るQuery

-

maTrixで許認可を判断する際に、木構造の親を辿って検索を行う必要がある。

-

以下に親を辿る検索を行う例を記す。

-
    -
  • Aさんが、maTrixに工学部の学生にのみ貸出を行っている書籍の貸出許可を求める。
  • -
  • Aさんの所属している組織の情報を取得する(情報工学科)。
  • -
  • 情報工学科の親の情報を取得する(工学部)。
  • -
  • Aさんは工学部に所属しているため本の貸出を許可する。
  • -
-

TreeNodeでgetを行うと、親Nodeを返すParentIndexを実装した。

-

3番目の処理でParentIndexを使用する。

+ +

maTrixのポリシーファイルのInterpreter

+

Jungle上での許認可判断は、組織構造とポリシーファイルを参照して行う。

+

引数にポリシーファイルと、誰が(subject)、何に(Resource)、どうするか(Action)を取る。

+

返り値は、許可(Permit) or 拒否(Deny)がある。

+

実際にJungleの上で許認可判断が行えるようになった。

+
+
+ +
+ +

maTrixのポリシーファイルのInterpreter

+

Jungle上での許認可判断は、組織構造とポリシーファイルを参照して行う。

+

引数にポリシーファイルと、誰が(subject)、何に(Resource)、どうするか(Action)を取る。

+

返り値は、許可(Permit) or 拒否(Deny)がある。

+

実際にJungleの上で許認可判断が行えるようになった。

+
+
+ +
+ +

今後の課題

+
  • 分散版の実装

  • +
  • maTrix専用のデータ構造の定義
  • +

    今は、maTrixのデータ構造をそのまま格納しているため、Jungleに合ったデータ構造を設計する。

    +
    -

    XACMLInterpreter

    -

    Jungle上での許認可判断は、組織構造の参照とポリシーファイルを使用して許認可判断を行う。

    -

    引数にポリシーファイルと、誰が(subject)、何に(Resource)、どうするか(Action)を引数に取る。

    -

    返り値は許可(Permit) or 拒否(Deny)が返ってくる

    -

    実際にJungleの上で許認可判断が行えるようになった

    -
    - -
    -

    今後の課題

    -
  • 分散板の実装

  • -
  • maTrix専用のデータ構造の定義
  • -

    今は、maTrixのデータ構造をそのまま格納しているため、Jungleに合ったデータ構造を設計する。

    + +

    まとめ

    +

    Jungle上で実用アプリケーションを構築できた。

    +

    その際に必要だった機能をJungleに追加した。

    +
  • Query
  • +
  • Index
  • +

    実際にポリシーファイルを読み込み許認可を行えた。

    +
    diff -r 454413db1bfd -r ad8c43e3d937 卒論.mm --- a/卒論.mm Thu Feb 19 04:16:12 2015 +0900 +++ b/卒論.mm Thu Feb 19 09:10:25 2015 +0900 @@ -1,6 +1,6 @@ - + @@ -305,5 +305,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +