プライマリ・コンテンツに移動
Oracle® XML DB開発者ガイド
12cリリース1 (12.1)
B71282-04
目次へ移動
目次
索引へ移動
索引

前
次

27 リポジトリのアクセス制御

Oracle Databaseでは、データベース・ユーザーが行レベルおよび列レベルでセキュアにアクセスできるなど、従来型のデータベース・セキュリティが提供されています。また、Oracle XML DBリポジトリ内のリソースに対するファイングレイン・アクセス制御も提供されています。アクセス制御リスト(ACL)を作成、設定および変更できます。

関連項目:

27.1 アクセス制御の概念

アクセス制御の用語および概念について説明します。アクセス制御エンティティ(ユーザー、ロール、プリンシパル、権限、アクセス制御リスト(ACL)およびアクセス制御エントリ(ACE))はそれぞれ、XML文書またはフラグメントとして宣言的に実装されます。

セキュアな認可を行うためには、どのユーザー、アプリケーションまたは関数が、どのような種類の操作を実行するために、どのデータにアクセスできるかを定義することが必要です。つまり、(1)どのユーザーが(2)どの操作を(3)どのデータに対して実行できるか、という3つの局面があります。この3つの局面をそれぞれ、(1)プリンシパル、(2)権限、(3)オブジェクトと呼びます。プリンシパルは、ユーザーまたはロールです。

プリンシパルと権限(局面1と2)は、アクセス制御リストを定義することにより、宣言的に関連付けられます。その後、これらは3番目の局面であるデータに、様々な方法で宣言的または手続き的に関連付けられます。たとえば、Oracle XML DBリポジトリのリソースまたは表データを保護するには、PL/SQLプロシージャDBMS_XDB_REPOS.setACLを使用して、それを制御するACLを設定します。

27.1.1 認証と認可

認証とは、何かのアイデンティティ(ユーザー、デバイス、アプリケーションなど)を検証することです。認可とは、認証されたものが別の何か(データベース表やWebDAVリソースなど)に対するアクセスを許可されているかどうかを検証することです。

Oracle XML DBリポジトリ・リソースにアクセスする場合、様々な種類のプリンシパルを認可できます。アプリケーション固有のプリンシパルを認証できます。

関連項目:

  • プリンシパルの詳細は、「プリンシパル: ユーザーまたはロール」を参照してください

  • アプリケーション固有のプリンシパルの認証および認可の詳細は、「アプリケーションによるカスタム認証とカスタム認可」(27‐31ページ)を参照してください。

27.1.2 プリンシパル: ユーザーまたはロール

ファイングレイン・データベース・アクセス制御のコンテキストにおいては、プリンシパルは、最終的にデータベース内の情報にアクセスする1人以上の個人または1つ以上のアプリケーションのセットです。プリンシパルには、データベースのユーザーやロールまたはLDAPのユーザーやグループを指定できます。

プリンシパルはユーザーまたはロールです。ユーザーは、データベース内の情報にアクセスする個人またはアプリケーションです。ロールは、ユーザーまたは他のロールで構成されますが、この再帰は循環型にできません。最終的には、各ロール(つまり各プリンシパル)はユーザーのセットに対応します。

ユーザーは、アクセス制御の目的で要素userを持つXMLフラグメントで表されます。ロールは、要素roleを持つフラグメントで表されます。

Oracle Databaseでは、プリンシパルとして次のものをサポートしています。

  • データベース・ユーザーおよびデータベース・ロールデータベース・ユーザーは、データベース・スキーマまたはユーザー・アカウントと呼ばれることもあります。個人またはアプリケーションはデータベースにログオンするとき、データベース・ユーザー(スキーマ)およびパスワードを使用します。データベース・ロールは、データベース・ユーザー、アプリケーションまたは他のデータベース・ロールに付与できるデータベース権限のセットに対応しています。データベース・ロールおよびACLによる権限のユーザーへのマップを参照してください。

  • LDAPユーザーおよびLDAPユーザー・グループ。LDAPプリンシパルの使用の詳細は、「Oracle XML DBのLDAPとの統合」を参照してください。

ここで「ユーザー」または「ロール」のように何も付かない語が使用されている場合、それはすべてのタイプのユーザーまたはロールに適用されます。タイプを区別することが重要な場合は、「データベース」または「LDAP」という語が付いています。

27.1.2.1 データベース・ロールおよびACLによる権限のユーザーへのマップ

データベース・ロールは、ユーザーに権限をマップします。ファイングレイン・アクセス制御のコンテキストにおいては、権限はACLによってユーザーにマップされ、ロールは単なる一連のユーザーです。

データベース・ユーザーに権限を付与できるのと同様、データベース・ロールにも権限が付与されます。データベース・ロールは、データベース権限をデータベース・ユーザー(およびアプリケーション)にマップするための媒介として機能します。つまり、ロールに権限が付与されてから、そのロールがユーザーに付与されます(それによりユーザーに権限が付与されます)。

ユーザーのグループと、それらのユーザーに付与された権限のグループとの違いは、データベース・ロールの概念においては少しあいまいです。データベース・ロールによって、ユーザーにマップされた権限をグループ化したり、権限がマップされたユーザーをグループ化したりすることもできるためです。マッピングは、ロールを定義してユーザーに付与することにより行われます。従来のデータベース用語では、ロールを、それに割り当てられた権限のセットと同じものとして考えます。

ファイングレイン・アクセス制御の関連においては、別のメカニズムであるアクセス制御リスト(ACL)が、権限をユーザーにマップする媒介として使用されます。ロールは単なるユーザーのセットです。この場合、権限をユーザーおよびロールに関連付ける操作はデータベース権限ではありません。この操作は、ACLのランタイム評価やACL競合の解消とともに、宣言的なACLエントリです。

混同しないように、この用語の違いに注意してください。権限をユーザーにマップする手段として、アクセス制御では(1)プリンシパル、(2)権限、(3)ACLとして分類されている機能のいくつかは、データベース・ロールではまとめられています。アクセス制御の用語においては、ロールはユーザーとともにプリンシパルとして分類されます。これに対し、従来のデータベース用語においては、ロールは権限のセットとして分類されます。

27.1.2.2 プリンシパルDAV::owner

プリンシパルDAV::ownerを使用して、指定したリポジトリ・リソースの所有者を参照できます。リソースの所有者は、リソースのプロパティの1つです。通常、リソースの所有者は特別な権限を持っているため、プリンシパルDAV::ownerを使用すると、プリンシパル間でのACLの共有が簡単になります。

