表访问授权问题

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> 表访问授权问题

表访问授权问题

生产环境,通常会创建一些角色,然后将表的读写权限,授予角色再将其授予用户,简单讲就是用角色封装权限,有些很像开发中的面向对象。

同事问了个问题,

1. 将一张表读权限授予角色。

2. 将角色授予用户。 3. 删除这张表,再新建一张同名的表。 问题:用户是否有(3)这张表读权限?

你可以考虑几秒,再往下看。

  1. 如果按照惯性思维来看,表名相同,应该可以读啊。

  2. 如果按理性思维来看,表名相同,字段可能不同,如果不用重新授予角色权限,就能访问,这可以说安全么?

我们看下,具体的操作结论。

  1. 以下使用BISAL用户来操作,创建角色、表、授予用户(必须不能是DBA角色)

SQL create role role_bisal; Role created.

SQL create table role_table (id number); Table created.

SQL grant select on role_table to role_bisal; Grant succeeded.

SQL grant role_bisal to a; Grant succeeded.

  1. 以下使用A用户来操作,需要重新登录,才能让角色生效

SQL select * from bisal.role_table;

no rows selected
  1. 以下使用BISAL用户来操作,删除这表,但不执行purge

SQL drop table role_table; Table dropped.

SQL select object_name, original_name, type from user_recyclebin; 表访问授权问题

创建一张同名表,

SQL create table role_table (id number); Table created.

  1. 以下使用A用户来操作

SQL select * from bisal.role_table;
select * from bisal.role_table;
                              *
ERROR at line 1

ORA-00942: table or view does not exist

说明仅仅是同名,需要重新授权,其实这是符合常理的,毕竟表名相同,未必代表相同的含义和用途,如果仅凭借表名,角色就可以访问,这就不正确了。

  1. 我们看看,是否可以恢复表的访问,以下使用BISAL用户来操作,使用purge删除新表role_table

SQL drop table role_table purge; Table dropped.

我们从回收站,恢复了这张表,注意此处,改了表名role_table_b。

SQL flashback table "BIN$aBKyCdQRUKXgUxqT3QovvQ==$0" to before drop rename to role_table_b; Flashback complete.

  1. 以下使用A用户来操作,此时可以直接访问表,

SQL select * from bisal.role_table_b;
no rows selected.

当然,我们将表改为原名称,

SQL rename role_table_b to role_table;
Table renamed.

就可以用此名访问了,

SQL select * from bisal.role_table;
no rows selected.

因此,以下三步操作,用户不会有这张同名表,任何使用权限,但若原表可恢复,例如回收站中,则可以继续访问,只要表物理存在,即使表名变了,

  1. 将一张表读权限授予角色。

  2. 将角色授予用户。

  3. 删除这张表,再新建一张同名的表。

可能仅从理论上,就能得出这样的结论,但经过一些测试,可以加深我们的理解,何况并不复杂。

如果您觉得本文有帮助,欢迎关注转发:bisal的个人杂货铺,

表访问授权问题 表访问授权问题
本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> 表访问授权问题


  转载请注明: 好好学java 表访问授权问题

 上一篇
时间间隔分区,及其默认表空间的几个使用场景 时间间隔分区,及其默认表空间的几个使用场景
这次上线,会将一张普通表,变为分区表,准确地说,是时间间隔分区,这是11g的新特性,可以避免人工创建分区,当有新数据进来,他会创建新分区,以及相应的local分区索引,语法如下,原始语法基础上,增加关键字INTERVAL,里面可以
下一篇 
Oracle日期类型占用的空间 Oracle日期类型占用的空间
今天同事问了一个问题, Oracle中日期类型字段,占用多少空间? 请别琢磨,第一时间你是否能说出答案? 咋一问可能会有些茫然,只要我们动动手,就能得到答案。 首先,Oracle中常见的日期类型字段,可以说有两种, DATE