我的 oracle 数据库中有 3 个用户
user_admin 用户 user_query
- user_admin 具有 dba 角色。
- 用户有连接和资源角色
- 和 user_query 和 user 一样。
我想将最后一个配置为拒绝他进行所有类型的插入、更新、删除,但形成完整的表空间,而不是来自表、视图或过程......
关键是要有一个仅安全查询的数据用户。
但至少据我所知,我不能为表空间做这件事。
任何想法?
您可以遍历所有使用相关表空间的表并授予选择权限。我会尽量远离像“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;
以下内容将选择授予任何表或视图(SYS 拥有的除外):
grant select any table to user_query;
但是,它不限于单个表空间 - 整个数据库中的任何表都可供选择。
首先,不鼓励使用 CONNECT 和 RESOURCE 角色,并将其记录在案。
除此之外,不,没有表空间甚至用户授予的权限。一方面,一个分区表或索引可以使用多个表空间,其中没有一个可能是该对象的默认值。
授予在对象级别。不过,您可以创建一个过程来根据表的表空间向用户(或更好地授予角色)授予权限。