【问题标题】:Preventing writable modifications to Oracle database, using Python.使用 Python 防止对 Oracle 数据库的可写修改。
【发布时间】:2018-09-20 02:46:09
【问题描述】:
目前在 Python 中使用 cx_Oracle 模块连接到我的 Oracle 数据库。我只想允许程序的用户进行只读执行,例如 Select 和 NOT INSERT/DELETE 查询。
一旦我建立连接以防止可写查询,我可以对连接/光标变量做些什么吗?
我正在使用 Python 语言。
感谢任何帮助。
谢谢。
【问题讨论】:
标签:
python
database
readonly
cx-oracle
【解决方案1】:
一种可能性是发出“设置事务只读”语句,如下代码所示:
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: 不能在只读事务中执行插入/删除/更新操作
当然,您必须确保创建一个 Connection 类,该类在首次创建该语句时以及在每次 commit() 和 rollback() 调用之后调用该语句。而且它仍然可以通过调用执行提交或回滚的 PL/SQL 块来规避。
我现在唯一能想到的另一种可能性是创建一个受限制的用户或角色,它根本无法插入、更新、删除等,并确保应用程序使用该用户或角色。这个至少是万无一失的,但要付出更多的努力!