首页 > 解决方案 > 在 AWS Oracle Rds 19c 中创建只读用户

问题描述

我想在 Oracle 19c 中创建一个用户,该用户有权创建表、创建索引等 - 可能是数据库所有者。

然后我想撤销同一个用户的写访问权限,以便用户对数据库中的表只有读访问权限。

理想情况下,这意味着对于第一个查询,用户是数据库所有者,而对于所有其他查询,用户是只读用户。

我正在使用的查询是:

授予查询:

  1. 创建用户 xyz IDENTIFIED BY password DEFAULT TABLESPACE "USERS" QUOTA UNLIMITED ON "USERS" TEMPORARY TABLESPACE "TEMP"
  2. 将“资源”授予 xyz
  3. 向 xyz 授予“连接”权限

然后是一些创建表查询。

撤销查询:

  1. 从 xyz 撤销“资源”
  2. 从 xyz 撤销“连接”

为了连接,我再次创建会话并选择访问 -

  1. 将创建会话授予 xyz;
  2. GRANT 选择任何表到 xyz;

我面临的问题是,在撤销写访问权限后,我仍然能够对使用该用户创建的表执行写操作(删除、插入、更新)。

我阅读了一些关于公共用户组的内容,但找不到解决方案。请帮助我找到上述情况的解决方案。

我们可以放心地假设我拥有执行此类操作的主凭据。

标签: amazon-rdsoracle19c

解决方案


模式的所有者总是可以操作它所拥有的对象;该访问权限不能被撤销。如果您想要只读访问权限,则必须通过向单独的用户授予权限来进行配置。

通常,安全配置会锁定模式(表、索引等)的所有者,使其不能直接使用,然后访问通过角色授予的对象 - 甚至更好的是通过 PL/SQL API - 给其他人用户允许 SELECT 或 DML 操作。只有在对架构进行更改时才应启用/使用对象的所有者。

通常不鼓励使用“任何”权限SELECT ANY TABLE或使用PUBLIC模式向所有用户授予权限,而是使用角色和 API 来支持目标权限。始终遵循最小特权原则,并且永远不要授予用户超过最低要求的访问权限。


推荐阅读