Oracle数据库权限学习--表或者是视图不存在

oracle,数据库,权限,学习,或者,视图,存在 · 浏览次数 : 904

小编点评

## Oracle 数据库权限学习--表或者是视图不存在摘要 **问题原因:** 用户 `user_all_tables` 能访问所有架构表空间下的所有表,因此在 `A` 架构下查询 `TBTMPxxx` 表时,可能查询到 `B` 架构下的相同表,导致报错。 **思考问题:** * 用户权限如何影响 `user_all_tables` 的访问权限? * 如何避免类似问题出现? **解决方案:** 1. 使用 `SELECT COUNT(1)` 统计查询结果,避免外部连接的查询。 2. 确保 `user_all_tables` 仅访问自身数据库的表。 3. 限制 `user_all_tables` 对外部数据库实例的访问权限。 **其他建议:** * 严格遵守 `Oracle` 的 `DB_ACL` 和 `ROLES` 管理机制。 * 使用 `ROW_NUMBER()` 或 `sys.all_tables` 函数等更安全的查询方法。 * 在开发和测试环境中,严格控制用户权限。

正文

Oracle数据库权限学习--表或者是视图不存在


摘要

本文写于: 12.10 01:00 巴西踢的太烂了
帮同事看一下补丁执行报错的问题. 
问题原因很简单. user_all_table能够后去本用户权限
下所有架构表空间下面的表.
如果A架构下没有一个表, 但是同一个数据库instanceID下面有一个B架构下有这个表
并且A用户具有 dba 权限, 那么在A用户下查询是否存在这个表, 会查询出是来

如果再去再A用户下处理这张表, 就会报错. 
select count(1)  from user_all_Tables where Table_Name = 'TBTMPxxx'


问题原因以及思考

其实问题非常简单, 最简单的处理方法是
不应该在执行的SQL内部内使用 user_all_tables的语法. 
因为这个会放大用户查询的范围, 这个问题其实十三年前就开始说了, 
但是研发总是一直很自信的用.

这个问题屡禁不止.
我也感觉比较奇怪,为啥我这边没发现, 怀疑是不是用户权限有关系. 

其实简单一查询的确能够发现存在较多的风险. 

问题深入发掘

12.10 01:10 其实发现自己已经把问题原因弄错了..
但是这个文章还是想继续写一下. 

第一步: 分析Oracle用户的权限:
# 查看用户具有的角色
select * from dba_role_privs where grantee ='CLOUD2099';
# 查看用户具有的权限
select * from dba_sys_privs where grantee ='CLOUD2099';

# 注意之前为了简单, 备份恢复的测试使用了dba的权限
# 这样会导致出现上一节分析的出现的问题原因. 

用户一般具备如下权限就可以了:
CREATE TABLESPACE
CREATE ANY TABLE
ALTER ROLLBACK SEGMENT
CREATE RULE
CREATE ANY SEQUENCE
CREATE SESSION
UNLIMITED TABLESPACE
CREATE ANY VIEW
DROP TABLESPACE
CREATE ROLLBACK SEGMENT
DROP ROLLBACK SEGMENT
CREATE TRIGGER

生产环境非常不建议 有DBA权限

其他不应该有的权限

今天晚上做了一个实验, 发现如果具备:
EXP_FULL_DATABASE
角色的用户, 也会出现一定的权限扩大化.
当然风险较小(极难利用)

具备这个角色的用户不仅仅可以备份恢复自己的数据库
还可以将整个数据库实例下所有的数据库实例进行备份恢复
可能会存在权限扩大化的风险. 

如果是等保或者是高安全性的场景, 建议也不要赋予这个权限. 

其他数据库的举一反三

1. 生产必须严格杜绝DBA用户权限的情况. 任何数据库都不行.
2. 备份恢复也建议最小化权限原则,避免权限失真.
3. 研发必须严格遵守属地属主原则,不要任意过大表或者是视图范围.
4. 业务表名一定要有业务含义,不要加太多TMP标识..

Oracle数据库权限的简单学习与扩展

12.10 01:25 巴西1:0 克罗地亚

1、查看所有用户
select * from dba_user;
select * from all_users;
select * from user_users;

