oracle - 反映 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 中的声明形式
提前致谢。
解决方案
我相信我已经找到了答案。
有两点很重要:
- 表名必须小写(不能使用大写)
- 未定义架构(原来它正在工作,因为我使用的用户是表架构的所有者)
因此,当我声明架构并使用小写作为表名时,反射会起作用。
推荐阅读
- javascript - 如何在反应应用程序中从数据库中获取和显示图像
- java - 如何修复错误原因:java.net.BindException:地址已在使用:在 Quarkus 中绑定?
- regex - 如何验证正则表达式模式是否为常量模式?
- google-cloud-platform - 谷歌云平台提交训练作业,如何从训练代码中读取 USER_ARGS?
- c# - 将参数传递给 MVC Core 中的索引列表控制器
- amazon-web-services - 在两个托管区域之间设置 AWS Global Accelerator
- c++ - 用 Cereal 序列化 Lambda 函数
- html - 谷歌说“文本太小无法阅读”,但没有关于推荐字体大小的信息?
- css - WordPress 删除旧 CSS 并包含新 CSS
- android-studio - Android Studio 中的非项目特定设置不会保留