Могу ли я предотвратить обновление или удаление в базе данных 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;