SQLAlchemy只读Oracle连接



这个问题类似于Oracle的只读JDBC连接,但是使用SQLAlchemy而不是JDBC

我试图在只读模式下使用SQLAlchemy设置与oracle的连接。原因是我想确保在使用SQLAlchemy时不会无意中改变任何东西,而数据库中的数据可以被其他程序修改。

其他用户建议创建一个新用户,并授予他们select权限,以便允许它从现有表中读取。尽管在许多情况下这可能是一种有效的方法,但我的问题的目的是在不更改数据库中的任何内容的情况下从SQLAlchemy执行此操作。

是否有一种方法来设置连接参数的oracle像READONLYcreate_engine()connect()函数在SQLAlchemy?如果是,如何进行?

正如我们在评论中讨论的那样,这里有一个创建有限只读用户的简单方法:

  1. create user and give session grant

CREATE USER app_user IDENTIFIED BY app_user DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp;
GRANT CREATE SESSION to app_user
  1. 创建角色给select only private .下一步

CREATE ROLE ro_role;
  1. 给表选择权限

BEGIN
FOR x IN (SELECT * FROM dba_tables WHERE owner='SCHEMA_NAME')
LOOP
EXECUTE IMMEDIATE 'GRANT SELECT ON schema_name.' || x.table_name || 
' TO ro_role';
END LOOP;
END;
  1. 赋予用户使用角色的权限

GRANT ro_role TO app_user;

最新更新