2、查看用户系统权限
select * from dba_sys_privs;
select * from all_sys_privs;
select * from user_sys_privs;

3、查看用户对象权限
select * from dba_tab_privs;
select * from all_tab_privs;
select * from user_tab_privs;

4、查看所有角色
select * from dba_roles;

5、查看用户所拥有的角色
select * from dba_role_privs;
select * from user_role_privs;

6、查看当前用户的缺省表空间
select username,default_tablespace from user_users;

7、查看某个角色的具体权限
如 grant connect,resource,create session,create view to TEST;

8、查看RESOURCE具有那些权限
SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE='RESOURCE
Study From https://www.cnblogs.com/huazhixu/p/15788803.html

与Oracle数据库权限学习--表或者是视图不存在相似的内容:

Oracle数据库权限学习--表或者是视图不存在

Oracle数据库权限学习--表或者是视图不存在 摘要 本文写于: 12.10 01:00 巴西踢的太烂了 帮同事看一下补丁执行报错的问题. 问题原因很简单. user_all_table能够后去本用户权限 下所有架构表空间下面的表. 如果A架构下没有一个表, 但是同一个数据库instanceID下

[转帖]Oracle查看所有用户及其权限

https://www.cnblogs.com/huazhixu/p/15788803.html Oracle查看所有用户及其权限:Oracle数据字典视图的种类分别为:USER,ALL 和 DBA.USER_*:有关用户所拥有的对象信息,即用户自己创建的对象信息ALL_*:有关用户可以访问的对象的

[转帖]Oracle数据库的两种授权收费方式详解

https://www.jb51.net/article/265823.htm 现在Oracle有两种授权收费方式,按CPU(Process)数和按用户数(Named User Plus),前一种方式一般用于用户数不确定或者用户数量很大的情况,典型的如互联网环境,这篇文章主要介绍了Oracle数据库

[转帖]Oracle数据库常用查询语句

1、[oracle@dbserver ~]$ sqlplus / as sysdbaSQL*Plus: Release 11.2.0.4.0 Production on Tue Mar 15 15:16:03 2022Copyright (c) 1982, 2013, Oracle. All rig

[转帖]oracle数据库中RMAN备份格式化format解释

格式化解释: 使用格式串 更改格式命令: RMAN> configure channel device type disk format ' E:\app\Administrator\db_bak\rmanbak\backup_%d_%T_%s_%p '; 新的 RMAN 配置参数: CONFIGU

[转帖]Oracle数据库开启NUMA支持

NUMA简介 NUMA(Non Uniform Memory Access Architecture,非统一内存访问)把一台计算机分成多个节点(node),每个节点内部拥有多个CPU,节点内部使用共有的内存控制器,节点之间是通过互联模块进行连接和信息交互。因此节点的所有内存对于本节点所有的CPU都是

[转帖]Oracle数据库中ITL详解

首先说明这篇文章是转载的,原文地址:http://blog.sina.com.cn/s/blog_616b428f0100lwvq.html 1、什么是ITL ITL(Interested Transaction List)是Oracle数据块内部的一个组成部分,用来记录该块所有发生的事务,一个it

[转帖]Oracle客户端与Oracle数据库兼容矩阵

https://www.cnblogs.com/kerrycode/p/17666025.html Oracle客户端与Oracle数据库之间是有兼容支持关系的,有些低版本的Oracle Client连接到高版本的数据库是不支持的,其实Oracle官方文档 Client / Server Inter

[转帖]优化Oracle数据库的参数设置原创

https://vip.kingdee.com/article/372401660284519936?productLineId=8 1.登录数据库,创建参数文件备份 2.修改参数 数据库参数修改存在风险,仅供参考 1.登录数据库,创建参数文件备份 sqlplus / as sysdba 用SYSD

[转帖]警惕Oracle数据库性能“隐形杀手”——Direct Path Read

一、 简介 Oracle 的11g版本正式发布到今天已经10年有余,最新版本也已经到了20c,但是Direct Path Read(直接路径读)导致性能问题的案例仍时有发生,很多12c的用户还是经常遇到这个问题,所以有必要把这个事情再跟大家讲一遍,通过2个典型案例加深理解。 早在2012年,盖国强大