【发布时间】:2021-11-16 19:21:51
【问题描述】:
这个问题类似于Oracle read-only JDBC connection,但使用的是 SQLAlchemy 而不是 JDBC
我正在尝试在只读模式下使用 SQLAlchemy 设置与 Oracle 的连接。原因是我想确保在使用 SQLAlchemy 时不会无意更改任何内容,而数据库中的数据可以被其他程序修改。
其他用户建议创建一个新用户并授予他们选择权限,以便允许它从现有表中读取。尽管在许多情况下这可能是一种有效的方法,但我的问题的目的是从 SQLAlchemy 中执行此操作,而不更改数据库中的任何内容。
有没有办法在 SQLAlchemy 中为 READONLY 中的 create_engine() 或 connect() 函数设置连接参数?如果有,是怎么做的?
【问题讨论】:
-
我认为,如果你在 oracle DB 中创建一个用户并给予用户特定的授权,它会给你你所需要的,这种解决方案对你来说可以接受吗?
-
sqlalchemy将使用您提供的凭据连接到数据库。如果允许此类凭据创建或修改事物,他们将能够做到。您必须使用没有任何写入权限的数据库用户的凭据 -
@AliFidanli 是的,在可以创建新用户的情况下,最好的方法是使用“授予选择”来创建我想要读取的表。该问题的目的是尽量减少对现有数据库的干扰,避免添加/触摸/编辑任何内容。
-
@RobertoHernandez 请查看我对 Ali Fidanli 评论的回答。
-
@aturegano,你使用了错误的方法来解决这个问题。您并没有在数据库中侵入性地做任何事情,恰恰相反。您正在避免将来出现问题。如果您授予 db 用户特权,那么您在
sqlalchemy中所做的一切都无关紧要,任何人都可以执行该 db 用户被允许做的任何事情。从架构的角度来看,您正试图在错误的层中应用安全性。
标签: python oracle sqlalchemy