首页 > 解决方案 > 反映 Oracle 数据库需要哪些用户权限?

问题描述

我正在尝试为 Oracle 11g 数据库创建一个只读用户,SQLAlchemy 将使用它来查询数据库。我在 SQLAlchemy 中使用现有的 DBA 用户并且没有任何问题,但是现在有了新用户,我无法反映数据库表。

Could not reflect: requested table(s) not available in Engine

请注意,我可以选择表,但不能反映它们。我想知道我需要给新用户什么样的权限才能通过 SQLALchemy 进行反映。

我尝试将所有角色从现有 DBA 复制到新用户,但仍然出现相同的错误

我什至尝试了一些以前没有使用过的高级角色(我计划稍后再次正确删除和添加用户。DBACONSULTA 是我正在创建的新用户。

GRANT DBA TO DBACONSULTA
GRANT EXECUTE ANY EVALUATION CONTEXT TO DBACONSULTA
GRANT ANALYZE ANY TO DBACONSULTA
GRANT SELECT ANY TABLE TO DBACONSULTA
GRANT EXECUTE ANY PROGRAM TO DBACONSULTA

使用 Python,我使用以下代码:

engine=create_engine('oracle+cx_oracle://...')
metadata = MetaData()
metadata.reflect(engine, only=['tablename'])

得到错误:

Could not reflect: requested table(s) not available in Engine

我希望能够反映表,而不使用 SQLAlchemy 中的声明形式

提前致谢。

标签: oracleoracle11gsqlalchemy

解决方案


我相信我已经找到了答案。

有两点很重要:

  • 表名必须小写(不能使用大写)
  • 未定义架构(原来它正在工作,因为我使用的用户是表架构的所有者)

因此,当我声明架构并使用小写作为表名时,反射会起作用。


推荐阅读