13 Oracle Graph Server and Clientのインストール

この章では、グラフ・サーバーとグラフ・クライアントをインストールするステップについて説明します。

13.1 始める前に

Oracle Property Graphsの使用を開始する前に、Oracle Graph Server and Clientをインストールするためのワークフローを理解する必要があります。

表13-1 Oracle Graph Server and Clientをインストールするためのワークフロー

順序 タスク 説明 詳細情報
1 Oracle Databaseの要件の確認 Oracle Databaseのバージョンが12.2以上であることを確認します。 データベースの互換性の確認
2 Oracle Graph Server and Clientのダウンロード Oracle Software Delivery CloudまたはOracle Technology NetworkからOracle Graph Server and Clientをダウンロードします。 Oracle Graph Server and Clientのダウンロード
3 Oracle DatabaseでのPL/SQLパッチのインストール Oracle DatabaseでPL/SQL Graphパッケージをアップグレードします。 Oracle DatabaseでのPL/SQLパッケージのインストール
4 Oracle Graph Serverのインストール ダウンロード可能な個別のパッケージとして使用可能なOracle Graph Serverをインストールします。 Oracle Graph Serverのインストール
5 Oracle Graph Clientのインストール グラフ・クライアント(グラフ・シェルCLIやグラフ・ビジュアライゼーション・アプリケーションなど)をインストールして、プロパティ・グラフを操作します。 Oracle Graph Clientのインストール
6 トランスポート層セキュリティの設定 自己署名証明書を信頼するようにグラフ・サーバーおよびクライアントを構成します。 トランスポート層セキュリティの設定
7 グラフを公開する権限の追加 グラフを公開する権限を付与します。 グラフを公開する権限の追加

13.1.1 データベースの互換性の確認

Oracle Graph Server and Clientは、オンプレミス環境とクラウド環境の両方でOracle Database 12.2以降と連携して機能します。クラウド環境には、すべてのバージョンのOracle Autonomous Database ServerlessおよびOracle Autonomous Database Dedicatedの操作が組み込まれています。

ただし、PGQLのINSERTUPDATEまたはDELETE問合せを使用したプロパティ・グラフの変更は、Oracle Database 12.2ではサポートされていません。

13.1.2 Oracle Graph Server and Clientのダウンロード

Oracle Graph Server and Clientは、Oracle Software Delivery CloudまたはOracle Technology Networkからダウンロードできます。

表13-2に、Oracle Graph Server and Clientデプロイメントに含まれるすべてのファイルの概要を示します。

表13-2のファイル名に示されている<ver>は、ダウンロードされたOracle Graph Server and Clientのバージョンを反映しています。

表13-2 Oracle Graph Server and Clientデプロイメントのコンポーネント

ファイル コンポーネント 説明
oracle-graph-<ver>.rpm Oracle Graph Server Oracle Graph Serverをデプロイするためのrpmファイル。
oracle-graph-client-<ver>.zip Oracle Graph Client Oracle Graph Clientを含むzipファイル。
oracle-graph-hdfs-connector-<ver>.zip Oracle Graph HDFS Connector Oracle Graph ServerをApache Hadoop Distributed Filesystem (HDFS)に接続するためのライブラリを含むzipファイル。
oracle-graph-sqlcl-plugin-<ver>.zip Oracle Graph PGQL Plugin for SQLcl SQLclでPGQL問合せを実行するためのSQLcl用のプラグイン。
oracle-graph-webapps-<ver>.zip Oracle Graph Web Applications アプリケーション・サーバーにグラフ・サーバーをデプロイするための.warファイルを含むzipファイル。
oracle-graph-plsql-<ver>.zip Oracle Graph PL/SQL Patch PL/SQLパッケージを含むzipファイル。これらのパッケージを使用してデータベース内のPL/SQL Graphパッケージを更新することをお薦めします。手順は、READMEファイルに記載されています。
oracle-graph-visualization-library-<ver>.zip Oracle Graph Visualization Library グラフ・ビジュアライゼーション・アプリケーション用のJavaスクリプト・ライブラリが含まれるzipファイル。

13.1.3 Oracle DatabaseでのPL/SQLパッケージのインストール

Oracle Graph Server and Client は、Oracle Database 12.2以降と連携して機能します。ただし、Oracle Graph Server and Clientのダウンロードに含まれる更新されたPL/SQLパッケージをインストールする必要があります。

ノート:

Graph Server and ClientをOracle Autonomous Databaseとともに使用している場合は、このセクションをスキップできます。必要なことは、認証にOracle Databaseを使用するための基本ステップでステップ5およびステップ6を実行することにより、ロールを作成し権限を割り当てることのみです。これらのステップは、Oracle Cloud Infrastructureコンソール「データベース・アクション」を使用して実行できます。

  1. Oracle Graph Server and Clientのダウンロードに含まれるOracle Graph PL/SQLパッチ・コンポーネントをOracle Software Delivery Cloudからダウンロードします。
  2. ファイルoracle-graph-plsql-<ver>.zipを任意のディレクトリに解凍します。
    <ver>は、PL/SQL用のOracle Graph PL/SQL Patchのダウンロードされたバージョンを示します。
  3. DBA権限を持つユーザーとしてデータベースに接続し、create_graph_roles.sqlスクリプトを実行します。
    -- Connect as SYSDBA
    SQL> ALTER SESSION SET CONTAINER=<YOUR_PDB_NAME>;
    SQL> @create_graph_roles.sql

    オプションで、プロパティ・グラフ・スキーマ(PGスキーマ)グラフを操作する場合は、次のステップを実行してPL/SQLパッケージをインストールする必要があります。

    • optional_pg_schemaフォルダで、次のいずれかのディレクトリを選択します:
      • 18c_and_below: これは、Oracle Database 18c以前で作業している場合にのみ適用されます。
      • 19c_and_above: これは、Oracle Database 19c以降で作業している場合にのみ適用されます。
    • DBA権限を持つデータベース・ユーザーとして、(使用しているデータベース・バージョンに一致する)適切なディレクトリのREADME.mdファイルの手順に従います。これは、グラフ機能を使用するすべてのPDBに対して実行する必要があります。たとえば:
      -- Connect as SYSDBA
      SQL> ALTER SESSION SET CONTAINER=<YOUR_PDB_NAME>;
      SQL> @opgremov.sql
      SQL> @catopg.sql

    PGスキーマ・グラフの詳細は、「プロパティ・グラフ・スキーマの使用」を参照してください。

  4. DBA権限を持つデータベース・ユーザーとして接続し、ユーザー<graphuser>を作成し、次の権限を付与します:
    SQL> GRANT CREATE SESSION, CREATE TABLE, CREATE VIEW TO <graphuser>

    オプションで、プロパティ・グラフ・スキーマ(PGスキーマ)グラフを操作する場合は、次の権限を付与します:

    SQL> GRANT CREATE SESSION, ALTER SESSION, CREATE TABLE, CREATE PROCEDURE, CREATE TYPE, CREATE SEQUENCE, CREATE VIEW, CREATE TRIGGER TO <graphuser> 
  5. グラフを操作するためにステップ4で作成したデータベース・ユーザーに、適切なロール(GRAPH_DEVELOPERまたはGRAPH_ADMINISTRATOR)を付与します。

    ノート:

    
    SQL> GRANT GRAPH_DEVELOPER to <graphuser>
    SQL> GRANT GRAPH_ADMINISTRATOR to <adminuser>

13.2 Oracle Graph Serverのインストール

グラフ問合せおよび分析をグラフ・サーバー(PGX)で実行するには、Oracle Graph Serverをインストールする必要があります。

次の各項では、Oracle Graph Serverをスタンドアロン・モードでインストールするステップ、あるいはOracle WebLogic ServerまたはApache Tomcatを使用して、サーバーをWebアプリケーションとしてデプロイするステップについて説明します。

13.2.1 RPMインストールの使用

ダウンロードしたRPMファイルを実行して、Oracle Graph Serverをインストールできます。

13.2.1.1 Oracle Graph Serverのインストールの前提条件

Oracle Graph Serverをインストールするには、システムが特定の前提条件を満たしている必要があります。

Oracle Graph Serverをインストールするための前提条件は次のとおりです。
  • 次のシステム要件を満たしていることを確認してください。
    • Oracle Linux 7または8 x64、あるいはRedHatなどの同様のLinuxディストリビューション
    • Oracle JDK 8、JDK 11またはJDK 17

      ノート:

      • Open JDKに不具合があるため、次のOracle JDKバージョンは使用しないようにすることをお薦めします。
        • JDK 11.0.9
        • JDK 11.0.10
        • JDK 11.0.11
        • JDK 11.0.12

        詳細は、このノートを参照してください。

      • PGXアルゴリズムAPIを使用したカスタム・グラフ・アルゴリズムのコンパイルは、Oracle JDK 17ではサポートされていません。
  • 次のコマンドを実行して、グラフ・サーバーのインストール済バージョンがすでにあるかどうかを確認します。
    sudo rpm -q oracle-graph
    [sudo] password for oracle: 
    oracle-graph-23.2.0-0.x86_64

    インストールがすでに存在する場合は、グラフ・サーバーのインストールでエラーがスローされる可能性があります。その場合は、「Oracle Graph Serverのアップグレード」を参照して、新しいバージョンにアップグレードします。

13.2.1.2 Oracle Graph Serverのインストール
Oracle Graph Serverをスタンドアロン・モードでインストールする場合のインストール・ステップは、次のとおりです。
  1. rootユーザーとして、またはsudoを使用して、RPMコマンドライン・ユーティリティを使用してRPMファイルをインストールします。
    sudo rpm -i oracle-graph-<version>.rpm

    <version>は、ダウンロードしたバージョンを表します。(たとえば: oracle-graph-23.2.0.x86_64.rpm)

    .rpmファイルはグラフ・サーバーです。

    RPMファイルのインストール時には、次のインストール後のステップが実行されます。
  2. rootとして、またはsudoを使用して、サーバー・インストールの使用を許可されているオペレーティング・システム・ユーザーをオペレーティング・システム・グループoraclegraphに追加します。たとえば:
    usermod -a -G oraclegraph <graphuser>
    これによって、指定されたグラフ・ユーザーがグループoraclegraphに追加されます。

    この処理を有効にするには、<graphuser>がログアウトしてから再度ログインする必要があることに注意してください。

  3. <graphuser>として、データベース認証のためのグラフ・サーバーの準備のステップに従って/etc/oracle/graph下のファイルを変更し、サーバーを構成します。
  4. ユーザーの認証および認可の説明に従って、グラフ・サーバーに接続するデータベース・ユーザーに対して認証が有効になっていることを確認します。
  5. rootユーザーとして、またはsudoを使用して、次のコマンドを実行することによりグラフ・サーバー(PGX)を起動します。
    sudo systemctl start pgx
次のコマンドを実行すると、グラフ・サーバーが起動したかどうかを確認できます。
systemctl status pgx
  • グラフ・サーバーが正常に起動した場合、レスポンスは次のように表示されます。
    ● pgx.service - Oracle Graph In-Memory Server
       Loaded: loaded (/etc/systemd/system/pgx.service; disabled; vendor preset: disabled)
       Active: active (running) since Wed 2021-01-27 10:06:06 EST; 33s ago
     Main PID: 32127 (bash)
       CGroup: /system.slice/pgx.service
               ├─32127 /bin/bash start-server
               └─32176 java -Dlogback.configurationFile=/etc/oracle/graph/logback-server.xml -Doracle.jdbc.fanEnabled=false -cp /opt/oracle/graph/pgx/bin/../../pgx/server/lib/jackson-databind...

    これで、グラフ・サーバーでリクエストを受け入れる準備が整いました。

  • グラフ・サーバーが起動していない場合は、/var/log/oracle/graphにあるログ・ファイルでエラーを確認する必要があります。さらに、次のコマンドを実行して、systemdエラーを表示することもできます。
    sudo journalctl -u pgx.service 

特定のユースケースでは、次のような追加のインストール操作が必要になります。

Oracle WebLogic ServerまたはApache Tomcatでグラフ・サーバーをデプロイする手順は、次を参照してください。

ロード・バランサの背後にグラフ・サーバーをデプロイすることもできます。詳細は、ロード・バランサの背後でのOracle Graph Serverのデプロイを参照してください。

13.2.1.3 Oracle Graph Serverのアンインストール
グラフ・サーバーをアンインストールするには、まず既存のグラフ・サーバー・バージョンを必ず停止します。
  1. rootユーザーとして、またはsudoを使用して次のコマンドを実行します。
    sudo rpm -e oracle-graph
13.2.1.4 Oracle Graph Serverのアップグレード
グラフ・サーバーをアップグレードするには、まず既存のグラフ・サーバー・バージョンを必ず停止します。その後、新しいRPMファイルを引数として指定して次のコマンドを実行できます。
  1. 現在のグラフ・サーバー・インストールのバージョンを確認します。
    sudo rpm -q oracle-graph
  2. グラフ・サーバーをすでに実行している場合はそれを停止します。
    sudo systemctl stop pgx
  3. オプションで、独自の署名付きサーバー証明書を使用している場合は、既存の証明書を保持しておくことをお薦めします。

    注意:

    • /etc/oracle/graphのデフォルトのキーストア証明書は、アップグレード・プロセス中に自動では保持されません。
    • グラフ・サーバーをバージョン22.3.0以前から23.2.0にアップグレードする場合は、Graph Server and Clientリリース23.2.0でのRPMファイルのインストールによって、デフォルトで自己署名付きサーバーのキーストア・ファイルが生成されることに注意してください。自己署名サーバー証明書を使用している場合は、サーバー構成フィールドserver_certおよびserver_private_keyは非推奨であり、今後のリリースでサポートされなくなることに注意してください。詳細は、「トランスポート層セキュリティの設定」を参照してください。
  4. rootユーザーまたはsudoで次のコマンドを実行してグラフ・サーバーをアップグレードします。
    sudo rpm -U oracle-graph-23.2.0.x86_64.rpm
    また、次の点にも注意してください。
    • アップグレード・プロセスでは、以前のPGX (PGX.conf)、サーバー(server.conf)およびロギング(logback-server.xmllogback.xml)構成ファイルを.rpmsave接尾辞で保存することで、それぞれのファイルが自動的に保持されます。
    • PGXサービス(/etc/systemd/system/PGX.service)のsystemd構成ファイルでの手動での構成変更はすべて失われます。ただし、ドロップイン・ファイルを使用している場合は、ドロップイン・ファイル内のすべてのカスタマイズが維持されます。
    • /var/log/oracle/graph内の既存のログ・ファイルは保持されます。
  5. オプションで、保存されているサーバー証明書または.rpmsaveファイルに保存された以前の構成をリストアします。

    ノート:

    以前の構成ファイルをリストアする前に、2つのファイルを比較して、デフォルト・パラメータ値に変更があるかどうか、または新しいパラメータが構成ファイルに追加されているかどうかを確認することをお薦めします。

    たとえば:

    mv /etc/oracle/graph/pgx.conf /etc/oracle/graph/pgx.conf.orig
    mv /etc/oracle/graph/pgx.conf.rpmsave /etc/oracle/graph/pgx.conf
  6. グラフ・サーバーを再起動します。
    sudo systemctl daemon-reload
    sudo systemctl start pgx

13.2.2 WebサーバーへのOracle Graph Serverのデプロイ

Oracle Graph Serverは、Apache TomcatまたはOracle WebLogic Serverにデプロイできます。

次に、Webサーバーへのデプロイメントの手順について説明します:

13.2.2.1 Apache Tomcatへのデプロイ

このトピックの例では、Apache Tomcatでグラフ・サーバーをWebアプリケーションとしてデプロイする方法について説明します。

グラフ・サーバーは、Apache Tomcat 9.0.xで動作します。

  1. Oracle Software Delivery CloudからOracle Graph Webapps zipファイルをダウンロードします。このファイルには、すぐにデプロイできるJava Webアプリケーション・アーカイブ(.warファイル)が含まれます。ファイル名は、oracle-graph-webapps-<version>.zipのようになります
  2. 選択したディレクトリに、このファイルを解凍します。
  3. ネーミング・パターン(graph-server-<version>-pgx<version>.war)に従う.warファイルを見つけます。
  4. グラフ・サーバーを構成します。
    1. Webアプリケーション・アーカイブ内のWEB-INF/classes/pgx.confファイルを変更して、認証およびその他のサーバー設定を変更します。詳細は、ユーザーの認証および認可のセクションを参照してください。
    2. 必要に応じて、Webアプリケーション・アーカイブ内のWEB-INF/classes/logback.xmlファイルを変更して、ロギング設定を変更します。
    3. 必要に応じて、Webアプリケーション・アーカイブ内のWEB-INF/web.xmlファイルを変更して、その他のサーブレット固有のデプロイメント・ディスクリプタを変更します。
  5. .warファイルをTomcatのwebappsディレクトリにコピーします。たとえば:
    cp graph-server-<version>-pgx<version>.war $CATALINA_HOME/webapps/pgx.war

    ノート:

    Tomcat webappsディレクトリ内のwarファイルに指定する名前によって、グラフ・サーバー・アプリケーションのコンテキスト・パスが決まります。warファイルにpgx.warという名前を付けることをお薦めします。
  6. TLS/暗号化の正しい使用など、Tomcat固有の設定を構成します
  7. ポート8080がすでに使用されていないことを確認します。
  8. Tomcatを起動します。
    cd $CATALINA_HOME 
    ./bin/startup.sh 

    これで、グラフ・サーバーは、localhost:8080/pgxでリスニングします。

    次のコマンドを実行すると、JShellからサーバーに接続できます。

    
    $ <client_install_dir>/bin/opg4j --base_url https://localhost:8080/pgx -u <graphuser>
13.2.2.2 Oracle WebLogic Serverへのデプロイ

このトピックの例では、Oracle WebLogic Serverでグラフ・サーバーをWebアプリケーションとしてデプロイする方法について説明します。

この例では、Oracle WebLogic Serverを使用してグラフ・サーバーをデプロイする方法を示します。グラフ・サーバーでは、WebLogic Serverバージョン12.1.xおよび12.2.x.をサポートしています。

  1. Oracle Software Delivery CloudからOracle Graph Webapps zipファイルをダウンロードします。このファイルには、すぐにデプロイできるJava Webアプリケーション・アーカイブ(.warファイル)が含まれます。ファイル名は、oracle-graph-webapps-<version>.zipのようになります
  2. 選択したディレクトリに、このファイルを解凍します。
  3. ネーミング・パターン(graph-server-<version>-pgx<version>.war)に従う.warファイルを見つけます。
  4. グラフ・サーバーを構成します。
    1. Webアプリケーション・アーカイブ内のWEB-INF/classes/pgx.confファイルを変更して、認証およびその他のサーバー設定を変更します。
    2. 必要に応じて、Webアプリケーション・アーカイブ内のWEB-INF/classes/logback.xmlファイルを変更して、ロギング設定を変更します。
    3. 必要に応じて、Webアプリケーション・アーカイブ内のWEB-INF/web.xmlファイルを変更して、その他のサーブレット固有のデプロイメント・ディスクリプタを変更します。
    4. 必要に応じて、Webアプリケーション・アーカイブ内のWEB-INF/weblogic.xmlファイルを変更して、その他のWebLogic Server固有のデプロイメント・ディスクリプタを変更します。
  5. TLS/暗号化の正しい使用など、WebLogic固有の設定を構成します
  6. WebLogic Serverに.warファイルをデプロイします。次の例では、コマンドラインからこれを実行する方法を示します。
    . $MW_HOME/user_projects/domains/mydomain/bin/setDomainEnv.sh
    . $MW_HOME/wlserver/server/bin/setWLSEnv.sh
    java weblogic.Deployer -adminurl http://localhost:7001 -username <username> -password <password> -deploy -source <path-to-war-file>
    
13.2.2.2.1 Oracle WebLogic Serverのインストール

Oracle WebLogic Serverの最新バージョンをダウンロードし、インストールするには、次を参照してください

http://www.oracle.com/technetwork/middleware/weblogic/documentation/index.html

13.2.3 ユーザーの認証および認可

Oracle Graph Server (PGX)では、Oracle Databaseをアイデンティティ・マネージャとして使用します。ユーザー名およびパスワード・ベースの認証とKerberosベースの認証の両方がサポートされています。

グラフ・サーバーで実行できる操作は、Oracle Databaseで付与されているロールによって有効化される権限によって決まります。

13.2.3.1 Oracle Databaseの権限とロール

グラフを操作するすべてのデータベース・ユーザーに、データベースにおけるCREATE SESSION権限が必要です。

グラフを操作するために作成されるロールを表13-3に示します。これらのロールは、ターゲット・データベースにOracle Graph Server and ClientディストリビューションのPL/SQLパッケージをインストールするときに作成されます。

表13-3 Oracle Databaseの権限とロール

ロール このロールで有効な操作 使用者
PGX_SESSION_CREATE ServerInstance.createSession APIを使用して新しいPGXセッションを作成します。 グラフ開発者およびグラフ・ユーザー
PGX_SERVER_GET_INFO 管理APIを使用してPGXインスタンスのステータス情報を取得します。 PGXを管理するユーザー
PGX_SERVER_MANAGE (PGX_SERVER_GET_INFOを含む) 管理APIを使用してPGXインスタンスを管理して、PGXを停止または再起動します。 PGXを管理するユーザー
PGX_SESSION_NEW_GRAPH 構成ファイルを使用してデータベースからロードするか、PGQLのCREATE PROPERTY GRAPH文を使用するか、別のグラフからサブグラフを作成することにより、PGXに新しいグラフを作成します。 グラフ開発者およびグラフ・ユーザー
PGX_SESSION_GET_PUBLISHED_GRAPH 別のユーザーによってパブリック・ネームスペースに公開されたグラフを問い合せて表示します。 グラフ開発者およびグラフ・ユーザー
PGX_SESSION_ADD_PUBLISHED_GRAPH (PGX_SESSION_GET_PUBLISHED_GRAPHを含む) グラフをパブリック・ネームスペースに公開します。 グラフ開発者
PGX_SESSION_COMPILE_ALGORITHM PGXアルゴリズムAPIを使用してアルゴリズムをコンパイルします。 グラフ開発者
PGX_SESSION_READ_MODEL PgxMLを使用してMLモデルをロードおよび使用します。 グラフ開発者
PGX_SESSION_MODIFY_MODEL PgxMLを使用してMLモデルを作成、トレーニングおよび格納します。 グラフ開発者

複数のロールをグループ化するために、いくつかの追加ロールも作成されます。これらを使用すると、データベース・ユーザーに複数のロールを簡単に付与できます。これらの追加ロールの詳細は、グラフ・サーバー・ロールのデフォルト権限へのマッピングを参照してください。

ロールの追加と削除および個々のユーザーの権限の定義の説明に従って、アプリケーションに有用な追加グループを作成できます。

13.2.3.2 認証にOracle Databaseを使用するための基本ステップ

