Репозитарий XML DB в БД Oracle использует собственную схему защиты доступа, access control list (ACL), созданную в рамках модели ACL для WebDAV (). Основными понятиями ACL являются:
В XML DB имеются несколько встроенных ACL, заданных следующими ресурсами:
>/sys/acls/all_all_acl.xml
/sys/acls/all_owner_acl.xml
/sys/acls/bootstrap_acl.xml
/sys/acls/ro_all_acl.xml
ACL файла /public/OracleXML.doc в программе можно узнать так:
SELECT r.res.EXTRACT ( 'Resource/ACL' ) AS text FROM resource_view r WHERE EQUALS_PATH ( res, '/public/OracleXML.doc' ) = 1;
Пример замены ACL ресурса:
BEGIN DBMS_XDB.SETACL ( '/public/OracleXML.doc' , '/sys/acls/all_all_acl.xml' ); END; /
Создадим в БД роль и создадим в XML DB соответствующий ей файл ACL:
CONNECT / AS SYSDBA
CREATE ROLE mygroup;
CONNECT xdb/xdb
DECLARE aclxml VARCHAR2 ( 4000 ) := ' <acl description="All privileges to MYGROUP, no to others" 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> <principal>MYGROUP</principal> <grant>true</grant> <privilege> <all/> </privilege> </ace> </acl> ' ; retb BOOLEAN;
BEGIN retb := DBMS_XDB.CREATERESOURCE ( '/sys/acls/all_mygroup_acl.xml', aclxml ) ; END; /
Защитим файл /public/OracleXML.doc созданым ACL:
CONNECT scott/tiger
BEGIN DBMS_XDB.SETACL ( '/public/OracleXML.doc' , '/sys/acls/all_mygroup_acl.xml' ); END; /
COMMIT;
Проверим видимость ресурса пользователем SCOTT. Для удобства создадим сначала файл с запросом:
SELECT any_path FROM resource_view WHERE UNDER_PATH ( res, '/public' ) = 1 . SAVE publicpaths
Проверка:
SQL> CONNECT scott/tiger Connected. SQL> @publicpaths
no rows selected
SQL> CONNECT / as sysdba Connected. SQL> GRANT mygroup TO scott;
Grant succeeded.
SQL> CONNECT scott/tiger Connected. SQL> @publicpaths
ANY_PATH ------------------------------------------ /public/OracleXML.doc
При включении пользователя в группу ранее невидимый ресурс стал виден.