- 系统权限:是针对 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 | select * from user_role_privs;--用户所拥有的oracle角色 |
查看对表 table1 有访问权限的用户
具有一定权限的用户(我测试时是 DBA)使用 select * from dba_tab_privs a where a.table_name='TABLE1'
查看,否则在无权限时提示“表或视图不存在”
用户 user1 和 user2,使用用户 user1 创建表 table1(下面的是本人按照顺序依次执行测试的):
- 当 user2 拥有 dba 角色时,执行
sql:select * from user2.teble1;
不会出错,而且可以修改表数据,可以修改表结构等操作; - 当去掉 user2 的 dba 角色时,设置很低的权限,执行上述的 sql,提示“ORA-01031 权限不足”;
- 当 user1 登录 oracle,使用 sql:
grant select on taleb1 to user2
后,user2 执行上述的查询语句 ok;不能修改,修改后提交时提示“权限不足!”; - 当 user1 执行 sql:
revoke select on table1 from user2
后,user2 执行 table1 查询的 sql 时报错,提示“权限不足”。 - 当 user1 使用 revoke 或者 grant 语句为自己授权时,提示“ORA-01749 用户不能为自己 revoke/grant 权限”
- 当 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 永久对此表拥有权限,不可删除。