amazon-rds - 在 AWS Oracle Rds 19c 中创建只读用户
问题描述
我想在 Oracle 19c 中创建一个用户,该用户有权创建表、创建索引等 - 可能是数据库所有者。
然后我想撤销同一个用户的写访问权限,以便用户对数据库中的表只有读访问权限。
理想情况下,这意味着对于第一个查询,用户是数据库所有者,而对于所有其他查询,用户是只读用户。
我正在使用的查询是:
授予查询:
- 创建用户 xyz IDENTIFIED BY password DEFAULT TABLESPACE "USERS" QUOTA UNLIMITED ON "USERS" TEMPORARY TABLESPACE "TEMP"
- 将“资源”授予 xyz
- 向 xyz 授予“连接”权限
然后是一些创建表查询。
撤销查询:
- 从 xyz 撤销“资源”
- 从 xyz 撤销“连接”
为了连接,我再次创建会话并选择访问 -
- 将创建会话授予 xyz;
- GRANT 选择任何表到 xyz;
我面临的问题是,在撤销写访问权限后,我仍然能够对使用该用户创建的表执行写操作(删除、插入、更新)。
我阅读了一些关于公共用户组的内容,但找不到解决方案。请帮助我找到上述情况的解决方案。
我们可以放心地假设我拥有执行此类操作的主凭据。
解决方案
模式的所有者总是可以操作它所拥有的对象;该访问权限不能被撤销。如果您想要只读访问权限,则必须通过向单独的用户授予权限来进行配置。
通常,安全配置会锁定模式(表、索引等)的所有者,使其不能直接使用,然后访问通过角色授予的对象 - 甚至更好的是通过 PL/SQL API - 给其他人用户允许 SELECT 或 DML 操作。只有在对架构进行更改时才应启用/使用对象的所有者。
通常不鼓励使用“任何”权限SELECT ANY TABLE
或使用PUBLIC
模式向所有用户授予权限,而是使用角色和 API 来支持目标权限。始终遵循最小特权原则,并且永远不要授予用户超过最低要求的访问权限。
推荐阅读
- python - Django Celery 计划任务崩溃
- ios - 禁用 SwiftUI 应用程序的 iTunesStore 访问 - 摆脱“检索 iTunesStore 帐户时出错”警告
- node.js - 更改 NodeJS 本地服务器访问 URL
- javascript - window.onkeypress 与 window.document.body.onkeypress 之间的区别
- javascript - 如何调用对象的键但作为方法而不是字符串返回
- flutter - 钩子只能在颤振中小部件的构建方法中调用
- c# - 如何在 Ranorex 中升级 C# 编译器版本?
- sql - 在 SQL 中计算百分比
- html - 网站滚动时背景图像也会滚动
- mongodb - 如何使用 Liquibase-MongoDb-Spring-boot