4.2.9 カスタム認可ルールの例

開発者にカスタム認可ルールを定義できます。

例4-1 開発者によるグラフの公開の許可

他のユーザーとのグラフの共有は、可能な場合にはOracle Databaseで行ってください。データベース表でGRANT文を使用して、他のユーザーが表からグラフを作成できるようにします。グラフがプロパティ・グラフ・スキーマ内にある場合は、OPG_APIS.GRANT_ACCESS APIを使用してグラフを共有します。

グラフ・サーバー(PGX)では、次の権限を使用して、すでにメモリー内にあるグラフをグラフ・サーバーに接続している他のユーザーと共有できます。

表4-4 許可された権限

権限 この権限によって有効になる操作
READ
  • PGX APIを介して、またはPGXのPGQL問合せでグラフを読み取り、サブグラフを作成するか、グラフをクローニングします
MANAGE
  • グラフまたはスナップショットを公開します
  • READおよびEXPORTが含まれます
  • グラフに対するREADおよびEXPORT権限を付与または取り消します
EXPORT
  • グラフをファイルにエクスポートします。
  • READ権限が含まれます。

グラフの作成者は、グラフに付与されたMANAGE権限を自動的に取得します。MANAGE権限を持っている場合は、グラフに対するREADまたはEXPORT権限を他のロールまたはユーザーに付与できます。グラフには、MANAGEを付与できません。次のuserAというユーザーの例に、その方法を示します。

import oracle.pgx.api.*
import oracle.pgx.common.auth.*
 
 
PgxSession session = GraphServer.getInstance("<base-url>", "<userA>", "<password-of-userA").createSession("userA")
PgxGraph g = session.readGraphWithProperties("examples/sample-graph.json", "sample-graph")
g.grantPermission(new PgxRole("GRAPH_DEVELOPER"), PgxResourcePermission.READ)
g.publish()
これで、次のuserBの例に示すように、GRAPH_DEVELOPERロールを持つ他のユーザーがこのグラフにアクセスし、そのグラフに対するREADアクセス権を持つことができます。
PgxSession session = GraphServer.getInstance("<base-url>", "<userB>", "<password-of-userB").createSession("userB")
PgxGraph g = session.getGraph("sample-graph")
g.queryPgql("select count(*) from match (v)").print().close()

同様に、次の例に示すように、グラフはロールではなく個々のユーザーと共有できます。

g.grantPermission(new PgxUser("OTHER_USER"), PgxResourcePermission.EXPORT)

OTHER_USERは、グラフgに対するEXPORT権限を受け取るユーザーのユーザー名です。

例4-2 開発者による事前ロード済グラフへのアクセスの許可

開発者が事前にロードされたグラフ(グラフ・サーバーの起動時にロードされたグラフ)にアクセスできるようにするには、pgx.confファイルで事前にロードされたグラフに対する読取り権限を付与します。たとえば:

"preload_graphs": [{
  "path": "/data/my-graph.json",
  "name": "global_graph"
}],
"authorization": [{
  "pgx_role": "GRAPH_DEVELOPER",
  "pgx_permissions": [{
    "preloaded_graph": "global_graph"
    "grant": "read"
  },
...

READ、EXPORTまたはMANAGE権限を付与できます。

例4-3 開発者によるHadoop分散ファイル・システム(HDFS)またはローカル・ファイル・システムへのアクセスの許可

開発者がHDFSからファイルを読み取れるようにするには、まずHDFSディレクトリを宣言してから、読取りまたは書込み権限にマップする必要があります。たとえば:


CREATE OR REPLACE DIRECTORY pgx_file_location AS 'hdfs:/data/graphs'
GRANT READ ON DIRECTORY pgx_file_location TO GRAPH_DEVELOPER

同様に、GRANT WRITEを使用して別の権限を追加し、書込みアクセスを許可できます。グラフをエクスポートするには、このような書込みアクセス権が必要です。

ローカル・ファイル・システム(グラフ・サーバーが実行されている場所)へのアクセス権は、同じ方法で付与できます。唯一の違いは、場所がhdfs:接頭辞のない絶対ファイル・パスになります。たとえば:

CREATE OR REPLACE DIRECTORY pgx_file_location AS '/opt/oracle/graph/data'

前述の構成に加えて、グラフ・サーバー・プロセスを実行するオペレーティング・システム・ユーザーには、これらのディレクトリへの実際の読取りまたは書込みに対応するディレクトリ権限が必要です。

例4-4 Autonomous Databaseでのディレクトリへのアクセスの許可

開発者がOracle Autonomous Databaseのファイルから読取りおよび書込みできるようにするには、次のステップを実行する必要があります。

  1. SQLベースのOracle Databaseツールのいずれかを使用するか、Webベースの組込みインタフェースであるデータベース・アクションを使用して、ADMINユーザーとしてAutonomous Databaseインスタンスに接続します。
  2. 次のように、graph:接頭辞を使用してディレクトリへのパスを指定して、ディレクトリを作成します。
    CREATE OR REPLACE DIRECTORY pgx_file_location AS 'graph:/opt/oracle/graph/data'
  3. 目的のロールにディレクトリに対する読取り権限または書込み権限を付与します。たとえば:
    GRANT READ ON DIRECTORY pgx_file_location TO GRAPH_DEVELOPER