26 Oracle XML DBリポジトリへのPL/SQLアクセス
PL/SQLパッケージDBMS_XDB_CONFIG
およびDBMS_XDB_REPOS
は、ともに、Oracle XML DBリソースのPL/SQL用アプリケーション・プログラム・インタフェース(API)を提供します。前者を使用して、Oracle XML DBとそのリポジトリを構成します。後者を使用して、リポジトリでのその他の非構成操作を実行します。
- DBMS_XDB_REPOS: リポジトリ・リソースのアクセスと管理
PL/SQLパッケージDBMS_XDB_REPOS
を使用すると、Oracle XML DBリポジトリ内のリソースにアクセスして管理できます。また、アクセス制御リスト(ACL)に基づいたリソースのセキュリティ管理も可能です。ACLは、どのリソースへのアクセス権をどのプリンシパル(ユーザーまたはロール)が持つかを決定するアクセス制御エントリ(ACE)のリストです。 - DBMS_XDB_REPOS: ACLベースのセキュリティ管理
PL/SQLパッケージDBMS_XDB_REPOS
には、Oracle XML DBのACLベースのセキュリティ管理ファンクションおよびプロシージャが用意されています。 - DBMS_XDB_CONFIG: 構成管理
PL/SQLパッケージDBMS_XDB_CONFIG
には、Oracle XML DBの構成管理用ファンクションおよびプロシージャが用意されています。
親トピック: Oracle XML DBリポジトリ
26.1 DBMS_XDB_REPOS: リポジトリ・リソースのアクセスと管理
PL/SQLパッケージDBMS_XDB_REPOS
を使用すると、Oracle XML DBリポジトリ内のリソースにアクセスして管理できます。また、アクセス制御リスト(ACL)に基づいたリソースのセキュリティ管理も可能です。ACLは、どのリソースへのアクセス権をどのプリンシパル(ユーザーまたはロール)が持つかを決定するアクセス制御エントリ(ACE)のリストです。
表26-1に、パッケージDBMS_XDB_REPOS
のファンクションおよびプロシージャの概要を示します。
表26-1 DBMS_XDB_REPOSのリソース・アクセスおよび管理サブプログラム
関数/プロシージャ | 説明 |
---|---|
|
指定された文字列を内容として持つ新規ファイル・リソースを階層に挿入します。 |
|
ユーザー定義のメタデータをリソースに追加します。 |
|
新しいフォルダ・リソースを作成します。 |
|
オブジェクト識別子(OID)に基づいてリソースへの仮想パスを作成します。 |
|
新しいファイル・リソースを作成します。 |
|
リポジトリからリソースを削除します。 |
|
指定したユーザー定義のメタデータをリソースから削除します。 |
|
絶対パスを指定されたリソースが存在するかどうかを示します。 |
|
リソースのコンテンツを |
|
リソースのコンテンツを |
|
リソースのコンテンツを |
|
リソースのコンテンツを |
|
指定されたリソースのパスを使用して、現行のユーザーに対するリソースのロック・トークンを戻します。 |
|
絶対パスで指定したリソースのオブジェクト識別子(OID)を戻します。 |
|
リポジトリ内の指定された場所で見つかったクラス |
|
データベース・スキーマ(ユーザー・アカウント) |
|
指定されたリソースに |
|
指定されたリソースに文字コンテンツがある場合は |
|
指定されたリソースに |
|
指定されたリソースに |
|
指定されたリソースがフォルダの場合は |
|
既存のリソースへのリンクを作成します。 |
|
指定されたリソースのパスを使用して、WebDAV形式のロックを取得します。 |
|
文書またはフォルダ内のすべてのXLink (非推奨)およびXIncludeリンクを処理します。 |
|
すべてのユーザー定義のメタデータを指定されたリソースから削除します。 |
|
指定されたリソースのコンテンツ・サイズを再計算します。 |
|
指定されたリソースの名前を変更します。 |
|
最終更新時刻を現在の時刻に変更します。 |
|
ロック・トークンとパスで指定したリソースのロックを解除します。 |
|
ユーザー定義のリソース・メタデータを変更します。 |
例26-1では、パッケージDBMS_XDB_REPOS
を使用してリポジトリ・リソースを管理します。次のものが作成されます。
-
フォルダ
/public
の下のフォルダmydocs
-
2つのファイル・リソース
emp_selby.xml
およびemp_david.xml
-
ファイル・リソース
person_selby.xml
およびperson_david.xml
への2つのリンク
続いて、新しく作成されたリソースとリンクが削除されます。フォルダを削除する前にフォルダの内容が削除されます。
関連項目:
appendResourceMetadata
およびdeleteResourceMetadata
を使用した例は、ユーザー定義のリポジトリ・メタデータを参照してください。
例26-1 DBMS_XDB_REPOSを使用したリソースの管理
DECLARE retb BOOLEAN; BEGIN retb := DBMS_XDB_REPOS.createfolder('/public/mydocs'); retb := DBMS_XDB_REPOS.createresource('/public/mydocs/emp_selby.xml', '<emp_name>selby</emp_name>'); retb := DBMS_XDB_REPOS.createresource('/public/mydocs/emp_david.xml', '<emp_name>david</emp_name>'); END; / PL/SQL procedure successfully completed. CALL DBMS_XDB_REPOS.link('/public/mydocs/emp_selby.xml', '/public/mydocs', 'person_selby.xml'); Call completed. CALL DBMS_XDB_REPOS.link('/public/mydocs/emp_david.xml', '/public/mydocs', 'person_david.xml'); Call completed. CALL DBMS_XDB_REPOS.deleteresource('/public/mydocs/emp_selby.xml'); Call completed. CALL DBMS_XDB_REPOS.deleteresource('/public/mydocs/person_selby.xml'); Call completed. CALL DBMS_XDB_REPOS.deleteresource('/public/mydocs/emp_david.xml'); Call completed. CALL DBMS_XDB_REPOS.deleteresource('/public/mydocs/person_david.xml'); Call completed. CALL DBMS_XDB_REPOS.deleteresource('/public/mydocs'); Call completed.
26.2 DBMS_XDB_REPOS: ACLベースのセキュリティ管理
PL/SQLパッケージDBMS_XDB_REPOS
には、Oracle XML DBのACLベースのセキュリティ管理ファンクションおよびプロシージャが用意されています。
表26-2 DBMS_XDB_REPOS: セキュリティ管理サブプログラム
関数/プロシージャ | 説明 |
---|---|
|
現行のユーザーに付与されたすべてのアクセス権限をACLで確認します。 |
|
指定されたリソースの所有者を指定ユーザーに変更します。 |
|
リソースACLにACEを追加します。 |
|
現行のユーザーに付与された、あるリソースへのアクセス権限を確認します。 |
|
リソースのパス名で指定された、リソースを保護しているACL文書を戻します。 |
|
現行のユーザーに付与された、あるリソースへのすべての権限を戻します。 |
|
リソースのACLを設定します。 |
例26-2では、データベース・ユーザーHR
が、フォルダ/public/mydocs
と、それに含まれるファイルemp_selby.xml
の、2つのリソースを作成します。プロシージャgetACLDocument
がファイル・リソースでコールされて、文書の<principal>
ユーザーがPUBLIC
であることを示しています。
例26-3では、システム管理者がプロシージャsetACL
に接続して、所有者(データベース・スキーマHR
)に、例26-2で作成されたファイル・リソースにおけるすべての権限を付与しています。プロシージャgetACLDocument
は、続いて<principal>
ユーザーが所有者(HR
)であるdav:owner
であることを示しています。
例26-4では、ユーザーHR
がファンクションchangePrivileges
に接続して、新しいアクセス制御エントリ(ACE)をACLに追加して、リソースemp_selby.xml
におけるすべての権限をユーザーoe
に付与しています。プロシージャgetACLDocument
は、新しいACEがACLに追加されたことを示します。
例26-5では、ユーザーoe
は接続してDBMS_XDB_REPOS.getPrivileges
をコールし、リソースemp_selby.xml
でユーザーoe
に付与されたすべての権限を表示します。
例26-2 DBMS_XDB_REPOS.GETACLDOCUMENTの使用
CONNECT hr
Enter password: password
Connected.
DECLARE
retb BOOLEAN;
BEGIN
retb := DBMS_XDB_REPOS.createFolder('/public/mydocs');
retb := DBMS_XDB_REPOS.createResource('/public/mydocs/emp_selby.xml',
'<emp_name>selby</emp_name>');
END;
/
PL/SQL procedure successfully completed.
SELECT XMLSerialize(DOCUMENT
DBMS_XDB_REPOS.getACLDocument('/public/mydocs/emp_selby.xml')
AS CLOB)
FROM DUAL;
XMLSERIALIZE(DOCUMENTDBMS_XDB_REPOS.GETACLDOCUMENT('/PUBLIC/MYDOCS/EMP_SELBY.XML
--------------------------------------------------------------------------------
<acl description="Public:All privileges to PUBLIC" xmlns="http://xmlns.oracle.co
m/xdb/acl.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaL
ocation="http://xmlns.oracle.com/xdb/acl.xsd http://xm
lns.oracle.com/xdb/acl.xsd" shared="true">
<ace>
<grant>true</grant>
<principal>PUBLIC</principal>
<privilege>
<all/>
</privilege>
</ace>
</acl>
1 row selected.
例26-3 DBMS_XDB_REPOS.SETACLの使用
CONNECT SYSTEM
Enter password: password
Connected.
-- Give all privileges to owner, HR.
CALL DBMS_XDB_REPOS.setACL('/public/mydocs/emp_selby.xml',
'/sys/acls/all_owner_acl.xml');
Call completed.
COMMIT;
Commit complete.
SELECT XMLSerialize(DOCUMENT
DBMS_XDB_REPOS.getACLDocument('/public/mydocs/emp_selby.xml')
AS CLOB)
FROM DUAL;
XMLSERIALIZE(DOCUMENTDBMS_XDB_REPOS.GETACLDOCUMENT('/PUBLIC/MYDOCS/EMP_SELBY.XML
--------------------------------------------------------------------------------
<acl description="Private:All privileges to OWNER only and not accessible to oth
ers" xmlns="http://xmlns.oracle.com/xdb/acl.xsd" xmlns:dav="DAV:" xmlns:xsi="htt
p://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.oracle.
com/xdb/acl.xsd http://xmlns.oracle.com/xdb/acl.xsd" shared="true">
<ace>
<grant>true</grant>
<principal>dav:owner</principal>
<privilege>
<all/>
</privilege>
</ace>
</acl>
1 row selected.
例26-4 DBMS_XDB_REPOS.CHANGEPRIVILEGESの使用
CONNECT hr
Enter password: password
Connected.
SET SERVEROUTPUT ON
-- Add an ACE giving privileges to user OE
DECLARE
r PLS_INTEGER;
ace XMLType;
ace_data VARCHAR2(2000);
BEGIN
ace_data := '<ace xmlns="http://xmlns.oracle.com/xdb/acl.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.oracle.com/xdb/acl.xsd
http://xmlns.oracle.com/xdb/acl.xsd
DAV:http://xmlns.oracle.com/xdb/dav.xsd">
<principal>OE</principal>
<grant>true</grant>
<privilege><all/></privilege>
</ace>';
ace := XMLType.createXML(ace_data);
r := DBMS_XDB_REPOS.changePrivileges('/public/mydocs/emp_selby.xml', ace);
END;
/
PL/SQL procedure successfully completed.
COMMIT;
SELECT XMLSerialize(DOCUMENT
DBMS_XDB_REPOS.getACLDocument('/public/mydocs/emp_selby.xml')
AS CLOB)
FROM DUAL;
XMLSERIALIZE(DOCUMENTDBMS_XDB_REPOS.GETACLDOCUMENT('/PUBLIC/MYDOCS/EMP_SELBY.XML
--------------------------------------------------------------------------------
<acl description="Private:All privileges to OWNER only and not accessible to oth
ers" xmlns="http://xmlns.oracle.com/xdb/acl.xsd" xmlns:dav="DAV:" xmlns:xsi="htt
p://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.oracle.
com/xdb/acl.xsd http://xmlns.oracle.com/xdb/acl.xsd" s
hared="false">
<ace>
<grant>true</grant>
<principal>dav:owner</principal>
<privilege>
<all/>
</privilege>
</ace>
<ace>
<grant>true</grant>
<principal>OE</principal>
<privilege>
<all/>
</privilege>
</ace>
</acl>
1 row selected.
例26-5 DBMS_XDB_REPOS.GETPRIVILEGESの使用
CONNECT oe
Enter password: password
Connected.
SELECT XMLSerialize(DOCUMENT
DBMS_XDB_REPOS.getPrivileges('/public/mydocs/emp_selby.xml')
AS CLOB)
FROM DUAL;
XMLSERIALIZE(DOCUMENTDBMS_XDB_REPOS.GETPRIVILEGES('/PUBLIC/MYDOCS/EMP_SELBY.XML'
--------------------------------------------------------------------------------
<privilege xmlns="http://xmlns.oracle.com/xdb/acl.xsd" xmlns:xsi="http://www.w3.
org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.oracle.com/xdb/acl
.xsd http://xmlns.oracle.com/xdb/acl.xsd DAV: http://xmlns.oracle.com/xdb/dav.xs
d" xmlns:xdbacl="http://xmlns.oracle.com/xdb/acl.xsd" xmlns:dav="DAV:">
<read-properties/>
<read-contents/>
<write-config/>
<link/>
<unlink/>
<read-acl/>
<write-acl-ref/>
<update-acl/>
<resolve/>
<link-to/>
<unlink-from/>
<dav:lock/>
<dav:unlock/>
<dav:write-properties/>
<dav:write-content/>
<dav:execute/>
<dav:take-ownership/>
<dav:read-current-user-privilege-set/>
</privilege>
1 row selected.
26.3 DBMS_XDB_CONFIG: 構成管理
PL/SQLパッケージDBMS_XDB_CONFIG
には、Oracle XML DBの構成管理用ファンクションおよびプロシージャが用意されています。
注意:
FTPポート番号またはHTTPポート番号を設定または変更する場合は、PL/SQLパッケージDBMS_XDB_CONFIG
のサブプログラムを使用することをお薦めします。構成ファイルxdbconfig.xml
を直接編集してポートを設定しないでください。
表26-3 DBMS_XDB_CONFIG: 構成管理サブプログラム
サブプログラム | 説明 |
---|---|
|
有効期限に対するURLパターンのマッピングを表 |
|
MIMEマッピングを表 |
|
スキーマの場所のマッピングを表 |
|
サーブレットを表 |
|
サーブレット・マッピングを表 |
|
セキュリティ・ロール参照をサーブレットに追加します。 |
|
XML拡張機能を表 |
|
現行セッションの構成情報を戻します。 |
|
現行のOracle XML DB構成ファイル |
|
Oracle XML DB構成情報を更新します。構成ファイル |
|
有効期限に対する指定されたURLパターンのすべてのマッピングを表 |
|
MIMEマッピングを表 |
|
スキーマの場所のマッピングを表 |
|
サーブレットを表 |
|
サーブレット・マッピングを表 |
|
セキュリティ・ロール参照をサーブレットから削除します。 |
|
XML拡張機能を表 |
|
Digest認証を有効にします。 |
|
現行のFTPポート番号を戻します。 |
|
HTTP構成レルムを戻します。 |
|
現行のHTTP(S)ポート番号を戻します。 |
|
HTTPサーバーに対するリスナーのエンド・ポイントのパラメータを戻します。 |
|
現行のリモートHTTP(S)ポートの番号を戻します。 |
|
Oracle XML DB FTPポートを、指定したポート番号に設定します。 |
|
HTTP構成レルムを設定します。 |
|
Oracle XML DB HTTP(S)ポートを、指定したポート番号に設定します。 |
|
HTTPサーバーに対するリスナーのエンド・ポイントのパラメータを設定します。 |
|
すべてのリスナーのエンド・ポイントを、(a) |
|
リモートHTTPポートまたはリモートHTTPSポートのポート番号をそれぞれ定義します。リモート・ポート番号が構成ファイルである |
|
同じマルチテナント・コンテナ・データベース(CDB)内のプラガブル・データベース(PDB)によって使用されるポートを戻します。戻り値は、各PDBをID番号別に、関連付けられたポートをタイプおよび番号別にリストする |
関連項目:
Oracle Database PL/SQLパッケージおよびタイプ・リファレンスの章「DBMS_XDB_CONFIG」
例26-6では、ファンクションcfg_get
を使用して、Oracle XML DB構成ファイルxdbconfig.xml
を取得しています。
例26-7は、プロシージャcfg_update
の使用方法を説明しています。現行の構成がXMLType
インスタンスとして取得され、変更されます。続いてcfg_update
を使用してリライトされます。
例26-6 DBMS_XDB_CONFIG.CFG_GETの使用
CONNECT SYSTEM Enter password: password Connected. SELECT DBMS_XDB_CONFIG.cfg_get() FROM DUAL; DBMS_XDB_CONFIG.CFG_GET() -------------------------------------------------------------------------------- <xdbconfig xmlns="http://xmlns.oracle.com/xdb/xdbconfig.xsd" xmlns:xsi="http://w ww.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.oracle.com/x db/xdbconfig.xsd http://xmlns.oracle.com/xdb /xdbconfig.xsd"> <sysconfig> <acl-max-age>19</acl-max-age> <acl-cache-size>32</acl-cache-size> <invalid-pathname-chars/> <case-sensitive>true</case-sensitive> <call-timeout>6000</call-timeout> <max-link-queue>65536</max-link-queue> <max-session-use>100</max-session-use> <persistent-sessions>false</persistent-sessions> <default-lock-timeout>3600</default-lock-timeout> <xdbcore-logfile-path>/sys/log/xdblog.xml</xdbcore-logfile-path> <xdbcore-log-level>0</xdbcore-log-level> <resource-view-cache-size>1048576</resource-view-cache-size> <protocolconfig> <common> . . . </common> <ftpconfig> . . . </ftpconfig> <httpconfig> <http-port>0</http-port> <http-listener>local_listener</http-listener> <http-protocol>tcp</http-protocol> <max-http-headers>64</max-http-headers> <max-header-size>16384</max-header-size> <max-request-body>2000000000</max-request-body> <session-timeout>6000</session-timeout> <server-name>XDB HTTP Server</server-name> <logfile-path>/sys/log/httplog.xml</logfile-path> <log-level>0</log-level> <servlet-realm>Basic realm="XDB"</servlet-realm> <webappconfig> . . . </webappconfig> <authentication> . . . </authentication> </protocolconfig> <xdbcore-xobmem-bound>1024</xdbcore-xobmem-bound> <xdbcore-loadableunit-size>16</xdbcore-loadableunit-size> <acl-evaluation-method>ace-order</acl-evaluation-method> </sysconfig> </xdbconfig> 1 row selected.
例26-7 DBMS_XDB_CONFIG.CFG_UPDATEの使用
DECLARE configxml SYS.XMLType; configxml2 SYS.XMLType; BEGIN -- Get the current configuration configxml := DBMS_XDB_CONFIG.cfg_get(); -- Modify the configuration SELECT XMLQuery( 'declare default element namespace "http://xmlns.oracle.com/xdb/xdbconfig.xsd"; (: :) copy $i := $p1 modify (for $j in $i/xdbconfig/sysconfig/protocolconfig/httpconfig/http-port return replace value of node $j with $p2) return $i' PASSING CONFIGXML AS "p1", '8000' AS "p2" RETURNING CONTENT) INTO configxml2 FROM DUAL; -- Update the configuration to use the modified version DBMS_XDB_CONFIG.cfg_update(configxml2); END; / PL/SQL procedure successfully completed. SELECT DBMS_XDB_CONFIG.cfg_get() FROM DUAL; DBMS_XDB_CONFIG.CFG_GET() -------------------------------------------------------------------------------- <xdbconfig xmlns="http://xmlns.oracle.com/xdb/xdbconfig.xsd" xmlns:xsi="http://w ww.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.oracle.com/x db/xdbconfig.xsd http://xmlns.oracle.com/xdb/xdbconfig.xsd"> <sysconfig> <acl-max-age>15</acl-max-age> <acl-cache-size>32</acl-cache-size> <invalid-pathname-chars/> <case-sensitive>true</case-sensitive> <call-timeout>6000</call-timeout> <max-link-queue>65536</max-link-queue> <max-session-use>100</max-session-use> <persistent-sessions>false</persistent-sessions> <default-lock-timeout>3600</default-lock-timeout> <xdbcore-logfile-path>/sys/log/xdblog.xml</xdbcore-logfile-path> <resource-view-cache-size>1048576</resource-view-cache-size> <protocolconfig> <common> . . . </common> <ftpconfig> . . . </ftpconfig> <httpconfig> <http-port>8000</http-port> . . . </httpconfig> </protocolconfig> <xdbcore-xobmem-bound>1024</xdbcore-xobmem-bound> <xdbcore-loadableunit-size>16</xdbcore-loadableunit-size> <acl-evaluation-method>ace-order</acl-evaluation-method> </xdbconfig> 1 row selected.