python - SQLAlchemy 只读 Oracle 连接
问题描述
这个问题类似于Oracle 只读 JDBC 连接,但使用 SQLAlchemy 而不是 JDBC
我正在尝试在只读模式下使用 SQLAlchemy 设置与 Oracle 的连接。原因是我想确保在使用 SQLAlchemy 时不会无意更改任何内容,而数据库中的数据可以被其他程序修改。
其他用户建议创建一个新用户并授予他们选择权限,以便允许它从现有表中读取。尽管在许多情况下这可能是一种有效的方法,但我的问题的目的是从 SQLAlchemy 中进行,而不更改数据库中的任何内容。
有没有办法在 SQLAlchemyREADONLY
中为 oraclecreate_engine()
或函数设置连接参数?connect()
如果是,它是如何完成的?
解决方案
正如我们在评论中所讨论的,这是创建受限只读用户的简单方法:
- 创建用户并授予会话授权
CREATE USER app_user IDENTIFIED BY app_user DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp;
GRANT CREATE SESSION to app_user
- 创建角色以仅授予选择权限。下一步
CREATE ROLE ro_role;
- 从所需模式为表提供选择授权
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;
- 使用我们创建的角色授予用户
GRANT ro_role TO app_user;
推荐阅读
- javascript - 白天每 15 分钟发送一次通知
- javascript - Firebase 函数在同一个 onCall 函数中读取和添加数据
- c# - 当通过单击按钮创建列表视图时,如何通过拖放在列表视图之间移动列表视图项?UWP C#
- wordpress - Wordpress 重定向到不存在的域
- node.js - 在我的电子应用中显示 Teams Web 应用
- numpy - numpy - 为什么 Z[(0,2)] 是视图但 Z[(0, 2), (0)] 是副本?
- c# - 如何在 VS 中用 C# 声明并用 C++ 实现?
- xamarin.forms - Xamarin.Forms AVPlayer 从方法中退出全屏
- html - 打开带有空号码的短信
- c++ - 如果不推荐使用 std::iterator,我们是否仍应使用需要 std::iterator 的类或函数?