首页 > 解决方案 > SQLAlchemy 只读 Oracle 连接

问题描述

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

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

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

有没有办法在 SQLAlchemyREADONLY中为 oraclecreate_engine()或函数设置连接参数?connect()如果是,它是如何完成的?

标签: pythonoraclesqlalchemy

解决方案


正如我们在评论中所讨论的,这是创建受限只读用户的简单方法:

  1. 创建用户并授予会话授权

CREATE USER app_user IDENTIFIED BY app_user DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp;

GRANT CREATE SESSION to app_user
  1. 创建角色以仅授予选择权限。下一步

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;

推荐阅读