Могу ли я предотвратить обновление или удаление в базе данных Oracle?

Я должен реализовать финансовое приложение. Одним из критериев приемлемости является:

"Данные могут никогда не измениться".

Поэтому я должен предотвратить update а также delete операции с базой данных, потому что она будет развернута на машинах, которыми владеет и управляет клиент.

Это вообще возможно? Может быть с триггерами? Если нет, есть ли другие базы данных, которые могут помешать update а также delete?

2 ответа

Решение

Оказывается, это невозможно.

Там нет никакого способа, чтобы предоставить INSERT привилегия, не позволяя UPDATE, Насколько я понимаю, INSERT привилегия интерпретируется как может изменить данные этой таблицы.

Самый простой способ - через роли, например, роль запроса. Предоставьте выбор в списке таблиц этой роли и предоставьте эту роль пользователю вашего приложения. Конечно, вы можете создавать другие, такие как роль администратора с правами обновления и удаления, которые будут предоставлены позже при необходимости.

Пример:

CREATE ROLE FIN_APP_INS_SEL_ROLE;                                   
GRANT INSERT, SELECT on <table1> to FIN_APP_INS_SEL_ROLE;
GRANT INSERT, SELECT on <table2> to FIN_APP_INS_SEL_ROLE;
GRANT CONNECT, FIN_APP_INS_SEL_ROLE to <app_user>; 

Вы также можете сделать табличное пространство только для чтения,

ALTER TABLESPACE <name> READ ONLY;

или вся база данных только для чтения.

ALTER DATABASE OPEN READ ONLY;
Другие вопросы по тегам