5.16 複数のスキーマが関係している場合のネットワーク・アクセス
ネットワーク所有者以外のデータベース・ユーザーがメモリーにネットワークを読み込む場合は、次のいずれかを実行する必要があります。
-
所有者以外のユーザーごとに、USER_SDO_NETWORK_METADATAビューのネットワーク表をネットワーク所有者のスキーマで修飾します(「複数のスキーマが関係している場合のネットワーク・メタデータでの所有者の指定によるアクセス」を参照)。
-
所有者以外のユーザーごとに、ネットワーク・データ・モデル表に対するビューを作成し、USER_SDO_NETWORK_METADATAビューを更新します(「複数のスキーマが関係している場合のビューを使用したアクセス」を参照)。
2つ目の方法では、ビューの作成という追加のステップが必要ですが、このビューによって、ネットワークにおけるアクセス可能な部分を柔軟に制御できるようになります。各ビューでは、ネットワークのすべての部分にアクセスできるようにすることも、WHERE句を使用してアクセスを一部分のみに制限することもできます(たとえば、WHERE STATE_CODE='NY'
では、ビュー・ユーザーをNew Yorkの行に制限します)。
例として、次のシナリオについて考えてみます。
-
User1がNetwork1を作成します(したがって、所有者になります)。
-
User2がSDO_NET_MEM.NETWORK_MANAGER.READ_NETWORKプロシージャをコールしてNetwork1を読み込もうとしますが、エラーが発生します。このエラーは、User2がNetwork1のネットワーク・データ・モデル表に対する適切な権限を所有していても発生します。
この問題に対処するには、「複数のスキーマが関係している場合のネットワーク・メタデータでの所有者の指定によるアクセス」または「複数のスキーマが関係している場合のビューを使用したアクセス」のいずれかの方法を使用する必要があります。
5.16.1 複数のスキーマが関係している場合のネットワーク・メタデータでの所有者の指定によるアクセス
(適切な権限のある)所有者以外のユーザーがネットワークにアクセスできるように、ネットワーク・メタデータでネットワーク所有者を指定します。ネットワークへのアクセスを許可する所有者以外のユーザーごとに、次のステップを実行します。
-
必要なネットワーク・データ・モデル表へのSELECTまたはREADアクセス権がユーザーに付与されていることを確認します。このアクセス権がユーザーに付与されていない場合は、ネットワーク所有者として接続し、アクセス権を付与します。たとえば、User1として接続し、次の文を実行します。
GRANT select ON network1_node$ TO user2; GRANT select ON network1_link$ TO user2; GRANT select ON network1_path$ TO user2; GRANT select ON network1_plink$ TO user2;
-
所有者以外のユーザーとして接続します。たとえば、User2として接続します。
-
USER_SDO_NETWORK_METADATAビュー(「xxx_SDO_NETWORK_METADATAビュー」を参照)におけるネットワークについて、ネットワーク所有者のスキーマ名を使用してネットワーク・データ・モデル表を修飾します。たとえば、ネットワークがこのビューにまだ定義されていない場合は、User2としての接続中に次を実行します。
INSERT INTO user_sdo_network_metadata (network, network_category, geometry_type, node_table_name,node_geom_column, link_table_name, link_geom_column, link_direction, path_table_name, path_geom_column, path_link_table_name) VALUES ('NETWORK1','SPATIAL', 'SDO_GEOMETRY', 'USER1.NETWORK1_NODE$', 'GEOMETRY', 'USER1.NETWORK1_LINK$', 'GEOMETRY', 'DIRECTED', 'USER1.NETWORK1_PATH$', 'GEOMETRY', 'USER1.NETWORK1_PLINK$');
ネットワークがこのビューにすでに定義されている場合は、定義を更新して、各表名をスキーマ名で修飾します。次に例を示します。
UPDATE USER_SDO_NETWORK_METADATA SET node_table_name = 'USER1.NETWORK1_NODE$', link_table_name = 'USER1.NETWORK1_LINK$', path_table_name = 'USER1.NETWORK1_PATH$', path_link_table_name = 'USER1.NETWORK1_PLINK$' WHERE network = 'NETWORK1';
このシナリオでは、これでUser2がNETWORK1をメモリーに読み込めるようになります。
親トピック: 複数のスキーマが関係している場合のネットワーク・アクセス
5.16.2 複数のスキーマが関係している場合のビューを使用したアクセス
(適切な権限のある)所有者以外のユーザーがネットワークまたはネットワークの特定の部分にアクセスできるように、ビューを作成します。ネットワークへのアクセスを許可する所有者以外のユーザーごとに、次のステップを実行します。
-
必要なネットワーク・データ・モデル表へのSELECTまたはREADアクセス権がユーザーに付与されていることを確認します。このアクセス権がユーザーに付与されていない場合は、ネットワーク所有者として接続し、アクセス権を付与します。たとえば、User1として接続し、次の文を実行します。
GRANT select ON network1_node$ TO user2; GRANT select ON network1_link$ TO user2; GRANT select ON network1_path$ TO user2; GRANT select ON network1_plink$ TO user2;
-
所有者以外のユーザーとして接続します。たとえば、User2として接続します。
-
必要な各ネットワーク・データ・モデル・ノードに対するビューを作成し、各ビューでは対応する表の列をすべて選択するようにします。表名をネットワーク所有者のスキーマ名で修飾します。たとえば、User2としての接続中に次のようにします。
CREATE VIEW network1_node$ AS select * from user1.network1_node$; CREATE VIEW network1_link$ AS select * from user1.network1_link$; CREATE VIEW network1_path$ AS select * from user1.network1_path$; CREATE VIEW network1_plink$ AS select * from user1.network1_plink$;
ノート:
この例では、基礎となる表のすべてのデータを含むビューを示していますが、各ビューの定義でWHERE句(
WHERE STATE_CODE='NY'
など)を使用することで、ネットワークの使用可能な部分を制限できます。 -
新しく作成したビューを指定する行をUSER_SDO_NETWORK_METADATAビュー(「xxx_SDO_NETWORK_METADATAビュー」を参照)に追加します。たとえば、User2としての接続中に次のようにします。
INSERT INTO user_sdo_network_metadata (network, network_category, geometry_type, node_table_name,node_geom_column, link_table_name, link_geom_column, link_direction, path_table_name, path_geom_column, path_link_table_name) VALUES ('NETWORK1','SPATIAL', 'SDO_GEOMETRY', 'NETWORK1_NODE$', 'GEOMETRY', 'NETWORK1_LINK$', 'GEOMETRY', 'DIRECTED', 'NETWORK1_PATH$', 'GEOMETRY', 'NETWORK1_PLINK$');
このシナリオでは、これでUser2が作成されたビューを介してNETWORK1の使用可能な部分をメモリーに読み込めるようになります。
親トピック: 複数のスキーマが関係している場合のネットワーク・アクセス