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.