0

我的 oracle 数据库中有 3 个用户

user_admin 用户 user_query

  • user_admin 具有 dba 角色。
  • 用户有连接和资源角色
  • 和 user_query 和 user 一样。

我想将最后一个配置为拒绝他进行所有类型的插入、更新、删除,但形成完整的表空间,而不是来自表、视图或过程......

关键是要有一个仅安全查询的数据用户。

但至少据我所知,我不能为表空间做这件事。

任何想法?

4

3 回答 3

1

您可以遍历所有使用相关表空间的表并授予选择权限。我会尽量远离像“SELECT ANY TABLE”这样强大的权限,因为这将适用于整个数据库。

例如,如果您的表空间名为 XXX,则:

BEGIN
  FOR tbl IN (SELECT owner, table_name
                FROM dba_tables dt
               WHERE dt.tablespace_name = 'XXX') LOOP
  EXECUTE IMMEDIATE 'GRANT SELECT ON ' || tbl.owner || '.' || tbl.table_name || ' TO USER_QUERY';
  END LOOP;
END;
于 2012-05-09T21:09:22.680 回答
1

以下内容将选择授予任何表或视图(SYS 拥有的除外):

    grant select any table to user_query;

但是,它不限于单个表空间 - 整个数据库中的任何表都可供选择。

于 2012-05-09T18:48:47.913 回答
1

首先,不鼓励使用 CONNECT 和 RESOURCE 角色,并将其记录在案。

除此之外,不,没有表空间甚至用户授予的权限。一方面,一个分区表或索引可以使用多个表空间,其中没有一个可能是该对象的默认值。

授予在对象级别。不过,您可以创建一个过程来根据表的表空间向用户(或更好地授予角色)授予权限。

于 2012-05-09T21:03:27.910 回答