Предотвращение доступных для записи изменений в базе данных Oracle с использованием Python. - PullRequest
0 голосов
/ 20 сентября 2018

В настоящее время используется модуль cx_Oracle в Python для подключения к моей базе данных Oracle.Я хотел бы разрешить пользователю программы выполнять только чтение, например, запросы Select и NOT INSERT / DELETE.

Могу ли я что-то сделать с переменными соединения / курсора, как только я установлю соединение, чтобы предотвратить запись запросов?

Я использую язык Python.

Ценю любую помощь.

Спасибо.

1 Ответ

0 голосов
/ 21 сентября 2018

Одна из возможностей - выполнить оператор «установить транзакцию только для чтения», как показано в следующем коде:

import cx_Oracle

conn = cx_Oracle.connect("cx_Oracle/welcome")
cursor = conn.cursor()
cursor.execute("set transaction read only")
cursor.execute("insert into c values (1, 'test')")

Это приведет к следующей ошибке:

ORA-01456: можетне выполнять операцию вставки / удаления / обновления внутри транзакции READ ONLY

Конечно, вам необходимо убедиться, что вы создали класс Connection, который вызывает этот оператор при его первом создании и после каждой фиксации () и откат () вызов.И это все еще можно обойти, вызвав блок PL / SQL, который выполняет фиксацию или откат.

Единственная другая возможность, о которой я могу думать прямо сейчас, - это создание ограниченного пользователя или роли, которая просто неиметь возможность вставлять, обновлять, удалять и т. д. и убедиться, что приложение использует этого пользователя или роль.Это, по крайней мере, защита от дурака, но гораздо больше усилий впереди!

...