Q如何确认某个Oracle用户当前拥有了哪些系统权限?我想快速了解某个用户已经被授予了哪些系统级权限,应该查看哪些系统视图,才能判断他能做什么、不能做什么?
A查看用户的系统权限
可以查询 DBA_SYS_PRIVS 视图来查看用户拥有的系统权限,例如:SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE = '用户名';。如果没有DBA权限,也可以结合 USER_SYS_PRIVS 查看当前登录用户的系统权限。
Q怎样查看Oracle用户被分配了哪些角色?我发现一个用户可以访问很多对象,想确认他是不是通过角色间接获得了权限,应该怎么查?
A查看用户角色分配
可以查询 DBA_ROLE_PRIVS 视图,查看用户直接被授予的角色,例如:SELECT * FROM DBA_ROLE_PRIVS WHERE GRANTEE = '用户名';。角色中的权限会影响用户实际可执行的操作,因此排查权限问题时很有用。
Q如何判断Oracle用户对某个表是否有查询或修改权限?我想确认某个用户能不能访问指定表,或者是否有插入、更新、删除权限,应该从哪里查看?
A查看对象权限
可以查询 DBA_TAB_PRIVS 视图,查看用户对具体表、视图等对象的权限,例如:SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE = '用户名' AND TABLE_NAME = '表名';。如果需要判断权限来源,也可以结合角色一起检查。
QOracle里能不能看到某个用户的权限是直接授予还是通过角色获得的?我想区分一个权限到底是直接给用户的,还是通过角色继承来的,这样便于做权限审计,有没有办法查询?
A区分直接权限和间接权限
可以分别查看 DBA_SYS_PRIVS、DBA_TAB_PRIVS 和 DBA_ROLE_PRIVS。直接授予给用户的权限会出现在前两类视图中,通过角色获得的权限则需要继续查看角色对应的权限明细,这样就能判断权限来源。