|
Программирование >> Oracle
Тщательный контроль доступа 1479 дельности. Чтобы продемонстрировать проблемы, придется несколько расширить пре-д1дущий пример, изменив правила защиты T POLICY. На этот раз правила будут применяться не только для операторов SELECT, но и для операторов INSERT: tkyte@TK16> begin 2 dbms rls.drop policy(TKYTE, T, T POLICY) ; 3 end; PL/SQL procedure successfully completed. tkyte@TK:E816> begin 2 dbms rls.add policy 3 (object name => T, 4 policy name => T POLICY, 5 policy function => rls examp, 6 statement types => select, insert, 7 update check => TRUE); 8 end; PL/SQL procedure successfully completed. После этого мы получим следующий эффект: tkyte@TKYTE816> delete from t; 1 row deleted. tkyte@TKYTE816> commit; Commit complete. tkyte@TKYTE816> exec set ctx(null); PL/SQL procedure successfully completed. tkyte@TKYTE816> insert into t values (1); insert into t values (1) ERROR at line 1: ORA-28115: policy with check option violation tkyte@TKYTE816> exec set ctx(0) ; PL/SQL procedure successfully completed. tkyte@TKYTE816> insert into t values (1); 1 row created. Итак, теперь контекст необходимо устанавливать не только для чтения, но и для вставки данных. Проблемы экспорта Стандартно утилита ЕХР работает в режиме обычного (conventional path) экспорта. Для чтения данных она использует SQL-операторы. Используя утилиту ЕХР для получения данных таблицы T из базы данных, получим следующий результат (учтите, чю в таблице T имеется одна строка - результат выполнения оператора INSERT): 1480 Глава 21 G:\fgac\exp userid=tkyte/tkyte tables=t Export: Release 8.1.6.0.0 - Production on Mon Apr 16 16:29:25 2001 (c) Gopyright 1999 Oracle Gorporation. All rights reserved. Gonnected to: Oracle8i Enterprise Edition Release 8.1.6.0.0 - Production With the Partitioning option JServer Release 8.1.6.0.0 - Production Export done in WE8ISO8859P1 character set and WE8ISO8859P1 NGHAR character set About to export specified tables via Gonventional Path EXP-00079: Data in table T is protected. Conventional path may only be exporting partial table. . . exporting table T 0 rows exported Export terminated successfully with warnings. Обратите внимание, как утилита ЕХР великодушно сообщила, что таблица может быть экспортирована только частично, поскольку используется обычный способ экспортирования. Для решения этой проблемы при экспортировании надо подключаться как пользователь SYS (или от имени любого другого пользователя с ролью SYSDBA). Для пользователя SYS средства тщательного контроля доступа не действуют: G:\fgac\exp userid=sys/manager tables=tkyte.t Export: Release 8.1.6.0.0 - Production on Mon Apr 16 16:35:21 2001 (c) Gopyright 1999 Oracle Gorporation. All rights reserved. Gonnected to: Oracle8i Enterprise Edition Release 8.1.6.0.0 - Production With the Partitioning option JServer Release 8.1.6.0.0 - Production Export done in WE8ISO8859P1 character set and WE8ISO8859P1 NGHAR character set About to export specified tables via Gonventional Path .. . Gurrent user changed to TKYTE . . exporting table T 1 rows exported Export terminated successfully without warnings. Можно также использовать процедуру DBMS RLS.ENABLE POLICY для временного отключения правил зашиты и повторного их включения после экспортирования. Хотя так делать нежелательно, поскольку на время экспорта таблицы остаются незащищенными. ВнекоторыхверсияхOracle 8.1.5при непосредственномэкспортепо ошибкеобходятс средства тшательного контроля доступа. Другими словами, если указать onции direct=true, будут экспортированы все данные. На этот способполагаться не стоит поскольку в следующих версиях эта ошибка была исправлена. В новых версиях ei получите: About to export specified tables via Direct Path ... EXP-00080: Data in table T is protected. Using conventional mode. EXP-00079: Data in table T is protected. Gonventional path may only... Тщательный контроль доступа 1481 Утилита ЕХР будет автоматически экспортировать защищенные таблицы в обычном режиме. Проблемы импорта Эти проблемы возникают только в том случае, когда установлены правила защиты для операторов вставки и опция UPDATECHECK имеет значение True. B этом случае утилита IMP не будет вставлять строки, не удовлетворяющие условию, возвращаемому соответствующей функцией. Именно так и произойдет в рассмотренном ранее примере. Если не установить контекст, ни одна строка вставлена не будет (по умолчанию значение в контексте - Null). Поэтому, если попытаться импортировать экспортированные данные: C:\fgac>imp userid=tkyte/tkyte full=y ignore=y Import: Release 8.1.6.0.0 - Production on Mon Apr 16 16:37:33 2001 (c) Copyright 1999 Oracle Corporation. All rights reserved. Connected to: Oracle8i Enterprise Edition Release 8.1.6.0.0 - Production With the Partitioning option JServer Release 8.1.6.0.0 - Production Export file created by EXPORT:V08.01.06 via conventional path Warning: the objects were exported by SYS, not by you import done in WE8ISO8859P1 character set and WE8ISO8859P1 NCHAR character set . importing SYSs objects into TKYTE . . importing table T IMP-00058:ORACLE error 28115 encountered ORA-28115: policy with check option violation IMP-00017: following statement failed with ORACLE error 28101: BEGIN DBMS RLS.ADD POLICY(TKYTE, T, T POLICY,TKYTE,RLS EXAMP, SE LECT,INSERT,TRUE,TRUE) ; END; IMP-00003: ORACLE error 28101 encountered ORA-28101: policy already exists ORA-06512: at SYS.DBMS RLS , line 0 ORA-06512: at line 1 import terminated successfully with warnings. строки вставлены не будут. Проблему можно решить, подключившись от имени пользовать SYS или пользователя с ролью SYSDBA: C:\fgac>imp userid=sys/manager full=y ignore=y import: Release 8.1.6.0.0 - Production on Mon Apr 16 16:40:56 2001 (c) Copyright 1999 Oracle Corporation. All rights reserved. Connected to: Oracle8i Enterprise Edition Release 8.1.6.0.0 - Production With the Partitioning option JServer Release 8.1.6.0.0 - Production
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |