1.查询对象权限视图
select * from dba_tab_privs
where GRANTEE='user_name' and owner='owner_name' and table_name='';
返回结果为空 --如果是对象授权应该返回有查询权限的一条记录
2.查询系统权限视图
select * from dba_sys_privs
where GRANTEE='user_name';
返回结果:1 row and privillege column value:unlimited tablespace
--如果是系统授权,用户应该有授予了select any table的系统权限
3.这样看来用户不是直接用的grant sys privillege and grant 对象 privlillege
然后看看这个表是否授给了PUBLIC对象,这样所有的用户都可以访问和更新这个表。执行:
select * from dba_tab_privs
where GRANTEE='PUBLIC' and owner='owner_name' and table_name='同事不能更新的表名'
and PRIVILEGE='UPDATE';
返回结果为空
4.然后用同事登录的用户名和密码登录查询当前用户拥有的角色权限
select * from session_roles ; 发现用户多了一个ROLE权限:role1
原来DBA创建了一个角色:role1 ,然后执行脚本
grant select on table_name to role1;--把表的SELECT权限赋予role1
grant role1 to user_name;--把角色赋予了同事登录的账号
5. 查询
select * from dba_tab_privs
where GRANTEE='role1' and owner='owner_name' and table_name='同事不能更新的表名';
---返回得到该表的查询权限
6.如果需要更新权限,需要将表的UPDATE权限授予role1,然后我们就可以使用user_name登录更新这个表了
grant update on table_name to role1;
然后再在user_name用户下UPDATE table 成功
转自:http://blog.sina.com.cn/s/blog_6e02a2380100vv6q.html