このセクションで説明するステップに従うと、グラフ・サーバー(PGX)に対してユーザーを認証できます。

  1. Oracle Graph Server and Client (バージョン12.2以降)でサポートされているOracle Databaseバージョン(Autonomous Databaseを含む)を使用します。
  2. グラフ・サーバー(PGX)へのユーザー・アクセス権を付与および取り消すために、ADMINアクセス権(または非自律型データベースの場合はSYSDBAアクセス権)があることを確認します。
  3. グラフ・サーバーへのアクセス権を付与する予定のすべての既存ユーザーに、少なくともCREATE SESSION権限が付与されていることを確認します。
  4. Graph Serverが実行されているホストからJDBCを介してデータベースにアクセスできることを確認します。
  5. ADMIN (または非自律型データベースではSYSDBA)として、次のプロシージャを実行し、グラフ・サーバーで必要なロールを作成します。

    ノート:

    Oracle Graph Server and Clientインストールの一部としてPL/SQLパッケージをインストールする場合、このステップをスキップできます。次のコードに示すすべてのロールは、PL/SQLのインストールの一部として自動的に作成されます。Autonomous DatabaseOracle Graph Server and Clientを使用している場合のみ、それらを個別に追加する必要があります。このコードは、Oracle Cloud Infrastructureコンソール「データベース・アクション」を使用して実行できます。
    
    DECLARE
      PRAGMA AUTONOMOUS_TRANSACTION;
      role_exists EXCEPTION;
      PRAGMA EXCEPTION_INIT(role_exists, -01921);
      TYPE graph_roles_table IS TABLE OF VARCHAR2(50);
      graph_roles graph_roles_table;
    BEGIN
      graph_roles := graph_roles_table(
        'GRAPH_DEVELOPER',
        'GRAPH_ADMINISTRATOR',
        'GRAPH_USER',
        'PGX_SESSION_CREATE',
        'PGX_SERVER_GET_INFO',
        'PGX_SERVER_MANAGE',
        'PGX_SESSION_READ_MODEL',
        'PGX_SESSION_MODIFY_MODEL',
        'PGX_SESSION_NEW_GRAPH',
        'PGX_SESSION_GET_PUBLISHED_GRAPH',
        'PGX_SESSION_COMPILE_ALGORITHM',
        'PGX_SESSION_ADD_PUBLISHED_GRAPH');
      FOR elem IN 1 .. graph_roles.count LOOP
      BEGIN
        dbms_output.put_line('create_graph_roles: ' || elem || ': CREATE ROLE ' || graph_roles(elem));
        EXECUTE IMMEDIATE 'CREATE ROLE ' || graph_roles(elem);
      EXCEPTION
        WHEN role_exists THEN
          dbms_output.put_line('create_graph_roles: role already exists. continue');
        WHEN OTHERS THEN
          RAISE;
        END;
      END LOOP;
    EXCEPTION
      when others then
        dbms_output.put_line('create_graph_roles: hit error ');
        raise;
    END;
    /
  6. デフォルトの権限をロールGRAPH_DEVELOPER、GRAPH_USERおよびGRAPH_ADMINISTRATORに割り当てて、複数の権限をグループ化します。

    ノート:

    Oracle Graph Server and Clientインストールの一部としてPL/SQLパッケージをインストールする場合、このステップをスキップできます。次のコードに示す権限付与はすべて、PL/SQLのインストールの一部として自動的に実行されます。これらの付与を個別に実行する必要があるのは、Autonomous DatabaseOracle Graph Server and Clientを使用している場合のみです。このコードは、Oracle Cloud Infrastructureコンソール「データベース・アクション」を使用して実行できます。
    
    GRANT PGX_SESSION_CREATE TO GRAPH_ADMINISTRATOR;
    GRANT PGX_SERVER_GET_INFO TO GRAPH_ADMINISTRATOR;
    GRANT PGX_SERVER_MANAGE TO GRAPH_ADMINISTRATOR;
    GRANT PGX_SESSION_CREATE TO GRAPH_DEVELOPER;
    GRANT PGX_SESSION_NEW_GRAPH TO GRAPH_DEVELOPER;
    GRANT PGX_SESSION_GET_PUBLISHED_GRAPH TO GRAPH_DEVELOPER;
    GRANT PGX_SESSION_MODIFY_MODEL TO GRAPH_DEVELOPER;
    GRANT PGX_SESSION_READ_MODEL TO GRAPH_DEVELOPER;
    GRANT PGX_SESSION_CREATE TO GRAPH_USER;
    GRANT PGX_SESSION_GET_PUBLISHED_GRAPH TO GRAPH_USER;
  7. グラフ・サーバー(PGX)にアクセスする必要があるすべてのデータベース開発者にロールを割り当てます。たとえば:
    GRANT graph_developer TO <graphuser>

    <graphuser>はデータベースのユーザーです。個別の権限(PGX_の接頭辞が付いたロール)をユーザーに直接割り当てることもできます。

  8. 管理アクセス権が必要なユーザーに管理者ロールを割り当てます。たとえば:
    GRANT graph_administrator to <administratoruser>

    <administratoruser>は、データベースのユーザーです。

13.2.3.3 データベース認証のためのグラフ・サーバーの準備

インストールのpgx.confファイルを見つけます。

RPMを使用してグラフ・サーバーをインストールした場合、ファイルは/etc/oracle/graph/pgx.confにあります。

webappsパッケージを使用してTomcatまたはWebLogic Serverにデプロイする場合、pgx.confファイルは、Webアプリケーション・アーカイブ・ファイル(WARファイル)内のWEB-INF/classes/pgx.confにあります。

ヒント: Linuxでは、vimを使用すると、先に解凍しなくてもWARファイル内でファイルを直接編集できます。たとえば:
vim graph-server-<version>-pgx<version>.war

pgx.confファイル内で、レルム・オプションのjdbc_url行を見つけます。

