Базы данных Oracle - статьи

         

Разграничение доступа


Репозитарий XML DB в БД Oracle использует собственную схему защиты доступа, access control list (ACL), созданную в рамках модели ACL для WebDAV (). Основными понятиями ACL являются:

  • Участник безопасности (principal). В XML DB это пользователь БД, роль БД или пользователь/роль справочника каталогов LDAP.
  • Привилегия. Может быть атомарной (atomic; например read-contents, update или dav:lock) и составной (aggregate, состоящей из других привилегий; например all, dav:all или dav:read-acl). (Полный перечень имеющихся в XML DB привилегий имеется в документации).
  • Access control entry (ACE). Запись о предоставлении или запрету привилегии участнику. Делается в тексте 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

При включении пользователя в группу ранее невидимый ресурс стал виден.



Содержание раздела