Wetts's blog

Stay Hungry, Stay Foolish.

0%

Oracle-概念-对象权限、角色权限、系统权限

  • 系统权限:是针对 oracle 系统操作而言,例如登陆 create session,创建表:create table 等;
  • 对象权限:是针对对象操作的,例如:查询 select,更新 update 等;
  • 角色权限:角色其实是特定系统权限和对象权限的组合,是一组权限的组合,便于对用户授权,Oracle 内置了一些角色,如经常使用的 connnet、reseource 和 dba 等。

查看 oracle 的角色拥有的哪些权限的 sql

前提是当前用户有查看 dba_sys_privs 的权限,我用的用户有 dba 的角色权限,select grantee,privilege from dba_sys_privs where grantee='RESOURCE' order by privilege;。无 dba 的角色权限时提示表或试图不存在!select grantee,privilege from dba_sys_privs where grantee='CONNECT' order by privilege;

查看用户拥有的角色,拥有的系统权限的 sql

1
2
3
4
select * from user_role_privs;--用户所拥有的oracle角色
select * from user_sys_privs; --用户所用户的系统权限
select * from table_privilege_map;
select * from session_privs;

查看对表 table1 有访问权限的用户

具有一定权限的用户(我测试时是 DBA)使用 select * from dba_tab_privs a where a.table_name='TABLE1' 查看,否则在无权限时提示“表或视图不存在”


用户 user1 和 user2,使用用户 user1 创建表 table1(下面的是本人按照顺序依次执行测试的):

  1. 当 user2 拥有 dba 角色时,执行 sql:select * from user2.teble1; 不会出错,而且可以修改表数据,可以修改表结构等操作;
  2. 当去掉 user2 的 dba 角色时,设置很低的权限,执行上述的 sql,提示“ORA-01031 权限不足”;
  3. 当 user1 登录 oracle,使用 sql:grant select on taleb1 to user2 后,user2 执行上述的查询语句 ok;不能修改,修改后提交时提示“权限不足!”;
  4. 当 user1 执行 sql:revoke select on table1 from user2 后,user2 执行 table1 查询的 sql 时报错,提示“权限不足”。
  5. 当 user1 使用 revoke 或者 grant 语句为自己授权时,提示“ORA-01749 用户不能为自己 revoke/grant 权限”
  6. 当 sys 用户使用 revoke select on user1.table1 from user1 时,oracle 系统提示“ORA-无法REVOKE您未授权的权限”,此时再用 user1 执行把表 table1 的任何权限(也就是 select、insert、update、delete、references、alter、index)授予 sys 或者用用 dba 角色的用户,再使用 sys 执行:revoke select on use1.table1 from user1 时,仍是提示“ORA-无法REVOKE您未授权的权限”.

结论:user1 创建的对象(如表),user1 永久对此表拥有权限,不可删除。