...
"pgx_realm": {
  "implementation": "oracle.pg.identity.DatabaseRealm",
  "options": {
    "jdbc_url": "<REPLACE-WITH-DATABASE-URL-TO-USE-FOR-AUTHENTICATION>",
    "token_expiration_seconds": 3600,
...

前のステップで構成したデータベースを指すJDBC URLにテキストを置き換えます。たとえば:

...
"pgx_realm": {
  "implementation": "oracle.pg.identity.DatabaseRealm",
  "options": {
    "jdbc_url": "jdbc:oracle:thin:@myhost:1521/myservice",
    "token_expiration_seconds": 3600,
...

次に、rootユーザーとして、またはsudoを使用して次のコマンドを実行して、グラフ・サーバーを起動します。

sudo systemctl start pgx

Autonomous Databaseに接続するためのグラフ・サーバー(PGX)の準備

Autonomous Databaseインスタンスに接続するようにグラフ・サーバー(PGX)を構成できます。

グラフ・サーバー(PGX)インスタンスがオンプレミスで実行されているか、Oracle Cloud Infrastructure (OCI)で実行されているかに関係なく、次のステップを実行してAutonomous Databaseインスタンスに接続するためのサービス名を特定し、/etc/oracle/graph/pgx.confファイルのJDBC URLを更新することができます。

  1. Oracle Cloud Infrastructure (OCI)コンソールからAutonomous Databaseインスタンスのウォレットをダウンロードして保存します。詳細は、クライアント資格証明(ウォレット)のダウンロードを参照してください。
  2. ウォレットを/etc/oracle/graph/wallets/<dbname>の新しいサブディレクトリに解凍し、次のようにグループ権限を変更します。
    sudo unzip Wallet_<dbname>.zip -d /etc/oracle/graph/wallets/<dbname>
    sudo chgrp -R oraclegraph /etc/oracle/graph/wallets/<dbname>
  3. /etc/oracle/graph/wallets/<dbname>ディレクトリのtnsnames.oraファイルから接続識別子を特定します。たとえば、エントリは次のようになります。
    graphdb_low = 
        description= (retry_count=20)(retry_delay=3)
            (address=
                (protocol=tcps)(port=1522)
                (host=adwc.example.oraclecloud.com)
            )
            (connect_data=(service_name=graphdb_low.adwc.oraclecloud.com))
            (security=(ssl_server_cert_dn="CN=adwc.example.oraclecloud.com, OU=Oracle BMCS US, O=Oracle Corporation, L=Redwood City, ST=California, C=US"))
    )

    前述の例では、graphdb_lowが接続識別子です。

  4. /etc/oracle/graph/pgx.confファイルのJDBC URLを、前のステップで特定した接続識別子と解凍したウォレット・ファイルへのディレクトリ・パスを使用して更新します。たとえば:
    ...
    "pgx_realm": {
      "implementation": "oracle.pg.identity.DatabaseRealm",
      "options": {
        "jdbc_url": "jdbc:oracle:thin:@graphdb_low?TNS_ADMIN=/etc/oracle/graph/wallets/<dbname>",
        "token_expiration_seconds": 3600,
    ...
    
  5. 最後に、次のように、グラフ・サーバーを再起動します。
    sudo systemctl restart pgx
13.2.3.4 キーストアへのデータベース・パスワードの格納

PGXでは、データベースからメモリーにデータを読み込むためにデータベース・アカウントが必要です。アカウントは、権限の低いアカウントである必要があります(グラフ・データを使用したセキュリティのベスト・プラクティスを参照)。

Oracle Databaseからグラフ・サーバー(PGX)へのグラフの読込みで説明されているように、トークンがそのデータベース・ユーザーに対して有効であるかぎり、追加の認証を指定しなくてもデータベースからグラフ・サーバーにデータを読み込むことができます。ただし、別のユーザーからグラフにアクセスする場合は、そのユーザーのパスワードが保護のためにJavaキーストア・ファイルに格納されているかぎり、それは可能です。

JDKにバンドルされたkeytoolコマンドを使用して、そのようなキーストア・ファイルをコマンドラインで生成できます。例として次のスクリプトを参照してください。

# Add a password for the 'database1' connection
keytool -importpass -alias database1 -keystore keystore.p12
# 1. Enter the password for the keystore
# 2. Enter the password for the database
 
# Add another password (for the 'database2' connection)
keytool -importpass -alias database2 -keystore keystore.p12
 
# List what's in the keystore using the keytool
keytool -list -keystore keystore.p12

Javaバージョン8以下を使用している場合は、前述の例のkeytoolコマンドに追加パラメータ-storetype pkcs12を渡す必要があります。

複数のパスワードを1つのキーストア・ファイルに格納できます。各パスワードは、指定された別名を使用して参照できます。

PGXグラフ構成ファイルの作成による、リレーショナル表からのグラフの直接ロード

次の例では、HRサンプル・データのサブセットをリレーショナル表からPGXにグラフとして直接ロードします。構成ファイルでは、頂点およびエッジ・プロバイダの概念を使用して、リレーショナル形式からグラフ形式へのマッピングを指定します。

ノート:

vertex_providersプロパティおよびedge_providersプロパティを指定すると、データがグラフの最適化表現にロードされます。

{
    "name":"hr",
    "jdbc_url":"jdbc:oracle:thin:@myhost:1521/orcl",
    "username":"hr",
    "keystore_alias":"database1",
    "vertex_id_strategy": "no_ids",
    "vertex_providers":[
        {
            "name":"Employees",
            "format":"rdbms",
            "database_table_name":"EMPLOYEES",
            "key_column":"EMPLOYEE_ID",
            "key_type": "string",
            "props":[
                {
                    "name":"FIRST_NAME",
                    "type":"string"
                },
                {
                    "name":"LAST_NAME",
                    "type":"string"
                },
                {
                    "name":"EMAIL",
                    "type":"string"
                },
                {
                    "name":"SALARY",
                    "type":"long"
                }
            ]
        },
        {
            "name":"Jobs",
            "format":"rdbms",
            "database_table_name":"JOBS",
            "key_column":"JOB_ID",
            "key_type": "string",
            "props":[
                {
                    "name":"JOB_TITLE",
                    "type":"string"
                }
            ]
        },
        {
            "name":"Departments",
            "format":"rdbms",
            "database_table_name":"DEPARTMENTS",
            "key_column":"DEPARTMENT_ID",
            "key_type": "string",
            "props":[
                {
                    "name":"DEPARTMENT_NAME",
                    "type":"string"
                }
            ]
        }
    ],
    "edge_providers":[
        {
            "name":"WorksFor",
            "format":"rdbms",
            "database_table_name":"EMPLOYEES",
            "key_column":"EMPLOYEE_ID",
            "source_column":"EMPLOYEE_ID",
            "destination_column":"EMPLOYEE_ID",
            "source_vertex_provider":"Employees",
            "destination_vertex_provider":"Employees"
        },
        {
            "name":"WorksAs",
            "format":"rdbms",
            "database_table_name":"EMPLOYEES",
            "key_column":"EMPLOYEE_ID",
            "source_column":"EMPLOYEE_ID",
            "destination_column":"JOB_ID",
            "source_vertex_provider":"Employees",
            "destination_vertex_provider":"Jobs"
        },
        {
            "name":"WorkedAt",
            "format":"rdbms",
            "database_table_name":"JOB_HISTORY",
            "key_column":"EMPLOYEE_ID",
            "source_column":"EMPLOYEE_ID",
            "destination_column":"DEPARTMENT_ID",
            "source_vertex_provider":"Employees",
            "destination_vertex_provider":"Departments",
            "props":[
                {
                    "name":"START_DATE",
                    "type":"local_date"
                },
                {
                    "name":"END_DATE",
                    "type":"local_date"
                }
            ]
        }
    ]
}

データの読取り

ここで、次のいずれかの方法を使用して、キーストアと構成ファイルの両方をPGXに渡すことにより、データベースに接続してデータを読み取るようPGXに指示できます。

  • グラフ・シェルで対話的に

    グラフ・シェルを使用している場合は、--secret_storeオプションで起動します。キーストア・パスワードを入力し、現在のセッションにキーストアをアタッチするよう要求されます。たとえば:

    cd /opt/oracle/graph
    ./bin/opg4j --secret_store /etc/my-secrets/keystore.p12
     
     enter password for keystore /etc/my-secrets/keystore.p12:
    

    シェルの内部では、通常のPGX APIを使用し、readGraphWithProperties APIに書き込んだJSONファイルを渡すことで、グラフをメモリーに読み込むことができます。

    opg4j> var graph = session.readGraphWithProperties("config.json")
    graph ==> PgxGraph[name=hr,N=215,E=415,created=1576882388130]
    
  • PGXの事前ロード済グラフとして
    サーバー管理者として、サーバー起動時にメモリーにグラフをロードするようPGXに指定できます。そのためには、/etc/oracle/graph/pgx.confにあるPGX構成ファイルを変更し、グラフ構成ファイルのパスをpreload_graphsセクションに追加します。たとえば:
    {
      ...
      "preload_graphs": [{
        "name": "hr", 
        "path": "/path/to/config.json"
      }],
      "authorization": [{
        "pgx_role": "GRAPH_DEVELOPER",
        "pgx_permissions": [{
          "preloaded_graph": "hr",
          "grant": "read"
        }]
      },	
    	....
      ]
    }
    rootユーザーとして、/etc/systemd/system/pgx.serviceにあるサービス・ファイルを編集し、ExecStartコマンドを変更してパスワードを含むキーストアの場所を指定します。
    
    ExecStart=/bin/bash start-server --secret-store /etc/keystore.p12

    ノート:

    これを機能させるため、/etc/keystore.p12をパスワードで保護しないでください。かわりに、oraclegraphユーザーのみが読取り可能なファイル・システム権限によってファイルを保護します。
    ファイルを編集したら、次を使用して変更をリロードします。
    sudo systemctl daemon-reload
    最後に、サーバーを起動します。
    sudo systemctl start pgx
  • Javaアプリケーション

    キーストアをJavaアプリケーションに登録するには、PgxSessionオブジェクトでregisterKeystore() APIを使用します。たとえば:

    import oracle.pgx.api.*;
     
    class Main {
       
      public static void main(String[] args) throws Exception {
        String baseUrl = args[0];
        String keystorePath = "/etc/my-secrets/keystore.p12";
        char[] keystorePassword = args[1].toCharArray();
        String graphConfigPath = args[2];
        ServerInstance instance = Pgx.getInstance(baseUrl);
        try (PgxSession session = instance.createSession("my-session")) {
          session.registerKeystore(keystorePath, keystorePassword);
          PgxGraph graph = session.readGraphWithProperties(graphConfigPath);
          System.out.println("N = " + graph.getNumVertices() + " E = " + graph.getNumEdges());
        }
      }
    }
    
    前述のサンプル・プログラムは、Oracle Graphクライアント・パッケージを使用してコンパイルおよび実行できます。たとえば:
    cd $GRAPH_CLIENT
    // create Main.java with above contents
    javac -cp 'lib/*' Main.java
    java -cp '.:conf:lib/*' Main http://myhost:7007 MyKeystorePassword path/to/config.json
    

グラフ・クライアント・アプリケーションのセキュア・コーディングのヒント

グラフ・クライアント・アプリケーションを作成する場合は、いずれのファイルまたはコードにもパスワードやその他のシークレットをクリア・テキストで格納しないでください。

コマンドライン引数からパスワードやその他のシークレットを受け入れないでください。かわりに、JDKからConsole.html#readPassword()を使用してください。

13.2.3.5 グラフを公開する権限の追加

グラフ・ビジュアライゼーション・アプリケーションでグラフ・サーバー(PGX)セッション内のグラフを表示するには、2つの方法があります。

ブラウザでグラフ・ビジュアライゼーション・ツールにログインすると、JShellセッションまたはアプリケーション・セッションとは異なるセッションになります。グラフ・ビジュアライゼーション・セッションで、JShellセッションまたはアプリケーション・セッションで作業しているグラフを視覚化するには、次の2つのステップのいずれかを実行します。

  1. PgxSession APIを使用して作業セッションのセッションIDを取得し、グラフ・ビジュアライゼーション・アプリケーションへのログイン時にそのセッションIDを使用します。これが推奨オプションです。
    opg4j> session.getId();
    $2 ==> "898bdbc3-af80-49b7-9a5e-10ace6c9071c"  //session id
    

    または

  2. PGX_SESSION_ADD_PUBLISHED_GRAPH権限を付与し、次のようにグラフを公開します。
    1. 次の文に示すように、グラフを視覚化するユーザーに、データベースのPGX_SESSION_ADD_PUBLISHED_GRAPHロールを付与します。
      GRANT PGX_SESSION_ADD_PUBLISHED_GRAPH TO <graphuser>
    2. 公開APIを使用してグラフを視覚化する準備ができたら、グラフを公開します。

    ノート:

13.2.3.6 トークンの有効期限

デフォルトでは、トークンは1時間有効です。

内部的には、グラフ・クライアントは30分未満で期限が切れるトークンを自動的に更新します。これは、データベースで資格証明を再認証することでも構成できます。デフォルトでは、トークンは最大で24回だけ自動的に更新できるため、その後は再度ログインする必要があります。

自動更新の最大数に達した場合は、GraphServer#reauthenticate (instance, "<user>", "<password>") APIを使用すると、セッション・データを失うことなく再度ログインできます。

ノート:

再認証前にセッションがタイムアウトした場合、セッション・データが失われる可能性があります。

たとえば:


opg4j> var graph = session.readGraphWithProperties(config) // fails because token cannot be renewed anymore
opg4j> GraphServer.reauthenticate(instance, "<user>", "<password>".toCharArray()) // log in again
opg4j> var graph = session.readGraphWithProperties(config) // works now 
 
13.2.3.7 拡張アクセス構成

pgx.confファイルのpgx_realmブロック内の次のフィールドをカスタマイズして、ログイン動作をカスタマイズできます。

表13-4 拡張アクセス構成のオプション

フィールド名 説明 デフォルト
token_expiration_seconds 生成されたベアラー・トークンが期限切れになるまでの秒数。 3600 (1時間)
refresh_time_before_token_expiry_seconds トークンが期限切れになる前に自動的にリフレッシュされるまでの秒数。この値は常にtoken_expiration_seconds値よりも小さくする必要があります。 1800
connect_timeout_milliseconds 指定したJDBC URLへの接続試行がタイムアウトになり、ログイン試行が拒否されるまでの時間(ミリ秒)。 10000
max_pool_size 各ユーザーに許可される最大JDBC接続数。この数に達すると、現行ユーザーのデータベースからの読取り試行は失敗します。 64
max_num_users 許容するアクティブなサインイン済ユーザーの最大数。この数に達すると、グラフ・サーバーはログイン試行を拒否します。 512
max_num_token_refresh トークンを自動的にリフレッシュできる最大回数。この回数を超えると、ログインが再度要求されます。 24

ノート:

前述のオプションは、レルムの実装がoracle.pg.identity.DatabaseRealmに構成されている場合にのみ機能します。
13.2.3.8 ロールおよび権限のカスタマイズ

ロールを追加および削除し、ロールの権限を指定することで、ロール・マッピングに対する権限を全面的にカスタマイズできます。ロールのかわりに個々のユーザーを認可することもできます。

このトピックでは、権限マッピングをカスタマイズする方法の例を示します。

13.2.3.8.1 APIを使用したグラフ権限のチェック

次のPGX APIメソッドを使用して、ロールおよびグラフ権限を確認できます。

表13-5 グラフ権限をチェックするためのAPI

クラス メソッド 説明
ServerInstance getPgxUsername() 現行ユーザーの名前
ServerInstance getPgxUserRoles() 現行ユーザーのロール名
ServerInstance getPgxGenericPermissions() 現行ユーザーのグラフ以外の(システム)権限:
  • Pgxシステム権限
  • ファイルの場所の権限
PgxGraph getPermission() 現行ユーザーのグラフ・インスタンスに対する権限

次に示すように、JShellのAPIを使用して、すべての権限関連の情報を取得できます。

/bin/opg4j -b "https://<host>:<port>" -u "<graphuser>"
opg4j> instance
instance ==> ServerInstance[embedded=false,baseUrl=https://<host>:<port>,serverVersion=null]
opg4j>instance.getPgxUsername()
$2 ==> "ORACLE"
opg4j>instance.getPgxUserRoles()
$3 ==> [GRAPH_DEVELOPER]
opg4j>instance.getPgxGenericPermissions()
$4 ==> [PGX_SESSION_CREATE, PGX_SESSION_READ_MODEL, PGX_SESSION_ADD_PUBLISHED_GRAPH, PGX_SESSION_NEW_GRAPH, PGX_SESSION_GET_PUBLISHED_GRAPH, PGX_SESSION_MODIFY_MODEL]
opg4jvar g = session.readGraphWithProperties("bank_graph_analytics.json")
g ==> PgxGraph[name=bank_graph_analytics,N=1000,E=5001,created=1625697341555]
opg4j>g.getPermission() // To get graph permissions
$9 ==> MANAGE
import oracle.pg.rdbms.*;
import java.sql.Connection;
import java.sql.Statement;
import oracle.pg.rdbms.pgql.PgqlConnection;
import oracle.pg.rdbms.pgql.PgqlStatement;
import oracle.pgx.api.*;
import oracle.ucp.jdbc.PoolDataSourceFactory;
import oracle.ucp.jdbc.PoolDataSource;
import java.nio.file.Files;
import java.nio.file.Path;

/**
 * This example shows how to get all permissions.
 */
public class GetPermissions
{

  public static void main(String[] args) throws Exception
  {
    int idx=0;
    String host               = args[idx++]; 
    String port               = args[idx++]; 
    String sid                = args[idx++]; 
    String user               = args[idx++]; 
    String password           = args[idx++];
    String graph              = args[idx++];
        
    Connection conn = null;
    PgxPreparedStatement stmt = null;
  
    try {
      
      // Get a jdbc connection
      PoolDataSource  pds = PoolDataSourceFactory.getPoolDataSource();
      pds.setConnectionFactoryClassName("oracle.jdbc.pool.OracleDataSource");
      pds.setURL("jdbc:oracle:thin:@"+host+":"+port +"/"+sid);
      pds.setUser(user);
      pds.setPassword(password);     
      conn = pds.getConnection();
      conn.setAutoCommit(false);
      
      ServerInstance instance = GraphServer.getInstance("http://localhost:7007", user, password.toCharArray());
      PgxSession session = instance.createSession("my-session");

      var statement = Files.readString(Path.of("/media/sf_Linux/Java/create-pg.pgql"));
      stmt = session.preparePgql(statement);
      stmt.execute();

      PgxGraph g = session.getGraph(graph);
      System.out.println("Graph: "+ g);
      
      String userName = instance.getPgxUsername();
      var userRoles = instance.getPgxUserRoles();
      var genericPermissions = instance.getPgxGenericPermissions();
      String graphPermission = g.getPermission().toString();

      System.out.println("Username is " + userName);
      System.out.println("User Roles are " + userRoles);
      System.out.println("Generic permissions are " + genericPermissions);
      System.out.println("Graph permission is " + graphPermission);

    }

    finally {
      // close the sql statment
      if (stmt != null) {
        stmt.close();
      }
      // close the connection
      if (conn != null) {
        conn.close();
      }
    }
  }
}

実行すると、コードの出力は次のようになります。

Graph: PgxGraph[name=BANK_GRAPH_PG,N=1000,E=5001,created=1625731370402]
Username is ORACLE
User Roles are [GRAPH_DEVELOPER]
Generic permissions are [PGX_SESSION_MODIFY_MODEL, PGX_SESSION_CREATE, PGX_SESSION_NEW_GRAPH, PGX_SESSION_READ_MODEL, PGX_SESSION_ADD_PUBLISHED_GRAPH, PGX_SESSION_GET_PUBLISHED_GRAPH]
Graph permission is MANAGE
13.2.3.8.2 ロールの追加と削除

認可リストを変更することで、新しいロール権限マッピングを追加したり、既存のマッピングを削除できます。

たとえば:


CREATE ROLE MY_CUSTOM_ROLE_1
GRANT PGX_SESSION_CREATE TO MY_CUSTOM_ROLE1 
GRANT PGX_SERVER_GET_INFO TO MY_CUSTOM_ROLE1 
GRANT MY_CUSTOM_ROLE1 TO SCOTT
13.2.3.8.3 個々のユーザーの権限の定義

ロールの権限の定義に加えて、個々のユーザーの権限を定義できます。

たとえば:

GRANT PGX_SESSION_CREATE TO SCOTT 
GRANT PGX_SERVER_GET_INFO TO SCOTT 
13.2.3.8.4 カスタム・グラフ・アルゴリズムを使用する権限の定義

開発者がカスタム・グラフ・アルゴリズムをコンパイルできるよう、権限を定義できます。

たとえば、
  1. 次の静的権限を権限のリストに追加します。
    GRANT PGX_SESSION_COMPILE_ALGORITHM TO GRAPH_DEVELOPER
13.2.3.9 グラフ・サーバーへのアクセス権の取消し

ユーザーがグラフ・サーバーにアクセスできることを取り消すには、pgx.confファイルでアクセス・ルールを定義した方法に応じて、データベースからユーザーを削除するか、ユーザーから対応するロールを取り消します。

たとえば:

REVOKE graph_developer FROM scott

グラフの権限の取消し

グラフに対するMANAGE権限を持っている場合は、PgxGraph#revokePermission APIを使用して、ユーザーまたはロールからグラフ・アクセス権を取り消すことができます。たとえば:

PgxGraph g = ...
g.revokePermission(new PgxRole("GRAPH_DEVELOPER")) // revokes previously granted role access
g.revokePermission(new PgxUser("SCOTT")) // revokes previously granted user access
13.2.3.10 カスタム認可ルールの例

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

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

他のユーザーとのグラフの共有は、可能な場合にはOracle Databaseで行ってください。データベース表でGRANT文を使用して、他のユーザーが表からグラフを作成できるようにします。

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

表13-6 許可された権限

権限 この権限によって有効になる操作
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権限を受け取るユーザーのユーザー名です。

例13-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権限を付与できます。

例13-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'

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

例13-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
13.2.3.11 グラフ・サーバー(PGX)に対するKerberos対応の認証

グラフ・サーバー(PGX)では、Kerberosがアイデンティティ・プロバイダとして有効になっているOracle Databaseを使用してユーザーを認証できます。

Kerberosチケットを使用してグラフ・サーバーにログインでき、グラフ・サーバーで実行できるアクションは、Oracle Databaseで付与されているロールによって決まります。

13.2.3.11.1 前提条件

グラフ・サーバー(PGX)でKerberos認証を有効にするには、次のシステム要件を満たす必要があります。

  • データベースでKerberos認証が有効になっている必要があります。詳細は、Kerberos認証の構成を参照してください。
  • グラフ・サーバーが実行されるホストからデータベースとKerberos認証サーバーの両方に到達可能である必要があります。
  • データベースがグラフ・サーバー認証用に準備されています。つまり、関連するグラフ・ロールが、グラフ・サーバーにログインするユーザーに付与されています。
13.2.3.11.2 Kerberos認証のためのグラフ・サーバーの準備
グラフ・サーバー(PGX)でKerberos認証を有効にするステップは、次のとおりです。
  1. インストールのpgx.confファイルを見つけます。

    ノート:

    RPMを使用してグラフ・サーバーをインストールした場合、ファイルは/etc/oracle/graph/pgx.confにあります。
  2. pgx.confファイル内で、レルム・オプションのkrb5_conf_file行を探します。
    "pgx_realm": {
      "implementation": "oracle.pg.identity.DatabaseRealm",
      "options": {
        ...
        "krb5_conf_file": "<REPLACE-WITH-KRB5-CONF-FILE-PATH-TO-ENABLE-KERBEROS-AUTHENTICATION>",
        "krb5_ticket_cache_dir": "/dev/shm",
        "krb5_max_cache_size": 1024
      }
    },
  3. そのテキストを、データベースおよびユーザー認証に使用するkrb5.confファイルに置き換えます。たとえば:
    "pgx_realm": {
      "implementation": "oracle.pg.identity.DatabaseRealm",
      "options": {
        ...
        "krb5_conf_file": "/etc/krb5.conf",
        "krb5_ticket_cache_dir": "/dev/shm",
        "krb5_max_cache_size": 1024
      }
    },

    ノート:

    krb5_conf_fileオプションに指定するファイルは、有効であり、かつグラフ・サーバーによって読取り可能である必要があります。krb5_conf_file値を置き換えない場合、または値が空の場合、グラフ・サーバーではKerberos認証が使用されません。

    また、クライアントによって提供されたKerberosチケットを一時的に格納するためにグラフ・サーバーで使用されるキャッシュ・ディレクトリ、および新しいログイン試行が拒否されるようになる最大キャッシュ・サイズを設定できます。キャッシュ・サイズは、グラフ・サーバー上でアクティブな同時Kerberosセッションの最大数を表します。

13.2.3.11.3 Kerberosチケットを使用したグラフ・サーバーへのログイン
Kerberosチケットを使用してグラフ・サーバー(PGX)にログインするステップは、次のとおりです。
  1. okinitコマンドを使用して、新しいKerberosチケットを作成します。
    $ okinit <username>

    これにより、パスワードの入力を求められ、新しいKerberosチケットが作成されます。

  2. JShellを使用して、ベースURLパラメータのみを指定してリモート・グラフ・サーバーに接続します。
    $ opg4j -b https://localhost:7007
    または、Pythonクライアントを使用します。
    $ opg4py -b https://localhost:7007
    Linuxでは、JShellおよびPython対話型クライアント・シェルによってローカル・ファイル・システム上のKerberosチケットが自動的に検出され、それを使用してグラフ・サーバーで認証されます。
  3. 自動検出が機能しない場合は、チケットをシェルに明示的に渡すこともできます。oklistコマンドを実行して、ローカル・ファイル・システム上のチケットの場所を探します。
    $ oklist
     
    Kerberos Utilities for Linux: Version 19.0.0.0.0 - Production on 31-MAR-2021 15:26:46
     
    Copyright (c) 1996, 2019 Oracle.  All rights reserved.
     
    Configuration file : /etc/krb5.conf.
    Ticket cache: FILE:/tmp/krb5cc_54321
    Default principal: oracle@realm
  4. --kerberos_ticketパラメータを使用して、Kerberosチケットのパスを指定します。たとえば、JShellを使用します。
    $ opg4j -b https://localhost:7007 --kerberos_ticket /tmp/krb5cc_54321
    または、Pythonクライアントを使用します。
    $ opg4py -b https://localhost:7007 --kerberos_ticket /tmp/krb5cc_54321

    Javaクライアント・プログラム(または埋込みモードでJShell)を使用している場合は、次のAPIを使用してサーバー・インスタンスを取得できます。

    ...
    ServerInstance instance = GraphServer.getInstance("https://localhost:7007", "/tmp/krb5cc_54321");
    PgxSession session = instance.createSession("my-session");
    ...

    Pythonクライアント・プログラム(または埋込みモードでopg4py)を使用している場合は、次のAPIを使用してサーバー・インスタンスを取得できます

    ...
    instance = graph_server.get_instance("https://localhost:7007", "/tmp/krb5cc_54321")
    session = instance.create_session("my-session")
    ...
    リモート・グラフ・サーバーに接続する場合は、Oracle Graph Clientがインストールされていることのみが必要です。たとえば:
    import sys
    import pypgx as pgx
     
    sys.path.append("/path/to/graph/client/oracle-graph-client-21.2.0/python/pypgx/pg/rdbms")
     
    import graph_server
      
    base_url = "https://localhost:7007"
    kerberos_ticket = "/tmp/krb5cc_54321"
      
    instance = graph_server.get_instance(base_url, kerberos_ticket)
    print(instance)

13.3 Oracle Graph Clientのインストール

クライアントCLIおよびグラフ・ビジュアライゼーションWebクライアントを使用して、様々なグラフ機能を操作できます。

次の各項では、各種クライアントをインストールするステップについて説明します:

13.3.1 グラフ・クライアント

Oracle Graphクライアントのインストールでは、JavaおよびPythonクライアントがサポートされています。

次の各項では、クライアントをインストールするステップについて説明します:

13.3.1.1 Oracle Graph Javaクライアント

Oracle Graph Server and Clientに付属しているoracle-graph-client-23.2.0.zipファイルからJavaクライアントをインストールしたり、Maven CentralでJavaクライアントを使用できます。

13.3.1.1.1 グラフ・サーバーおよびクライアント・ダウンロードからのJavaクライアントのインストール

Oracle Graph Client 23.2.0のzipファイルをダウンロードし、Javaクライアントをインストールできます。

Javaクライアントをインストールするための前提条件は次のとおりです。
  • Unixベースのオペレーション・システム(Linuxなど)またはmacOSやMicrosoft Windows
  • Oracle JDK 11またはJDK 17

ノート:

Open JDKの不具合により、JShellセッションにコピー・アンド・ペーストしようとするとデッドロックが発生するため、次のOracle JDKバージョンは使用しないようにすることをお薦めします。
  • JDK 11.0.9
  • JDK 11.0.10
  • JDK 11.0.11
  • JDK 11.0.12
  1. Oracle Software CloudからOracle Graph Clientをダウンロードします。
    たとえば、oracle-graph-client-23.2.0.zipです。
  2. 選択したディレクトリに、このファイルを解凍します。
  3. 自己署名キーストアを信頼するようにクライアントを構成します。詳細は、「自己署名キーストアを信頼するためのクライアントの構成」を参照してください。
  4. 次に示すように、OPG4Jシェルを起動してグラフ・サーバー(PGX)に接続します。
    cd <CLIENT_INSTALL_DIR>
    ./bin/opg4j --base_url https://<host>:7007 --username <graphuser>
    

    前述のコードで:

    • <CLIENT_INSTALL_DIR>: シェル実行可能ファイルが置かれているディレクトリ。

      シェル実行可能ファイルは、通常、サーバーのインストール後は/opt/oracle/graph/binにあり、クライアントのインストール後は<CLIENT_INSTALL_DIR>/binにあります。

    • <host>: サーバー・ホスト

      ノート:

      グラフ・サーバー(PGX)は、デフォルトでポート7007でリスニングします。必要に応じて、サーバー構成ファイル(server.conf)内のポート値を変更して、別のポートでリスニングするようにグラフ・サーバーを構成できます。詳細は、グラフ・サーバー(PGX)の構成を参照してください。
    • <graphuser>: データベース・ユーザー

    データベース・パスワードの入力を要求されます。

    OPG4Jシェルを起動できる様々な方法の詳細は、OPG4Jシェルの起動を参照してください。

    OPG4Jシェルが起動し、次に示すコマンドライン・プロンプトが表示されます。

    For an introduction type: /help intro
    Oracle Graph Server Shell 23.2.0
    Variables instance, session, and analyst ready to use.
    opg4j>

    関連項目:

    Java APIの詳細は、Java APIリファレンスを参照してください
13.3.1.1.2 Maven CentralでのOracle Graph Java Clientの使用

Maven Centralからプロパティ・グラフJavaクライアントを取得できます。

グラフJavaクライアント用のMavenアーティファクトは、次のとおりです。
  • グループ名: com.oracle.database.graph
  • アーティファクト名: opg-client
  • バージョン: 23.20

次のステップを実行して、Maven CentralからグラフJavaクライアントを使用できます。

  1. Apache Mavenをシステムにダウンロードしてインストールします。
    詳細は、Apache Maven Projectを参照してください。
  2. mvnコマンドを使用してbinフォルダをPATH変数に追加します。
  3. Mavenプロジェクトをビルドし、プロジェクト・ディレクトリにナビゲートします。
  4. 次のように、pom.xmlファイルを編集します。
    1. 次のように、グラフJavaクライアントの依存関係を追加します。
      <dependencies>
          <dependency>
            <groupId>com.oracle.database.graph</groupId>
            <artifactId>opg-client</artifactId>
            <version>23.2.0</version>
          </dependency>
      </dependencies>

      ノート:

      Gradleをビルド・ツールとして使用している場合、Javaクライアントの同等の依存関係宣言は次のとおりです。

      implementation group: 'com.oracle.database.graph', name: 'opg-client', version: '23.2.0'

    2. JavaクライアントがSpoofax Language Workbenchライブラリに依存してPGQL問合せをコンパイルするため、次のリポジトリを追加します。
      <repositories>
          <repository>
            <id>spoofax</id>
            <url>https://artifacts.metaborg.org/content/repositories/releases</url>
          </repository>
      </repositories>
  5. 必要に応じて、ステップ4をスキップし、<project_dir>/POM.xmlファイルに次の最小POM構成をコピーできます。
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.mycompany.app</groupId>
      <artifactId>my-app</artifactId>
      <packaging>jar</packaging>
      <version>1.0-SNAPSHOT</version>
      <name>my-app</name>
      <repositories>
        <repository>
          <id>spoofax</id>
          <url>https://artifacts.metaborg.org/content/repositories/releases</url>
        </repository>       
      </repositories>
      <dependencies>
        <dependency>
          <groupId>com.oracle.database.graph</groupId>
          <artifactId>opg-client</artifactId>
          <version>23.2.0</version>
        </dependency>
      </dependencies>
    </project>
  6. <project_dir>/src/main/java/com/mycompany/appでJavaコードを作成し、Mavenを使用してコンパイルします。
    たとえば、次のコードは<project_dir>/src/main/java/com/mycompany/app/App1.javaファイルに格納されます。
    package com.mycompany.app;
     
    import java.sql.DriverManager;
    import java.sql.Connection;
    import java.sql.Statement;
    import oracle.pg.rdbms.pgql.PgqlConnection;
    import oracle.pg.rdbms.pgql.PgqlStatement;
    import oracle.pg.rdbms.pgql.PgqlResultSet;
    import oracle.pgx.api.*;
    import oracle.pg.rdbms.GraphServer;
    import oracle.pg.rdbms.pgql.jdbc.PgqlJdbcRdbmsDriver;
    
    public class App1 {
     
      public static void main(String[] args) throws Exception {
        String dbConnectString = args[0];
        String username = args[1];
        String password = args[2];
     
        // Obtain a JDBC database connection
        DriverManager.registerDriver(new PgqlJdbcRdbmsDriver());
        String jdbcUrl = "jdbc:oracle:pgql:@" + dbConnectString;
        System.out.println("connecting to " + jdbcUrl);
    
        try (Connection conn = DriverManager.getConnection(jdbcUrl, username, password)) {
          conn.setAutoCommit(false);
    
          // Create PGQL connection
          PgqlConnection pgqlConn = PgqlConnection.getConnection(conn);
    
          // Create a PGQL statement to execute PGQL queries
          PgqlStatement pgqlStmt = pgqlConn.createStatement();
    
          // Create a property graph view using the CREATE PROPERTY GRAPH statement
          String pgViewName = "BANK_GRAPH_VIEW";
          String createPgViewQuery = 
              "CREATE PROPERTY GRAPH " + pgViewName + " " +
              "VERTEX TABLES ( BANK_ACCOUNTS AS ACCOUNTS " +
              "KEY (ID) " +
              "LABEL ACCOUNTS " +
              "PROPERTIES (ID, NAME)" +
              ") " +
              "EDGE TABLES ( BANK_TXNS AS TRANSFERS " +
              "KEY (FROM_ACCT_ID, TO_ACCT_ID, AMOUNT) " +
              "SOURCE KEY (FROM_ACCT_ID) REFERENCES ACCOUNTS (ID) " +
              "DESTINATION KEY (TO_ACCT_ID) REFERENCES ACCOUNTS (ID) " +
              "LABEL TRANSFERS " +
              "PROPERTIES (FROM_ACCT_ID, TO_ACCT_ID, AMOUNT, DESCRIPTION)" +
              ") OPTIONS(PG_VIEW)";
    
          pgqlStmt.execute(createPgViewQuery);
    
          // Execute a query to retrieve the first 10 elements of the graph
          String pgqlQuery = 
              "SELECT e.from_acct_id, e.to_acct_id, e.amount FROM " +
              "MATCH (n:ACCOUNTS) -[e:TRANSFERS]-> (m:ACCOUNTS) ON " +
              pgViewName + " LIMIT 10";
    
          PgqlResultSet rs = pgqlStmt.executeQuery(pgqlQuery);
          rs.print();
    
          // Drop the property graph view using the DROP PROPERTY GRAPH statement
          String dropPgViewQuery = "DROP PROPERTY GRAPH " + pgViewName;
          pgqlStmt.execute(dropPgViewQuery);
        }
        System.exit(0);
      }
    }

    その後、プロジェクト・ディレクトリにナビゲートして次のコマンドを実行することで、前述のコードをコンパイルして実行できます。

    mvn compile exec:java -Dexec.mainClass="com.mycompany.app.App1"-Dexec.arguments='<db-connect-string>,<username>,<password>'

    正常に処理されると、コードによって次のような出力が生成されます。実際の出力は、<db-connect-string>によって異なる場合があります。

    [INFO] --- exec-maven-plugin:3.1.0:java (default-cli) @ my-app ---
    connecting to jdbc:oracle:pgql:@myhost:1521/oradb
    name = Baz
13.3.1.2 Oracle Graph Pythonクライアント

Pythonクライアントをインストールするには、Oracle Graph Server and Clientに付属しているoracle-graph-client-23.2.0.zipファイルをダウンロードするか、PyPIからダウンロードします。

あるいは、Pythonクライアントを埋込みモードでインストールすることもできます。

13.3.1.2.1 Pythonクライアントをインストールするための前提条件
Graph Server and ClientダウンロードからPythonクライアントをインストールする前に:
  1. ご使用のシステムが次の要件を満たしていることを確認してください。
    • オペレーティング・システム: Linux
    • Oracle JDK 8以上
    • Python 3.8または3.9

      正しいバージョンのPythonクライアントを使用していることを確認するには、次のコマンドを実行します。

      python3 --version

      Oracle LinuxでのPython 3のインストールの詳細は、Python for Oracle Linuxを参照してください。

    ノート:

    他のオペレーティング・システムまたはPythonバージョンを使用している場合は、PyPIからPythonクライアントをインストールできます。詳細は、PyPIからのPythonクライアントのインストールを参照してください。
  2. python3-develがシステムにインストールされていることを確認します。
    sudo yum install python3-devel
13.3.1.2.2 グラフ・サーバーおよびクライアント・ダウンロードからのPythonクライアントのインストール

Graph Server and Clientのダウンロードからoracle-graph-client-23.2.0のzipファイルをダウンロードして、Pythonクライアントをインストールできます。

Pythonクライアントをインストールする前に、システムが必要な前提条件をすべて満たしていることを確認してください。

次のステップを実行して、Pythonクライアントを使用してインストールおよび接続できます:

  1. Oracle Software CloudからOracle Graph Clientをダウンロードします。
    たとえば、oracle-graph-client-23.2.0.zipです。
  2. pipを使用してクライアントをインストールします。
    たとえば、
    pip3 install --user oracle-graph-client-23.2.0.zip
  3. 自己署名キーストアを信頼するようにクライアントを構成します。詳細は、「自己署名キーストアを信頼するためのクライアントの構成」を参照してください。
  4. 次のコマンドを実行することで、OPG4Pyシェルを起動してグラフ・サーバー(PGX)に接続します。
    cd <CLIENT_INSTALL_DIR>
    ./bin/opg4py --base_url https://<host>:7007

    前述のコードで:

    • <CLIENT_INSTALL_DIR>: シェル実行可能ファイルが置かれているディレクトリ。

      シェル実行可能ファイルは、クライアントのインストール後に<CLIENT_INSTALL_DIR>/binにあります。

    • <host>: サーバー・ホスト

      ノート:

      グラフ・サーバー(PGX)は、デフォルトでポート7007でリスニングします。必要に応じて、サーバー構成ファイル(server.conf)内のポート値を変更して、別のポートでリスニングするようにグラフ・サーバーを構成できます。詳細は、グラフ・サーバー(PGX)の構成を参照してください。

    ユーザー名とパスワードの入力を求められます。

    OPG4Pyシェルを起動できる様々な方法の詳細は、OPG4Pyシェルの起動を参照してください。

    OPG4Pyシェルが起動し、次に示すコマンドライン・プロンプトが表示されます。

    Oracle Graph Server Shell 23.2.0
    >>>

    ノート:

    Jupyter Notebookでpythonクライアント・ライブラリをインストールすることもできます。Python APIを使用すると、グラフ・サーバー(PGX)に接続してJupyter Notebook環境でPGQL問合せおよびグラフ・アルゴリズムを実行できます。詳細は、「Jupyter Notebookインタフェースの使用」を参照してください。

    関連項目:

    Python APIの詳細は、Python APIリファレンスを参照してください
13.3.1.2.3 PyPIからのPythonクライアントのインストール

PyPIからプロパティ・グラフPythonクライアントを取得できます。

pipを使用して、PyPIリポジトリからoracle-graph-client-23.2.0.zipパッケージをインストールできます。
PyPIからPythonクライアントをインストールする前に、システムが次の要件を満たしていることを確認してください。
  • オペレーティング・システム: Linux、WindowsまたはmacOS (M1またはM2プロセッサ)
  • Oracle JDK 8以上
  • Python 3.7、3.8または3.9
  • JAVA_HOME環境変数を設定していることを確認します。
  • プロキシがある場合は、https_proxy環境変数をプロキシ・サーバーに設定します。

次のように、Pythonクライアントのインストールをインストールおよび検証できます:

  1. pipを使用してクライアントをインストールします。
    たとえば、
    pip install --user oracle-graph-client

    これにより、必要なすべての依存関係とともにPythonクライアントがインストールされます。

  2. インストールが成功したことを確認します。
    $ python3
    Python 3.8.12 (default, Apr  5 2022, 08:07:47)
    [GCC 8.5.0 20210514 (Red Hat 8.5.0-10.0.1)] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import opg4py
    >>> import pypgx

    関連項目:

    Python APIの詳細は、Python APIリファレンスを参照してください
13.3.1.2.4 埋込みモードでのPythonクライアントのインストール

埋込みモードでPythonクライアントをインストールして操作できます。

埋込みPythonクライアントをインストールするには:

  1. 次のpipコマンドを実行します:
    pip3 install --user /opt/oracle/graph/client/
  2. 次に示すように、OPG4Pyシェルを埋込みモードで起動します:
    cd /opt/oracle/graph
    ./bin/opg4py

    シェル実行可能ファイルは、サーバーのインストール後に/opt/oracle/graph/binにあります。

    OPG4Pyシェルが起動し、次に示すコマンドライン・プロンプトが表示されます。

    Oracle Graph Server Shell 23.2.0
    >>> instance
    ServerInstance(embedded: True, version: 23.2.1)
    >>>
13.3.1.2.5 Pythonクライアントのアンインストール

このセクションでは、Pythonクライアントをアンインストールする方法について説明します。

Pythonクライアントをアンインストールするには、次のコマンドを実行します。

pip3 uninstall pypgx

13.3.2 グラフ・ビジュアライゼーションWebクライアント

グラフ・ビジュアライゼーションWebアプリケーションは、スタンドアロン・モードで実行することも、Webコンテナにデプロイすることもできます。

13.3.2.1 スタンドアロン・モードでのグラフ・ビジュアライゼーション・アプリケーションの実行

グラフ・サーバーのrpmファイルをインストールすると、PGXサーバーを起動したときにグラフ・ビジュアライゼーション・アプリケーションがデフォルトで起動します。

グラフ・ビジュアライゼーション・アプリケーションでは、前提条件コンポーネントとしてOracle Graph Serverをインストールする必要があります。

詳細は、Oracle Graph Serverのインストールを参照してください。

スタンドアロン・モードでグラフ・ビジュアライゼーション・アプリケーションを起動するには:
  1. 次のように、グラフ・サーバー(PGX)を起動します。
    sudo systemctl start pgx
    グラフ・ビジュアライゼーション・アプリケーションはデフォルトで起動します。
  2. 自己署名キーストアを信頼するようにグラフ・ビジュアライゼーション・アプリケーションを構成します。詳細は、「自己署名キーストアを信頼するためのクライアントの構成」を参照してください。
  3. グラフ・ビジュアライゼーション・アプリケーションを実行するために、次のようにブラウザに接続します
    https://localhost:7007/ui
    次のいずれかのメッセージが表示されることがあります。
    • Your connection is not private
    • Your connection is not secure

    「続行」または「受入」ボタンをクリックして続行します。

    次に示すように、グラフ・ビジュアライゼーションのログイン画面が開きます。

    図13-1 グラフ・ビジュアライゼーションのログイン

    図13-1の説明が続きます
    「図13-1 グラフ・ビジュアライゼーションのログイン」の説明
  4. データベースのユーザー名パスワードを入力します。
  5. 必要なPGQLドライバを選択して構成します。
    詳細は、PGQLドライバ選択のための拡張オプションの構成を参照してください。
  6. 「送信」をクリックします。

    これで、グラフ・ビジュアライゼーション・アプリケーションにサインインしました。

    問合せのビジュアライゼーション・ページのタイトル・バーには、関連するURLとともに接続モードが表示されます。

13.3.2.2 グラフ・ビジュアライゼーション・アプリケーションのデプロイ

oracle-graph-webapps-<version>.zipパッケージをダウンロードし、Webアプリケーション・アーカイブ(WAR)ファイルをOracle Weblogic 12.2 (以降)またはApache Tomcat (9.x以降)のWebコンテナにデプロイする必要があります。

13.3.2.2.1 Apache Tomcatへのグラフ・ビジュアライゼーション・アプリケーションのデプロイ
グラフ・ビジュアライゼーション・アプリケーションをApache Tomcatにデプロイするステップは、次のとおりです。
  1. Oracle Software Delivery CloudからOracle Graph Webapps zipファイルをダウンロードします。このファイルには、すぐにデプロイできるJava Webアプリケーション・アーカイブ(.warファイル)が含まれます。ファイル名は、oracle-graph-webapps-<version>.zipのようになります
  2. TLS/暗号化の正しい使用など、Tomcat固有の設定を構成します
  3. ポート8080がすでに使用されていないことを確認します。
  4. Tomcatを起動します。
    cd $CATALINA_HOME 
    ./bin/startup.sh 

    これで、グラフ・ビジュアライゼーション・アプリケーションは、localhost:8080/uiでリスニングしています

  5. ブラウザでURL localhost:8080/uiを使用して、グラフ・ビジュアライゼーション・アプリケーションにナビゲートします。
    図13-1に示すように、グラフ・ビジュアライゼーションのログイン・ページが表示されます。
  6. データベース資格証明を入力し、必要なPGQLドライバを構成します。

    詳細は、PGQLドライバ選択のための拡張オプションの構成を参照してください。

  7. 「送信」をクリックします。
    これで、グラフ・ビジュアライゼーション・アプリケーションにサインインしました。

    問合せのビジュアライゼーション・ページのタイトル・バーには、関連するURLとともに接続モードが表示されます。

13.3.2.2.2 Oracle WebLogic Serverでのグラフ・ビジュアライゼーション・アプリケーションのデプロイ

次の手順は、Oracle WebLogic Server 12.2.1.3にグラフ・ビジュアライゼーション・アプリケーションをデプロイするためのものです。必要に応じて、異なるバージョンのWeblogic Serverに対してわずかな変更を加える必要がある場合があります。

  1. Oracle Software Delivery CloudからOracle Graph Webapps zipファイルをダウンロードします。このファイルには、すぐにデプロイできるJava Webアプリケーション・アーカイブ(.warファイル)が含まれます。ファイル名は、oracle-graph-webapps-<version>.zipのようになります
  2. WebLogic Serverを起動します。
    # Start Server
    cd $MW_HOME/user_projects/domains/base_domain
    ./bin/startWebLogic.sh
  3. トンネリングを有効にします。

    グラフ・ビジュアライゼーション・アプリケーションWARファイルをHTTP経由でデプロイできるようにするには、最初にトンネリングを有効にする必要があります。WebLogic管理コンソール(デフォルトではhttp://localhost:7001/console)に移動します。「環境」(左パネル)→「サーバー」(左パネル)を選択します。グラフ・ビジュアライゼーションを実行するサーバーをクリックします(メイン・パネル)。選択し(上部タブ・バー)、「トンネリングの有効化」を選択して「保存」をクリックします。

  4. graphviz-<version>-pgviz<graphviz-version>-wls.warファイルをデプロイします。

    WARファイルをWebLogic Serverにデプロイするには、次のコマンドを使用して、<<...>>マーカーを、インストールに一致する値に置き換えます。

    cd $MW_HOME/user_projects/domains/base_domain
    source bin/setDomainEnv.sh
    java weblogic.Deployer -adminurl <<admin-console-url>> -username <<admin-user>> -password <<admin-password>> -deploy -upload <<path/to>>/graphviz-<<version>>-pgviz<<graphviz-version>>.war

    アンデプロイするには、次のコマンドを使用できます。

    java weblogic.Deployer -adminurl <<admin-console-url>> -username <<admin-user>> -password <<admin-password>> -name <<path/to>>/graphviz-<<version>>-pgviz<<graphviz-version>>.war -undeploy

    デプロイメントをテストするには、ブラウザを使用してhttps://<<fqdn-ip>>:<<port>>/uiにナビゲートします。

    図13-1に示すように、グラフ・ビジュアライゼーションのログイン画面が表示されます。

  5. データベース資格証明を入力し、必要なPGQLドライバを構成します。

    詳細は、PGQLドライバ選択のための拡張オプションの構成を参照してください。

  6. 「送信」をクリックします。

    これでログインしたので、グラフ・ビジュアライゼーション問合せユーザー・インタフェース(UI)が表示され、PGXからグラフが取得されます。

    問合せのビジュアライゼーション・ページのタイトル・バーには、関連するURLとともに接続モードが表示されます。

13.3.2.3 PGQLドライバ選択のための拡張オプションの構成

グラフ・ビジュアライゼーション・アプリケーションは、グラフ・サーバー(PGX)またはOracle Databaseと通信するように構成できます。

必要な構成は、グラフ・ビジュアライゼーションのログイン・ページの拡張オプション設定を使用して、ログイン時に適用できます。

必要に応じて適切な手順に従って、PGQLドライバを動的に変更および構成できます。

13.3.2.3.1 グラフ・サーバー(PGX)でのPGQL用のグラフ・ビジュアライゼーション・アプリケーションの構成
PGXデプロイメント(グラフ・サーバー上のPGQL)と通信するようにグラフ・ビジュアライゼーション・アプリケーションを構成するには:
  1. グラフ・ビジュアライゼーションのログイン・ページで「拡張オプション」をクリックします。
  2. 次のように「グラフ・サーバー」を選択します。

    図13-2 グラフ・サーバー(PGX)上のPGQL

    図13-2の説明が続きます
    「図13-2 グラフ・サーバー(PGX)上のPGQL」の説明
  3. 必要に応じて、PGXベースURLを変更します。

    ノート:

    • デフォルトでは、グラフ・ビジュアライゼーション・アプリケーションは、インストール用にweb.xmlファイルで定義されたPGXベースURLを使用してグラフ・サーバー(PGX)に接続します。
    • グラフ・サーバーのトランスポート層セキュリティ(TLS)を無効にする場合、詳細はグラフ・サーバーでのトランスポート層セキュリティ(TLS)の無効化を参照してください。
  4. 必要に応じて、セッションIDを入力します。

    グラフ・ビジュアライゼーション・アプリケーションがグラフ・サーバー(PGX)上でPGQLを使用している場合、アプリケーションはデフォルトでOracle Databaseをアイデンティティ・マネージャとして使用します。つまり、既存のOracle Database資格証明(ユーザー名とパスワード)を使用してアプリケーションにログインすると、グラフ・サーバーで実行できるアクションは、Oracle Databaseで付与されているロールによって決まります。

    ノート:

    グラフ・ビジュアライゼーション・アプリケーションに対してKerberos認証を有効にする場合は、グラフ・ビジュアライゼーション・アプリケーションに対するKerberos対応の認証を参照してください。
13.3.2.3.2 データベースでのPGQL用のグラフ・ビジュアライゼーション・アプリケーションの構成
Oracle Database (データベース上のPGQL)と通信するようにグラフ・ビジュアライゼーション・アプリケーションを構成するには:
  1. グラフ・ビジュアライゼーションのログイン・ページで「拡張オプション」をクリックします。
  2. 次のように「データベース」を選択します。

    図13-3 データベース上のPGQL

    図13-3の説明が続きます
    「図13-3 データベース上のPGQL」の説明
  3. 必要に応じて、OracleデータベースのJDBC URLを変更します。

    ノート:

13.4 トランスポート層セキュリティの設定

グラフ・サーバー(PGX)は、デフォルトで、トランスポート層セキュリティ(TLS)を使用する暗号化された接続のみを許可します。TLSでは、サーバーがクライアントにサーバー証明書を提示する必要があり、クライアントはその証明書の発行者を信頼するように構成されている必要があります。

このリリースのGraph Server and Clientでは、RPMファイルのインストールによって、デフォルトで自己署名サーバー・キーストア・ファイルが生成されます。このserver_keystore.jksファイルには、サーバー証明書およびサーバー秘密キーが含まれ、サーバーがTLSを有効にするために/etc/oracle/graphに生成されます。生成されたキーストアのデフォルトのパスワードはchangeitであり、次のように/etc/systemd/system/pgx.serviceファイルで環境変数PGX_SERVER_KEYSTORE_PASSWORDを使用して構成されます。

[Service]
Environment="PGX_SERVER_KEYSTORE_PASSWORD=changeit"

このデフォルトのキーストア構成が開始するのに十分な場合および接続先がlocalhostのみである場合は、「自己署名キーストアを信頼するためのクライアントの構成」にスキップできます。

自己署名サーバー証明書を使用する場合は、「自己署名サーバー証明書の使用」を参照してください。ただし、サーバー構成フィールドserver_certおよびserver_private_keyは非推奨であり、今後のリリースでサポートされなくなることに注意してください。その後は、サーバー・キーストアを使用してサーバー証明書およびサーバー秘密キーを格納する必要があります。

13.4.1 自己署名サーバー・キーストアの使用

この項では、/etc/oracle/graphに自己署名キーストアを生成し、このキーストアを使用するようにグラフ・サーバー(PGX)およびクライアントを構成するステップについて説明します。

13.4.1.1 自己署名サーバー・キーストアの生成

keytoolコマンドを使用してサーバー・キーストアを作成できます。

次のステップでは、自己署名証明書が含まれるサーバー・キーストアを作成する方法を示します。
  1. 次のディレクトリに移動します。
    cd /etc/oracle/graph
  2. 次のコマンドを実行します。
    keytool -genkey -alias pgx -keyalg RSA -keystore server_keystore.jks
  3. 要求された詳細を指定します。たとえば:
    Enter keystore password:
    Re-enter new password:
    What is your first and last name?
      [Unknown]:  localhost
    What is the name of your organizational unit?
      [Unknown]:  OU
    What is the name of your organization?
      [Unknown]:  MyOrganization
    What is the name of your City or Locality?
      [Unknown]:  MyTown
    What is the name of your State or Province?
      [Unknown]:  MyState
    What is the two-letter country code for this unit?
      [Unknown]:  US
    Is CN=localhost, OU=OU, O=MyOrganization, L=MyTown, ST=MyState, C=US correct?
      [no]:  yes
    server_keystore.jkscd /etc/oracle/graphに正常に作成されます。
13.4.1.2 サーバー・キーストアを使用する際のグラフ・サーバー(PGX)の構成

グラフ・サーバー(PGX)構成ファイルで、サーバー・キーストアへのパスを指定する必要があります。

ノート:

Webアプリケーションのダウンロード・パッケージを使用してグラフ・サーバーをWebサーバーにデプロイする場合、このセクションは適用されません。TLSの構成方法の詳細は、Webサーバーのマニュアルを参照してください。
  1. 次のように、/etc/oracle/graph/server.confのファイルを編集して、サーバー・キーストア別名、サーバー・キーストア・プロバイダ、サーバー・キーストア・タイプおよびサーバー・キーストアへのパスを指定します。
    {
      "port": 7007,
      "enable_tls": true,
      "enable_client_authentication": false,
      "server_keystore": "/etc/oracle/graph/server_keystore.jks",
      "server_keystore_alias": "pgx",
      "server_keystore_type": "PKCS12",
      "server_keystore_provider": "SUN",
      "ca_certs": [],
      "working_dir": "/opt/oracle/graph/pgx/tmp_data"
    }
  2. PGX_SERVER_KEYSTORE_PASSWORDというOS環境変数またはpgx.SERVER_KEYSTORE_PASSWORDというjavaプロパティを使用して、キーストア・パスワードを設定します。

    たとえば、PGX_SERVER_KEYSTORE_PASSWORDでキーストア・パスワードを設定するには、次のように/etc/systemd/system/pgx.serviceのファイルを編集します。

    [Service]
    Environment="PGX_SERVER_KEYSTORE_PASSWORD=<keystore_password>"
  3. 次のコマンドを実行してsystemd構成を再ロードします。
    sudo systemctl daemon-reload
  4. グラフ・サーバーを再起動します。

    ノート:

    • 組織によって信頼されている認証局(CA)によって発行された証明書を使用する必要があります。CA証明書がない場合は、一時的に自己署名証明書を作成して開始できます。
    • 組織によって信頼されている有効な証明書を常に使用してください。本番環境では、自己署名証明書の使用はお薦めしません。
13.4.1.3 自己署名キーストアを信頼するためのクライアントの構成

自己署名キーストアを受け入れるようにクライアント・アプリケーションを構成する必要があります。

自己署名キーストアを信頼するようにクライアントを構成するには、ルート証明書をJavaインストールのローカル・トラスト・ストアにインポートする必要があります。
  • JavaまたはPythonクライアントの場合、すべてのクライアントによって使用されるすべてのJavaインストールにルート証明書をインポートする必要があります。

    ノート:

    JShellクライアントには、Java 11以降が必要です。
  • グラフ・ビジュアライゼーション・アプリケーションの場合、グラフ・サーバー(PGX)を実行している環境のシステムJavaインストールまたはグラフ・ビジュアライゼーション・アプリケーションを提供するWebサーバーにルート証明書をインポートする必要があります。つまり、グラフ・ビジュアライゼーション・アプリケーションを提供するサーバーを実行しているOSユーザーが使用するJDKインストールです。
  • グラフZeppelinインタプリタ・クライアントの場合、Zeppelinサーバーが使用するJavaインストールにルート証明書をインポートする必要があります。

次のステップに示すように、ルート証明書をインポートできます。

  1. rootユーザーとして、またはsudoを使用して次のコマンドを実行します。
    1. Java 8の場合(JAVA_HOMEが設定されていることを確認します):
      sudo keytool -importkeystore -srckeystore /etc/oracle/graph/server_keystore.jks -destkeystore $JAVA_HOME/jre/lib/security/cacerts -deststorepass changeit -srcstorepass changeit -noprompt
    2. Java 11以降の場合(JAVA_HOMEが設定されていることを確認します):
      sudo keytool -importkeystore -srckeystore /etc/oracle/graph/server_keystore.jks -destkeystore $JAVA_HOME/lib/security/cacerts -deststorepass changeit -srcstorepass changeit -noprompt
    ここで、changeitはサンプルのキーストア・パスワードです。このパスワードは任意のパスワードに変更できます。証明書を変更する際に必要になるため、このパスワードは忘れないでください。
    1. グラフ・サーバーを以前のリリースからアップグレードする場合は、まずJavaのバージョンに適した次のコマンドを実行して証明書を削除する必要があります。このコマンドは、sudoを使用するか、rootユーザーとして実行する必要があります。

      Java 8の場合:

      sudo keytool -delete -alias pgx -keystore $JAVA_HOME/jre/lib/security/cacerts -storepass changeit

      Java 11以降の場合:

      sudo keytool -delete -alias pgx -keystore $JAVA_HOME/lib/security/cacerts -storepass changeit
    2. 前述のステップに示されているように、新しい証明書をインポートします。

13.4.2 自己署名サーバー証明書の使用

この項では、/etc/oracle/graphに自己署名証明書を生成し、この証明書を使用するようにグラフ・サーバー(PGX)を構成するステップについて説明します。

13.4.2.1 自己署名サーバー証明書の生成

opensslコマンドを使用して、自己署名サーバー証明書を作成できます。

次のステップでは、自己署名サーバー証明書を生成する方法を示します。
  1. 次のディレクトリに移動します。
    cd /etc/oracle/graph
  2. 次のコマンドを実行します。
    openssl req -new -newkey rsa:2048 -days 365 -nodes -x509 -subj "/C=US/ST=MyState/L=MyTown/O=MyOrganization/CN=ROOT" -keyout ca_key.pem -out ca_certificate.pem
    openssl genrsa -out server_key_traditional.pem 2048
    openssl pkcs8 -topk8 -in server_key_traditional.pem -inform pem -out server_key.pem -outform pem -nocrypt
    openssl req -new -subj "/C=US/ST=MyState/L=MyTown/O=MyOrganization/CN=localhost" -key server_key.pem -out server.csr
    chmod 600 server_key.pem
    openssl x509 -req -CA ca_certificate.pem -CAkey ca_key.pem -in server.csr -out server_certificate.pem -days 365 -CAcreateserial
    chown oraclegraph:oraclegraph server_key.pem

    ノート:

    • 前述の例に示されている証明書は、ホストlocalhostに対してのみ機能します。別のドメインを使用している場合は、localhostをそのドメイン名に置き換える必要があります。
    • 前述の自己署名証明書は365日間のみ有効です。
13.4.2.2 グラフ・サーバー(PGX)の構成

グラフ・サーバー(PGX)構成ファイルで、サーバー証明書へのパスとサーバーの秘密キーをPEM形式で指定する必要があります。

ノート:

Webアプリケーションのダウンロード・パッケージを使用してグラフ・サーバーをWebサーバーにデプロイする場合、このセクションは適用されません。TLSの構成方法の詳細は、Webサーバーのマニュアルを参照してください。
  1. /etc/oracle/graph/server.confでファイルを編集し、次のように、サーバー証明書へのパスおよびサーバーの秘密キーをPEM形式で指定します。
    {
      "port": 7007,
      "enable_tls": true,
      "server_private_key": "/etc/oracle/graph/server_key.pem",
      "server_cert": "/etc/oracle/graph/server_certificate.pem",
      "enable_client_authentication": false,
      "working_dir": "/opt/oracle/graph/pgx/tmp_data"
    }
  2. グラフ・サーバーを再起動します。

    ノート:

    • 組織によって信頼されている認証局(CA)によって発行された証明書を使用する必要があります。CA証明書がない場合は、一時的に自己署名証明書を作成して開始できます。
    • 組織によって信頼されている有効な証明書を常に使用してください。本番環境では、自己署名証明書の使用はお薦めしません。
13.4.2.3 自己署名証明書を信頼するためのクライアントの構成

グラフ・サーバー(PGX)の自己署名証明書を受け入れるようにクライアント・アプリケーションを構成する必要があります。

自己署名証明書を信頼するようにクライアントを構成するには、ルート証明書をJavaインストールのローカル・トラスト・ストアにインポートする必要があります。
  • JavaまたはPythonクライアントの場合、すべてのクライアントによって使用されるすべてのJavaインストールにルート証明書をインポートする必要があります。

    ノート:

    JShellクライアントには、Java 11以降が必要です。
  • グラフ・ビジュアライゼーション・アプリケーションの場合、グラフ・サーバー(PGX)を実行している環境のシステムJavaインストールまたはグラフ・ビジュアライゼーション・アプリケーションを提供するWebサーバーにルート証明書をインポートする必要があります。つまり、グラフ・ビジュアライゼーション・アプリケーションを提供するサーバーを実行しているOSユーザーが使用するJDKインストールです。
  • グラフZeppelinインタプリタ・クライアントの場合、Zeppelinサーバーが使用するJavaインストールにルート証明書をインポートする必要があります。

次のステップに示すように、ルート証明書をインポートできます。

  1. rootユーザーとして、またはsudoを使用して次のコマンドを実行します。
    1. Java 8の場合(JAVA_HOMEが設定されていることを確認します):
      sudo keytool -import -trustcacerts -keystore $JAVA_HOME/jre/lib/security/cacerts -storepass changeit -alias pgx -file /etc/oracle/graph/ca_certificate.pem -noprompt
    2. Java 11以降の場合(JAVA_HOMEが設定されていることを確認します):
      sudo keytool -import -trustcacerts -keystore $JAVA_HOME/lib/security/cacerts -storepass changeit -alias pgx -file /etc/oracle/graph/ca_certificate.pem -noprompt
    ここで、changeitはサンプルのキーストア・パスワードです。このパスワードは任意のパスワードに変更できます。証明書を変更する際に必要になるため、このパスワードは忘れないでください。
    1. グラフ・サーバーを以前のリリースからアップグレードする場合は、まずJavaのバージョンに適した次のコマンドを実行して証明書を削除する必要があります。このコマンドは、sudoを使用するか、rootユーザーとして実行する必要があります。

      Java 8の場合:

      sudo keytool -delete -alias pgx -keystore $JAVA_HOME/jre/lib/security/cacerts -storepass changeit

      Java 11以降の場合:

      sudo keytool -delete -alias pgx -keystore $JAVA_HOME/lib/security/cacerts -storepass changeit
    2. 前述のステップに示されているように、新しい証明書をインポートします。