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


Проблема с каскадным удалением - часть 2


SQL> insert into p 2 values ( 1 ); 1 row created.

SQL> insert into c 2 values ( 1 ); 1 row created.

SQL> grant select, delete 2 on p to scott; Grant succeeded.

SQL> grant select 2 on c to scott; Grant succeeded.

SQL> connect scott/tiger Connected.

SQL> delete from ops$tkyte.c; delete from ops$tkyte.c * ERROR at line 1: ORA-01031: insufficient privileges

SQL> delete from ops$tkyte.p; 1 row deleted.

SQL> select * from ops$tkyte.c; no rows selected

Вы можете сказать: "Да, но администратор базы данных может войти в систему и удалить эти строки...". Я же скажу: "Да, но администратор базы данных может обойти все что угодно, установленное вами, – все что угодно, ну и что"? Владелец схемы может сделать то же самое; поэтому вы просто защищаете данные, чтобы никто (на уровне приложений) не мог удалить их.

Есть ли способы сделать это с помощью триггеров? Да, но писать их довольно сложно (и их также можно обмануть).

Средства защиты делают это чисто.

Фактически, если вы использовали язык PL/SQL и никогда не предоставляли никаких объектных привилегий INSERT/UPDATE/DELETE, подумайте, насколько "безопасно" вы могли сделать это!

Ведущий данной колонки Том Кайт () работает в корпорации Oracle с 1993 года. Кайт – вице-президент Oracle, возглавляющий группу Oracle Public Sector, он автор книг "Expert Oracle: 9i and 10g Programming Techniques and Solutions" (Apress, 2005), "Effective Oracle by Design" (Oracle Press, 2003) и "Expert One on One: Oracle" (Apress, 2003) ( Прим. пер. Имеется русский перевод: Oracle для профессионалов. Книга 1. Архитектура и основные особенности. Книга 2. Расширение возможностей и защита. – ДиаСофт.).




Начало  Назад  Вперед