27.1.3 権限

権限とは、プリンシパルに対して付与または拒否される特定の権限です。権限は、集約権限または基本権限になります。集約権限にはその他の権限が含まれますが、基本権限には含まれません。

  • 集約権限: 他の権限が含まれる権限。

  • 基本権限: 他の権限は含まれない権限。それ以上分割できません。

集約権限は、権限の数が多くなった場合の操作性を簡略化し、ACLクライアント間の相互運用性を高めます。「権限」を参照してください。

集約権限はそのまま保持され、対応する基本(リーフ)権限に分割されません。WebDAVの用語において、Oracle Databaseの集約権限は抽象的でありません。つまり、集約権限は、それらのコンポーネントのコピーではなく、そのコンポーネント権限へのポインタのセットとして機能します。したがって、コンポーネントの定義が変更された場合でも、集約権限は常に最新の状態を保持します。

プリンシパルに付与された権限のセットによって、プリンシパルが保護するデータに対して特定の操作を実行できるかどうかが制御されます。たとえば、プリンシパル(データベース・ユーザー)HRが特定のリソースに対してread操作を実行するには、読取り操作の前にHRに読取り権限が付与されている必要があります。

27.1.4 アクセス制御エントリ(ACE)

アクセス制御エントリ(ACE)とは、アクセス制御リスト(ACL)内のエントリであるXML要素(ace)のことです。ACEは、特定のプリンシパルによるリポジトリ・リソースまたはその他のデータベース・データへのアクセスを許可または拒否します。

ACE自身は、保護対象のデータを指定しません。この指定はACEおよびACLの外側で、ACLをターゲット・データに関連付けることによって行われます。その関連付けを行う方法として、PL/SQLプロシージャDBMS_XDB_REPOS.setACLを使用する方法があります。

「ACLおよびACEの評価」を参照してください。

Oracle XML DB ACEは、プリンシパルの権限を付与または拒否します。ace要素は、次を含みます。

  • 操作grant: true(grant)またはfalse(deny)アクセスのいずれか。

  • 有効なプリンシパル(要素principal)またはプリンシパルの完了済リスト(要素invert)のいずれか。

  • 権限: 特定のプリンシパルに対して付与または拒否される権限のセット(要素privilege)。

  • プリンシパル書式(オプション): プリンシパルの書式。LDAPの識別名(DN)、短縮名(データベース・ユーザー/ロールまたはLDAPのニックネーム)またはLDAPグローバル一意識別子(GUID)。デフォルト値はshort nameです。プリンシパル名がデータベース・ユーザーとLDAPニックネームの両方に一致している場合は、LDAPのニックネームを示すとみなされます。

  • コレクション(オプション): プリンシパルがユーザーのコレクション(LDAPグループまたはデータベース・ロール)であるか、単一のユーザー(LDAPユーザーまたはデータベース・ユーザー)であるかどうかを指定するBOOLEAN属性。

例27-1に、プリンシパルDAV::ownerに権限DAV::allを付与する単純なACEを示します。つまり、ACLが適用されるリソースの所有者にすべての権限を付与します。

例27-1 権限を付与する単純なアクセス制御エントリ(ACE)

<ace>
  <grant>true</grant>
  <principal>DAV::owner</principal>
  <privilege>
    <DAV::all/>
  </privilege>
</ace>

27.1.5 アクセス制御リスト(ACL)

アクセス制御リスト(ACL)とは、アクセス制御エントリ(ACE)のリストです。デフォルトでは、リストの順序には意味があります。

例27-2に、例27-1のACEのみを含む単純なACLを示します。

例27-2 権限を付与する単純なアクセス制御リスト(ACL)

<acl description="myacl"
     xmlns="http://xmlns.oracle.com/xdb/acl.xsd"
     xmlns:dav="DAV:"
     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">
  <ace>
    <grant>true</grant>
    <principal>dav:owner</principal>
    <privilege>
      <dav:all/>
    </privilege>
  </ace>
</acl>

27.2 リポジトリ操作のためのデータベース権限

Oracle XML DBリポジトリのリソースに対する一般的な操作に必要なデータベース権限について説明します。

表27-1に、Oracle XML DBリポジトリのリソースに対するいくつかの一般的な操作に必要なデータベース権限を示します。必要な権限列に示された権限の他に、そのリソースが属するフォルダおよびその親フォルダすべて(ルート・フォルダまで)に対するresolve権限が必要です。

表27-1 Oracle XML DBリソースの操作に必要なデータベース権限

操作 説明 必要な権限

CREATE

フォルダFに新しいリソースを作成します。

フォルダFに対するupdateおよびlink

DELETE

フォルダFからリソースRを削除します。

Rに対するupdateおよびunlink-from、フォルダFに対するupdateおよびunlink

UPDATE

リソースRのコンテンツまたはプロパティを更新します。

Rに対するupdate

GET

FTPまたはHTTP(S)によるリソースRの取出し。

Rに対するread-propertiesread-contents

SET_ACL

リソースRのACLを設定します。

Rに対するDAV:write-acl

LIST

フォルダFのリソースをリストします。

フォルダFに対するread-properties、フォルダFのリソースに対するread-properties。ユーザーがread-properties権限を所有しているリソースのみがリストされます。

関連項目:

アップグレードの際のデータベース・アクセス権限の処理の詳細は、「既存のOracle XML DBのインストールのアップグレードまたはダウングレード」を参照してください。

27.3 権限

Oracle Databaseに提供される権限には、標準のWebDAV権限とOracle固有の権限があります。

標準のWebDAV権限では、WebDAV名前空間DAV:脚注1を使用します。Oracle固有の権限では、事前定義された接頭辞xdbを含むOracle XML DB ACL名前空間(http://xmlns.oracle.com/xdb/acl.xsd)を使用します。

関連項目:

RFC 3744: 2004年5月の「Web Distributed Authoring and Versioning (WebDAV) Access Control Protocol」の「IETF Network Working Group Request For Comments #3744」を参照してください。

27.3.1 基本権限

基本権限には、他の権限は含まれません。リポジトリ操作に使用可能な基本権限について説明し、そのデータベースでの操作をリストします。

表27-2 基本権限

基本権限 説明 データベースでの操作

DAV::lock

WebDAVロックを使用してリソースをロックします。

UPDATE

DAV::read-current-user-privilege-set

リソースのDAV::current-user-privilege-setプロパティにアクセスします。

なし

DAV::take-ownership

リソースの所有権を取得します。

なし

DAV::unlock

WebDAVロックを使用してロックされたリソースのロックを解除します。

UPDATE

DAV::write-content

リソースのコンテンツを変更します。

UPDATE

DAV::write-properties

リソースのプロパティを変更します。リソースをロックまたはロック解除します。変更可能なプロパティには、AuthorDisplayNameLanguageCharacterSetContentTypeSBResExtraOwnerOwnerIDCreationDateModification DateACLACLOIDLock、およびLocktokenが含まれます。

UPDATE

xdb:link

リソースからのリンクの作成を可能にします。

INSERT

xdb:link-to

リソースへのリンクの作成を可能にします。

なし

xdb:read-acl

リソースのACLを読み取ります。

SELECT

xdb:read-contents

リソースのコンテンツを読み取ります。

SELECT

xdb:read-properties

リソースのプロパティを読み取ります。

SELECT

xdb:resolve

フォルダを検索します(フォルダの場合のみ)。

SELECT

xdb:unlink

リソースからのリンクの削除を可能にします。

DELETE

xdb:unlink-from

リソースへのリンクの削除を可能にします。

なし

xdb:update-acl

リソースのACLのコンテンツを変更します。

UPDATE

xdb:write-acl-ref

リソースのACLOIDを変更します。

UPDATE

27.3.2 集約権限

集約権限には、他の権限(基本または集約)が含まれます。リポジトリ操作に使用可能な集約権限をそのコンポーネントの基本権限とともにリストします。

表27-3 集約権限

集約権限 コンポーネントの基本権限

DAV:all

すべての基本DAV権限

xdb:all

すべての基本DAV権限(xdb:link-toを含む)

DAV::bind

xdb:link

DAV::unbind

xdb:unlink

DAV::read

xdb:read-propertiesxdb:read-contentsxdb:resolve

DAV::read-acl

xdb:read-acl

DAV::write

DAV::write-contentDAV::write-propertiesxdb:linkxdb:unlinkxdb:unlink-from

DAV::write-acl

xdb:write-acl-refxdb:update-acl

DAV::update

DAV::write-contentDAV::write-properties

xdb:update

DAV::write-propertiesDAV::write-content

27.4 ACLおよびACE

ACLは、リソースを保護するために使用されます。Oracle Databaseの場合、Oracle XML DBリポジトリ内のリソース(ファイルおよびフォルダ)です。ACLはACEで構成されます。

アクセス制御リスト(ACL)は、Javaなどの言語やMicrosoft Windowsなどのオペレーティング・システムで使用される、標準のセキュリティ・メカニズムです。ACLは、WebDAV標準の一部でもあります。

リポジトリのリソースには、WebDAVを使用してアクセスできます。リソースを保護するACLは、WebDAV ACLとして機能します。各リポジトリ・リソースは、ACLによって保護されます。リソースを保護するACLは、リソースのアクセス方法(WebDAV、SQL、またはその他の方法)にかかわらず適用されます。

Oracle XML DBリポジトリに新しいリソースが作成されると、デフォルトでは、親フォルダのACLを使用してリソースが保護されます。リソースの作成後に、新しいACLを設定できます。

Oracle Database内のACLは、/sys/schemas/PUBLIC/xmlns.oracle.com/xdb/acl.xsdのOracle XML DBリポジトリにあるOracle Database ACL XMLスキーマに基づいて検証されるXML文書です。ACL自体はリポジトリ内にリソースとして格納され、管理されます。

ACLで保護されたデータに対してプリンシパルが操作を実行する前に、保護されたデータに対するユーザー権限が確認されます。確認される権限は、実行される操作によって異なります。

集約権限は、他の権限で構成されます。ACLが保存されると、そのACLが参照する集約権限は、それらのコンポーネント権限へのポインタのセットとなります。

すべてのACLは、データベース・スキーマ(ユーザー・アカウント) XDBが所有する表XDB$ACLに格納されます。この表は、XML Schemaに基づくXMLType表です。したがって、この表のすべての行(つまり各ACL)に、OBJECT_IDという名前の列としてアクセスできるシステム生成のオブジェクトID (OID)があります。

Oracle XML DBリポジトリの各リソースには、ACLOIDという名前のプロパティがあります。ACLOIDには、リソースを保護するACLのOIDが格納されます。ACL自身はリソースであり、ACL(たとえば/sys/acls/all_all_acl.xml)のXMLRefプロパティは、ACLの内容を含む表XDB$ACL内の行に対するREFです。これらの2つのプロパティが、Oracle XML DBリソースを格納する表XDB$RESOURCEと表XDB$ACLをリンクしています。

関連項目:

  • ACL XML Schemaについては、 Oracleが提供するXML Schemaおよび例を参照してください。

  • データベース・スキーマXDBの詳細は、『Oracle Database 2日でセキュリティ・ガイド』を参照してください。

27.4.1 システムACL

事前定義され、Oracle Databaseで提供されているシステムACLについて説明します。

一部のACLは事前定義されており、Oracle Databaseで提供されています。これらのACLはシステムACLと呼ばれます。

自己保護型のACL(それ自体の内容によって保護されるACL)は1つしかありません。これはブートストラップACLと呼ばれるシステムACLであり、Oracle XML DBリポジトリの/sys/acls/bootstrap_acl.xmlにあります。ブートストラップACLは、すべてのユーザーにREAD権限を付与します。また、ブートストラップACLは、データベース・ロールXDBADMIN (Oracle XML DB ADMIN)およびDBAFULL ACCESS権を付与します。データベース・ロールXDBADMINは特に、グローバルXML Schemaの登録を必要とするユーザーに役立ちます。

この他に、次のようなACLがあります。いずれもブートストラップACLにより保護されています。

  • all_all_acl.xml - すべての権限をすべてのユーザーに付与します。

  • all_owner_acl.xml - すべての権限をリソースの所有者に付与します。

  • ro_all_acl.xml - read権限をすべてのユーザーに付与します。

システムACLはファイル・ネーミング規則<privilege>_<users>_acl.xmlを使用します。ここで<privilege>は付与される権限を示し、<users>はリソースへのアクセスを許可されるユーザーを示します。独自のACLを定義する場合は、任意の名前を使用できます。

27.4.2 ACLおよびACEの評価

プリンシパルが、ACLによって保護されたリポジトリ・リソースへのアクセスを許可される前に、権限が確認されます。この確認は、そのプリンシパルのACLの保護を順に評価することによって行われます。このようなACLごとに、プリンシパルに適用されるACEが順に検査されます。

1つのACEが現行ユーザーになんらかの権限を付与し、他のACEがユーザーに対してその権限を拒否すると、競合が発生します。同一のプリンシパルに対するACE間の競合を管理する方法は2つあります。

  • ace-orderと呼ばれるデフォルトの動作では、指定されたプリンシパルに対して発生する最初のACEのみが使用されます。そのプリンシパルに対する追加のACEは無効です。この場合、ACEの順序に意味があります

  • ただし、deny-trumps-grantという代替の動作を使用するようにデータベースを構成できます。この場合、特定のプリンシパルに対して子denyを持つACEはいずれも、そのプリンシパルに対してgrantの子を持つ他のACEの有無にかかわらず、そのプリンシパルへの権限を拒否します。この場合、denyは常にgrantよりも優先され、ACEの順序は関係ありません

構成ファイルxdbconfig.xml内の構成パラメータacl-evaluation-methodace-orderまたはdeny-trumps-grantのいずれかに設定し、ACL評価の動作を構成できます。デフォルトの構成ファイルではace-methodが指定されますが、メソッドが指定されない場合に使用される要素acl-evaluation-methoddeny-trumps-grantです。

注意:

Oracle Database 11gリリース1より前のリリースでは、ACL評価動作は、deny-trumps-grantの1つのみが利用可能でした(ただし、構成ファイル内では指定されません)。

ace-orderをデフォルト動作として使用するように変更すると、データベースのバージョン間でのアップグレードおよびダウングレードに重大な影響を及ぼします。「既存のOracle XML DBのインストールのアップグレードまたはダウングレード」を参照してください。

27.4.3 ACL検証

ACLは作成されると、ACL用のXML Schemaに基づいて検証され、いくつかの正確性テスト(ACEの開始日と終了日が時間的に矛盾していないことの確認など)が実行されます。ACLの作成時に、ACL間のリレーションについての完全チェックは行われません。

このようなACLの正確性に関する完全なチェックをACL妥当性チェックと呼びます。これをXML Schemaの妥当性と混同しないでください。ACLが(ACLとして)有効になるためには、同時にXML Schemaでも有効である必要がありますが、その逆は言えません。

プリンシパルに操作を行うための適切な権限があるかどうかをチェックするためにACLが評価されるたびに、完全なACL妥当性チェックが実行時に行われます。このチェックによりACLが無効であると判断された場合、そのACLが指定されたプリンシパルに付与するすべての権限は拒否されます。

27.4.4 要素invert: ACEでのプリンシパルの補完

別のプリンシパル・セットを補完することによりプリンシパル・セットを定義するほうが便利な場合もあります。ACE要素invertは、この目的で使用します。追加するプリンシパルをすべてリストするのではなく、要素invertを使用して、除外するプリンシパルのリストを囲みます。

例27-3の最初のACEは、IntranetUsers以外のすべてのプリンシパルに対して権限privilege1を拒否しています。(デフォルトで)ACEは出現順に考慮されるため、後続のACEはすべて最初のACEによりオーバーライドされます。このため、プリンシパルNonIntraNetUserは明示的に権限を付与されているにもかかわらず、権限privilege1を拒否されます。

例27-3 要素invertを使用したプリンシパル・セットの補完

<acl description="invert ACL" 
     xmlns="http://xmlns.oracle.com/xdb/acl.xsd"
     xmlns:dav="DAV:" 
     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">
  <extends-from type="simple" href="/sys/acls/parent_acl.xml"/>
  <ace>
    <grant>false</grant>
    <invert><principal>dav:owner</principal></invert>
    <privilege><read-contents/></privilege>
  </ace>
  <ace>
    <grant>true</grant>
    <principal>GERONIMO</principal>
    <privilege><read-contents/></privilege>
  </ace>
</acl>

27.5 アクセス制御リスト(ACL)の使用の概要

Oracle Databaseのアクセス制御リスト(ACL)はそれ自身がOracle XML DBリポジトリ内のリソースなので、リポジトリのリソースを操作するメソッドはすべてACLにも適用されます。さらに、PL/SQLパッケージDBMS_XDB_REPOSのACLに固有のAPIもいくつかあります。

これらのACLプロシージャや関数を使用すると、PL/SQLを使用してOracle XML DBのセキュリティ・メカニズムにアクセスし、特定のACLに基づいてユーザーの権限を確認して、特定のACLやリソースに対して現行ユーザーが所有している権限のセットをリストできます。

27.5.1 DBMS_XDB_REPOS.CREATERESOURCEを使用したACLの作成

DBMS_XDB_REPOS.createResourceを使用してACLを作成する例を示します。

例27-4では、ACLをファイル・リソース/TESTUSER/acl1.xmlとして作成します。リソースに適用されると、このACLはすべての権限をリソースの所有者に付与します。

注意:

現在のトランザクション中に作成されたACLファイル・リソースを使用する操作を実行する前に、COMMIT操作を実行する必要があります。それまでは、ACLファイルを使用するたびにORA-22881エラー「REFの参照先がありません」が発生します。

例27-4 CREATERESOURCEを使用したACLの作成

DECLARE
  b BOOLEAN;
BEGIN
  b := DBMS_XDB_REPOS.createFolder('/TESTUSER');
  b := DBMS_XDB_REPOS.createResource(
         '/TESTUSER/acl1.xml', 
         '<acl description="myacl"
               xmlns="http://xmlns.oracle.com/xdb/acl.xsd"
               xmlns:dav="DAV:"
               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">
            <ace>
              <grant>true</grant>
              <principal>dav:owner</principal>
              <privilege>
                <dav:all/>
              </privilege>
            </ace>
          </acl>',
         'http://xmlns.oracle.com/xdb/acl.xsd',
         'acl');
END;

27.5.2 リポジトリのパスがある場合のACL文書の取得

ACL文書のOracle XML DBリポジトリ内の場所がわかっている場合にACL文書を取得する例を示します。

例27-5 リポジトリのパスがある場合のACL文書の取得

SELECT a.OBJECT_VALUE FROM RESOURCE_VIEW rv, XDB.XDB$ACL a
  WHERE ref(a)
        = XMLCast(XMLQuery('declare default element namespace
                            "http://xmlns.oracle.com/xdb/XDBResource.xsd"; (: :)
                            fn:data(/Resource/XMLRef)'
                           PASSING rv.RES RETURNING CONTENT)
                  AS REF XMLType)
    AND equals_path(rv.RES, '/TESTUSER/acl1.xml') = 1;

OBJECT_VALUE
--------------------------------------------------------------------------------
<acl description="myacl" xmlns="http://xmlns.oracle.com/xdb/acl.xsd" xmlns:dav="
DAV:" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="
http://xmlns.oracle.com/xdb/acl.xsd                                    http://xm
lns.oracle.com/xdb/acl.xsd" shared="true">
  <ace>
    <grant>true</grant>
    <principal>dav:owner</principal>
    <privilege>
      <dav:all/>
    </privilege>
  </ace>
</acl>

27.5.3 リソースのACLの設定

PL/SQLプロシージャDBMS_XDB_REPOS.setACLを使用して、リソースのACLを設定する例を示します。

例27-6では、リソース/TESTUSER/po1.xmlを作成し、PL/SQLプロシージャDBMS_XDB_REPOS.setACLを使用してそのACLを/TESTUSER/acl1.xmlに設定します。

例27-6 リソースのACLの設定

DECLARE
  b BOOLEAN;
BEGIN
  b := DBMS_XDB_REPOS_REPOS.createResource('/TESTUSER/po1.xml', 'Hello');
END;
/
 
CALL DBMS_XDB_REPOS_REPOS.setACL('/TESTUSER/po1.xml', '/TESTUSER/acl1.xml');

27.5.4 ACLの削除

PL/SQLプロシージャDBMS_XDB_REPOS.deleteResourceを使用して、ACLを削除する例を示します。

例27-7では、例27-4で作成したACLを削除します。

リソースが削除するACLによって保護されている場合は、ACLを削除する前にそのリソースのACLを変更してください。

例27-7 ACLの削除

CALL DBMS_XDB_REPOS_REPOS.deleteResource('/TESTUSER/acl1.xml');

27.5.5 ACLの更新

ACLの更新は、リソースを更新するための標準メソッドを使用して実行できます。特にACLはXML文書なので、ACLの操作にはOracle SQL/XML関数XMLQueryとXQuery Updateを使用できます。COMMITは、ACLの変更後に実行する必要があります。

Oracle XML DB ACLは、高速評価のためにキャッシュされます。ACLを更新するトランザクションがコミットされると、Oracle XML DBの構成ファイル/xdbconfig.xmlに指定されたタイムアウトの経過後、既存のデータベース・セッションによって、変更済のACLが取り出されます。このtimoutパラメータのXPath位置は、/xdbconfig/sysconfig/acl-max-ageです。値を表す単位は秒です。ACLの変更後に開始されるセッションでは、新しいACLが遅延なしに使用されます。

ACLリソースが非ACLコンテンツで更新される場合、ACLの削除と同じ規則が適用されます。つまり、リソースが更新対象のACLによって保護されている場合は、最初にそのACLを変更してください。

関連項目:

ここでXMLデータの更新に使用されているOracle SQL関数の詳細は、「XMLデータの更新」を参照してください

FTPまたはWebDAVを使用してACLを更新できます。これらのプロトコルの使用方法の詳細は、 プロトコルを使用したリポジトリへのアクセスを参照してください。RESOURCE_VIEWを使用して、ACLの更新や、アクセス制御エントリ(ACE)の変更を行えます。

例27-8では、SQL/XML関数XMLQueryをXQuery Updateとともに使用して、ACL /TESTUSER/acl1.xmlを完全に置換することによって更新しています。その結果、プリンシパル値DAV::ownerTESTUSERで置換されます。置換ACLの他の部分は以前と同じだからです。

例27-9では、XQuery Updateを使用して、既存のACLにACEを追加しています。このACEは、ユーザーHRに、権限read-propertiesおよびread-contentsを付与します。

例27-10では、Oracle SQL関数deleteXMLを使用して、既存のACLからACEを削除しています。最初のACEは削除されます。

例27-8 アクセス制御リストの更新(置換)

UPDATE RESOURCE_VIEW r
 SET r.RES =
   XMLQuery(
     'declare namespace r="http://xmlns.oracle.com/xdb/XDBResource.xsd"; (: :)
      declare namespace a="http://xmlns.oracle.com/xdb/acl.xsd"; (: :)
      copy $i := $p1 modify
        (for $j in $i/r:Resource/r:Contents/a:acl
         return replace node $j with $p2)
      return $i'
     PASSING r.RES AS "p1",
             '<acl description="myacl"
                   xmlns="http://xmlns.oracle.com/xdb/acl.xsd"
                   xmlns:dav="DAV:"
                   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">
                <ace>
                  <grant>true</grant>
                  <principal>TESTUSER</principal>
                  <privilege><dav:all/></privilege>
                </ace>
              </acl>' AS "p2"
     RETURNING CONTENT)
  WHERE equals_path(r.RES, '/TESTUSER/acl1.xml') = 1;

例27-9 アクセス制御リストへのACEの追加

UPDATE RESOURCE_VIEW r
  SET r.RES =
    XMLQuery('declare namespace r="http://xmlns.oracle.com/xdb/XDBResource.xsd"; (: :)
              declare namespace a="http://xmlns.oracle.com/xdb/acl.xsd"; (: :)
              copy $i := $p1 modify
                (for $j in $i/r:Resource/r:Contents/a:acl
                 return insert nodes $p2 as last into $j)
              return $i'
             PASSING r.RES AS "p1",
                     XMLType('<ace xmlns="http://xmlns.oracle.com/xdb/acl.xsd">
                                 <grant>true</grant>
                                 <principal>HR</principal>
                                 <privilege>
                                   <read-properties/>
                                   <read-contents/>
                                 </privilege>
                              </ace>') as "p2"
             RETURNING CONTENT)
  WHERE equals_path(r.RES, '/TESTUSER/acl1.xml') = 1;

例27-10 アクセス制御リストからのACEの削除

UPDATE RESOURCE_VIEW r
  SET r.RES =
    XMLQuery('declare namespace r="http://xmlns.oracle.com/xdb/XDBResource.xsd"; (: :)
              declare namespace a="http://xmlns.oracle.com/xdb/acl.xsd"; (: :)
              copy $i := $p modify delete nodes $i/r:Resource/r:Contents/a:acl/a:ace[1]
              return $i'
             PASSING r.RES AS "p" RETURNING CONTENT)
  WHERE equals_path(r.RES, '/TESTUSER/acl1.xml') = 1;

27.5.6 指定されたリソースを保護するACL文書の取得

PL/SQLファンクションDBMS_XDB_REPOS.getACLDocumentを使用して、指定されたリソースを保護するACL文書を取得する例を示します。

関連項目:

例26-2

例27-11 リソースのACL文書の取得

SELECT XMLSerialize(DOCUMENT DBMS_XDB_REPOS.getACLDocument('/TESTUSER/po1.xml')
                    AS CLOB)
  FROM DUAL;
 
XMLSERIALIZE(DOCUMENTDBMS_XDB_REPOS.GETACLDOCUMENT('/TESTUSER/PO1.XML')ASCLOB)
--------------------------------------------------------------------------------
<acl description="myacl" xmlns="http://xmlns.oracle.com/xdb/acl.xsd" xmlns:dav="
DAV:" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="
http://xmlns.oracle.com/xdb/acl.xsd                                     http://x
mlns.oracle.com/xdb/acl.xsd">
  <ace>
    <grant>true</grant>
    <principal>TESTUSER</principal>
    <privilege>
      <dav:all/>
    </privilege>
  </ace>
  <ace xmlns="http://xmlns.oracle.com/xdb/acl.xsd">
    <grant>true</grant>
    <principal>HR</principal>
    <privilege>
      <read-properties/>
      <read-contents/>
    </privilege>
  </ace>
</acl>
 
1 row selected.

27.5.7 特定のリソースに対して現行ユーザーに付与された権限の取得

PL/SQLファンクションDBMS_XDB_REPOS.getPrivilegesを使用して、現行ユーザーに付与された権限を取得する例を示します。

例27-12 特定のリソースに対して現行ユーザーに付与された権限の取得

SELECT XMLSerialize(DOCUMENT DBMS_XDB_REPOS.getPrivileges('/TESTUSER/po1.xml')
                    AS CLOB)
  FROM DUAL;
 
XMLSERIALIZE(DOCUMENTDBMS_XDB_REPOS.GETPRIVILEGES('/TESTUSER/PO1.XML')ASCLOB)
--------------------------------------------------------------------------------
<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-acl/>
  <dav:execute/>
  <read-contents/>
  <update-acl/>
  <dav:write-content/>
  <dav:read-current-user-privilege-set/>
  <link-to/>
  <resolve/>
  <dav:lock/>
  <unlink-from/>
  <write-config/>
  <dav:write-properties/>
  <dav:unlock/>
  <link/>
  <write-acl-ref/>
  <read-properties/>
  <dav:take-ownership/>
  <unlink/>
</privilege>

1 row selected.

27.5.8 現行ユーザーがリソースに対する権限を所有しているかどうかの確認

PL/SQLファンクションDBMS_XDB_REPOS.checkPrivilegesを使用して、現行ユーザーがリソースに対する特定の権限セットを所有しているかどうかを確認する例を示します。ユーザーがその権限を所有している場合、この関数は、ゼロ以外の値を戻します。

例27-13では、リソース/TESTUSER/po1.xmlに対するアクセス権限read-contentsおよびread-propertiesが、現行ユーザーに付与されているかどうかを確認しています。戻り値が正の整数であれば、ユーザーがその権限を持っていることを示しています。

例27-13 あるリソースに対してユーザーが特定の権限を所有しているかどうかの確認

SELECT DBMS_XDB_REPOS.checkPrivileges(
         '/TESTUSER/po1.xml',
         XMLType('<privilege
                      xmlns="http://xmlns.oracle.com/xdb/acl.xsd"
                      xmlns:dav="DAV:"
                      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">
                    <read-contents/>
                    <read-properties/>
                  </privilege>'))
  FROM DUAL;
 
DBMS_XDB_REPOS.CHECKPRIVILEGES('/TESTUSER/PO1.XML',
---------------------------------------------------
                                                  1
 
1 row selected.

27.5.9 ユーザーがACLおよびリソース所有者を使用する権限を所有しているかどうかの確認

ファンクションDBMS_XDB_REPOS.ACLCheckPrivileges は、通常、ユーザーによる操作の実行を許可する前に、独自にACLの評価を実行する必要のあるアプリケーションによって使用されます。

例27-14では、ACL /TESTUSER/acl1.xmlにより、権限read-contentsおよびread-propertiesが、現行ユーザーshに付与されているかどうかを確認しています。2番目の引数TESTUSERは、確認時にACLのDAV::ownerに置き換えられたユーザーです。ユーザーshは、指定された権限を付与されたユーザーのいずれにも一致しないため、戻り値はゼロです。

例27-14 ACLCheckPrivilegesを使用したユーザー権限の確認

CONNECT sh
Enter password: <password>

Connected.

SELECT DBMS_XDB_REPOS.ACLCheckPrivileges(
         '/TESTUSER/acl1.xml',
         'TESTUSER',
         XMLType('<privilege
                      xmlns="http://xmlns.oracle.com/xdb/acl.xsd"
                      xmlns:dav="DAV:"
                      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">
                    <read-contents/>
                    <read-properties/>
                  </privilege>'))
  FROM DUAL;
 
DBMS_XDB_REPOS.ACLCHECKPRIVILEGES('/TESTUSER/ACL1.XML','TESTUSER',
------------------------------------------------------------------
                                                                 0
 
1 row selected.

27.5.10 指定されたリソースを保護するACLのパスの取得

RESOURCE_VIEW問合せを使用して、指定されたリソースを保護するACLのパスを取得する例を示します。この問合せでは、リソースの要素XMLRefおよびACLOIDが、ACLとリソースをリンクしていることを前提として使用しています。

例27-15は、ACLによって保護されたリソースの指定を受けて、ACLへのパスを取得しています。保護されたリソース(r)のACLOIDには、それを保護しているACLリソース(a)のOIDが格納されています。ACLリソースのREFは、保護されたリソースACLOIDにより識別されるオブジェクトのものと同じです。

リソースACLOIDREFは、Oracle SQL関数make_refを使用して取得できます。指定されたOIDを持つオブジェクト行へのREFが戻されます。

例27-15では、make_refは、リソース/TESTUSER/po1.xmlに対して、OIDが/Resource/ACLOIDである表XDB$ACLの行へのREFを戻しています。内部問合せがリソースのACLOIDを取得します。外部問合せが、対応するACLへのパスを戻します。

例27-15 特定のリソースを保護するACLのパスの取得

SELECT rv1.ANY_PATH
  FROM RESOURCE_VIEW rv1
  WHERE
    XMLCast(XMLQuery('declare default element namespace
                      "http://xmlns.oracle.com/xdb/XDBResource.xsd"; (: :)
                      fn:data(/Resource/XMLRef)'
                     PASSING rv1.RES RETURNING CONTENT)
            AS REF XMLType)
    = make_ref(XDB.XDB$ACL,
               (SELECT XMLCast(XMLQuery('declare default element namespace
                                         "http://xmlns.oracle.com/xdb/XDBResource.xsd"; (: :)
                                         fn:data(/Resource/ACLOID)'
                                        PASSING rv2.RES RETURNING CONTENT)
                               AS REF XMLType)
                  FROM RESOURCE_VIEW rv2
                  WHERE equals_path(rv2.RES, '/TESTUSER/po1.xml') = 1));

ANY_PATH
------------------
/TESTUSER/acl1.xml

27.5.11 指定されたACLによって保護されるすべてのリソースのパスの取得

指定されたACLによって保護されるすべてのリソースのパスを取得する例を示します。

例27-16では、パスが/TESTUSER/acl1.xmlであるACLリソースのREFに対してACLOID REFが一致しているリソースへのパスを取得します。ファンクションmake_refはリソースACLOID REFを戻します。

内部問合せは、指定されたACLのREFを取得します。外部問合せは、ACLOID REFが指定されたACLのREFに一致するリソースのパスを選択します。

例27-16 特定のACLによって保護されたすべてのリソースのパスの取得

SELECT rv1.ANY_PATH
  FROM RESOURCE_VIEW rv1
  WHERE make_ref(XDB.XDB$ACL, 
                 XMLCast(XMLQuery('declare default element namespace
                                   "http://xmlns.oracle.com/xdb/XDBResource.xsd"; (: :)
                                   fn:data(/Resource/ACLOID)'
                                  PASSING rv1.RES RETURNING CONTENT)
                         AS REF XMLType))
        = (SELECT XMLCast(XMLQuery('declare default element namespace
                                    "http://xmlns.oracle.com/xdb/XDBResource.xsd"; (: :)
                                    fn:data(/Resource/XMLRef)'
                                   PASSING rv2.RES RETURNING CONTENT)
                          AS REF XMLType)
             FROM RESOURCE_VIEW rv2
             WHERE equals_path(rv2.RES, '/TESTUSER/acl1.xml') = 1);

ANY_PATH
-----------------
/TESTUSER/po1.xml
 
1 row selected.

27.6 ACLキャッシング

ACLはその保護対象データへのアクセスのたびに確認されるため、ACLの確認操作のパフォーマンスは、Oracle XML DBリポジトリ・リソースを含むこのようなデータのパフォーマンスにとって重要な問題です。Oracle XML DBでは、このリポジトリ操作に必要なパフォーマンスは、複数のキャッシュを使用することによって達成されます。

ACLは、データベース・インスタンス内のすべてのセッションが共有するキャッシュに保存されます。ACLが更新されると、キャッシュ内のACLエントリが、そのすべての従属オブジェクトとともに無効化されます。ACLが次に使用されるときに、その新しいコピーがキャッシュに入れられます。可能なかぎり、リソース間でACLを共有することをお薦めします。

特定のACLによって特定のユーザーに付与された権限の、セッション固有のキャッシュがあります。このキャッシュのエントリには、Oracle XML DB構成ファイル(xdbconfig.xml)の要素<acl-max-age>によって、タイムアウト(秒単位)が指定されます。パフォーマンスを最大限にするために、このタイムアウトは可能なかぎり長く設定してください。ただし、この場合トレードオフが存在します。タイムアウトが長いほど、現行セッションが更新されたACLを取り出す時間が長くなります。

Oracle XML DBは、LDAPプリンシパル(LDAPグループまたはユーザー)が設定されたACLの使用時にも、パフォーマンスを向上させるためにキャッシュを保持します。これらのキャッシュの目的は、LDAPサーバーとのネットワーク通信を最小化することです。キャッシュの1つは、LDAP GUIDを対応するLDAPのニックネームおよび識別名(DN)にマップする共有キャッシュです。これは、ACL文書が表示されているとき(または、XMLTypeインスタンスからCLOB値またはVARCHAR2値に変換されているとき)に使用されます。このキャッシュを消去する場合は、プロシージャDBMS_XDBZ.purgeLDAPCacheを使用します。もう1つのキャッシュは、セッション固有のキャッシュで、LDAPグループをそのメンバー(ネストされたメンバーシップ)にマップします。Oracle XML DBでは、LDAPグループをセッションで最初に検出するたびに、LDAPサーバーからそのグループのネストされたメンバーシップを取得します。そのため、可能なかぎりメンバーとネスト・レベルの少ないグループを使用することをお薦めします。

27.7 リポジトリ・リソースおよびデータベース表のセキュリティ

REFベースのリポジトリ・リソースの格納に使用される表の階層を有効にすることによって、これらのリソースへのアクセスに均一なセキュリティ・メカニズムが提供されます。特定のリソースについてACLベースのセキュリティが必要ない場合は、PL/SQLプロシージャDBMS_XDBZ.disable_hierarchyを使用してACLチェックを無効にすることによってそれらのアクセスを最適化できます。

Oracle XML DBリポジトリのリソースには、次の2タイプがあります。

  • LOBベース(コンテンツはリソースの一部であるLOBに格納されます)。アクセスは、リソースを保護するACLによってのみ決定されます。

  • REFベース(コンテンツはXMLデータであるため、データベース表に格納されます)。ユーザーは、XMLコンテンツが格納されている基礎となる表またはビューに対する適切な権限、およびリソースに対するACLを介した権限を所有している必要があります。

REFベースのリソースのコンテンツは表に格納されるため、その表に対するSQL問合せを使用してこのデータに直接アクセスできます。均一なアクセス制御メカニズムは、アクセスに必要な権限がアクセスの方法(FTP、HTTPまたはSQLなど)に依存しないメカニズムです。ACLを使用した均一なセキュリティ・メカニズムを提供するためには、最初に、表の行を参照するリソースをOracle XML DBに挿入する前に、基礎となる表が階層に対応している必要があります。

XML Schemaの登録により作成されたデフォルト表は、階層対応になっています。つまり、階層の有効化はXML SchemaをOracle XML DBに登録したときのデフォルトの動作です。プロシージャDBMS_XDBZ.enable_hierarchyを使用して、登録後に階層を有効化することもできます。

リソース表で階層を有効にすると、次の動作が行われます。

  • 表の行を参照するリソースのACLOIDおよびOWNERを格納する非表示列が2つ追加されます。

  • その表に行レベルのセキュリティ(RLS)・ポリシーが追加されます。このポリシーは、SELECT文、UPDATE文またはDELETE操作がその表に対して実行されるたびに、ACLを確認します。

  • コンテンツが格納されているXMLType表で表が更新されたとき、それに対応する最後に変更されたリソース情報が常に更新されることを保証する、パス索引トリガーと呼ばれるデータベース・トリガーが作成されます。

関連項目:

  • プロシージャDBMS_XMLSCHEMA.registerSchemaの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

  • プロシージャDBMS_XDBZ.enable_hierarchyの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

指定された任意の表で、オブジェクトの一部のみがOracle XML DBリソースにマップされることがあります。マップされたオブジェクトのみがACLチェックを受けますが、すべてのオブジェクトに表レベルのセキュリティがあります。

注意:

表外に格納する場合は、XMLType表のデータを他のユーザーに対して非表示にすることはできません。表外のデータは、ACLセキュリティによって保護されません

27.7.1 最適化: 必要でない場合にACLベースのセキュリティを適用しない

ACLベースのセキュリティでは、XMLコンテンツへのアクセスを単に表ごとではなく文書ごとに制御できます。PL/SQLプロシージャDBMS_XMLSCHEMA.register_chemaをコールすると、作成される表でACLベースのセキュリティがデフォルトで有効になります。

この効果の1つは、このような表のXMLコンテンツにSQL文を使用してアクセスすると、sys_checkACLへのコールが問合せのWHERE句に自動的に追加されることです。これによって、定義されたACLセキュリティがSQLレベルで適用されます。

ただし、ACLベースのセキュリティを適用すると、SQL問合せのオーバーヘッドが増加します。ACLベースのセキュリティが必要でない場合は、プロシージャDBMS_XDBZ.disable_hierarchyを使用して、ACLによる確認をオフにします。

ACLベースのセキュリティがXMLType表で有効になると、その表に対する問合せの実行計画の出力には、次のようなフィルタが含まれます。

3 - filter(SYS_CHECKACL("ACLOID","OWNERID",xmltype(''<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.xsd">
                        <read-properties/><read-contents/></privilege>''))=1)

この例のフィルタは、SQL問合せを実行するユーザーに、アクセスする各文書に対するread-contents権限があることを確認します。

DBMS_XDBZ.disable_hierarchyをコールすると、同じ問合せの実行計画では、フィルタにSYS_CHECKACLが表示されません。

関連項目:

プロシージャDBMS_XDBZ.disable_hierarchyの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

27.8 Oracle XML DBのLDAPとの統合

Lightweight Directory Access Protocol (LDAP)ユーザーにOracle XML DB機能(ACLを含む)の使用を許可できます。

典型的なシナリオでは、単一の共有データベース・スキーマ(ユーザー)に、複数のLDAPユーザーがマップされています。このマッピングは、Oracle Internet Directoryで維持されています。エンド・ユーザーは、LDAPユーザー名およびパスワードを使用して、データベースにログインできます。ログインすると、対応する共有データベース・スキーマに自動的にマップされます。(ログインには、SQLまたはOracle XML DBでサポートされている任意のプロトコルを使用できます。)暗黙的なACL解決は、現行のLDAPユーザーおよび対応するLDAPグループのメンバーシップ情報に基づいています。

Oracle XML DB ACLのプリンシパルとしてLDAPユーザーおよびLDAPグループ(LDAPロールとも呼ばれる)を使用する場合は、その前に次の条件を満たす必要があります。

  • Oracle Internet Directoryが設定され、データベースがそれに登録されている必要があります。

  • SSL認証がデータベースとOracle Internet Directoryの間に設定されている必要があります。

  • 共有データベース・スキーマに対応するデータベース・ユーザーが作成されている必要があります。

  • Oracle Internet DirectoryでLDAPユーザーが作成され、共有データベース・スキーマにマップされる必要があります。

  • LDAPグループが作成され、そのメンバーが指定されている必要があります。

  • LDAPグループやLDAPユーザーに対してACLが定義され、それを使用してLDAPユーザーがアクセスするリポジトリ・リソースが保護される必要があります。

関連項目:

  • 『Oracle Fusion Middleware Oracle Internet Directory管理者ガイド』

  • SSL認証の設定の詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

  • エンタープライズ(LDAP)ユーザーのための共有データベース・スキーマの使用方法の詳細は、『Oracle Databaseエンタープライズ・ユーザー・セキュリティ管理者ガイド』を参照してください。

例27-17は、LDAPユーザーのACLを示しています。要素<principal>にはLDAPユーザーの完全識別名(この場合cn=user1,ou=Americas,o=oracle,l=redwoodshores,st=CA,c=US)が含まれています。

関連項目:

LDAPユーザーの識別名の形式の詳細は、『Oracle Fusion Middleware Oracle Internet Directory管理者ガイド』を参照してください。

例27-18は、LDAPグループのACLを示しています。要素<principal>には、LDAPグループの完全識別名が含まれています。

関連項目:

LDAPグループの識別名の形式の詳細は、『Oracle Fusion Middleware Oracle Internet Directory管理者ガイド』を参照してください。

例27-17 LDAPユーザーを参照するACL

<acl description="/public/txmlacl1/acl1.xml"
     xmlns="http://xmlns.oracle.com/xdb/acl.xsd" xmlns:dav="DAV:"
     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">
  <ace principalFormat="DistinguishedName"> 
    <grant>true</grant>
    <principal>cn=user1,ou=Americas,o=oracle,l=redwoodshores,st=CA,c=US
    </principal>
    <privilege>
      <dav:all/>
    </privilege>
  </ace> 
</acl>

例27-18 LDAPグループを参照するACL

<acl xmlns="http://xmlns.oracle.com/xdb/acl.xsd" xmlns:dav="DAV:"
     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">
  <ace principalFormat="DistinguishedName"> 
    <grant>true</grant>
    <principal>cn=grp1,ou=Americas,o=oracle,l=redwoodshores,st=CA,c=US</principal>
    <privilege>
      <dav:read/>
    </privilege>
  </ace> 
</acl>


脚注の凡例

脚注1:

コロン(:)は名前空間名の一部です。DAV:は、接頭辞ではなく、名前空間そのものです。名前空間DAV:に広く使用される接頭辞はdavですが、これは慣例的なものにすぎません。davは、Oracle XML DBで事前定義されている接頭辞ではありません。