오라클 일반 (DBA가 아닌) 사용자에게 권한이있는 사용자가 소유하지 않은 개체와 권한 부여 방법 (역할 또는 직접 부여를 통해)을 찾아야합니다.오라클 권한
간단한 스크립트를 작성할 수 있습니까?
오라클 일반 (DBA가 아닌) 사용자에게 권한이있는 사용자가 소유하지 않은 개체와 권한 부여 방법 (역할 또는 직접 부여를 통해)을 찾아야합니다.오라클 권한
간단한 스크립트를 작성할 수 있습니까?
나는 이것이 당신이 필요로하는 것을 꽤 많이 가져야한다고 생각합니다. ALL_TAB_PRIVS는 데이터베이스의 모든 사용자가 사용할 수 있으며 SELECT를 수행하는 사용자에게 사용 권한, 사용 권한 및 부여한 모든 개체를 나열합니다. 다른 뷰인 ROLE_TAB_PRIVS에 가입하여 사용자에게 권한을 부여한 역할을 찾습니다 (있는 경우). 사용자에게 역할 및 직접 권한을 통해 사용 권한이 부여 된 경우 둘 다 나열됩니다.
SELECT atp.grantor, atp.privilege,
CASE WHEN NVL(rtp.role,'NULL') <> atp.grantee THEN atp.grantee
ELSE atp.grantee||' (ROLE)'
END grantee, atp.table_name
FROM all_tab_privs atp LEFT JOIN role_tab_privs rtp
ON (atp.table_name = rtp.table_name AND
atp.table_schema = rtp.owner)
WHERE grantor <> 'SYS' /* Optional - filter out SYS owned objects */
UNION ALL
SELECT owner, 'SELECT' /* Assume SELECT */, NULL, view_name||' (VIEW)'
FROM all_views
WHERE owner <> 'SYS' /* Optional - filter out SYS owned views */
ORDER BY 1,3;
편집 :이 PL/SQL 실행뿐만 아니라 개체를 포함로
는 ALL_TAB_PRIVS는 잘못된 이름의 비트입니다.
편집 2 :
이렇게하면보기가 사라집니다. 위의 쿼리로 all_views 결과를 결합하여 사용자가 일종의 액세스 권한을 가진 모든 뷰를 제공 할 수 있지만 뷰에 부여 된 정확한 권한을 제공하는 방법을 알지 못합니다.
경고 단어 : 액세스 할 수있는 모든 SYS 개체를 포함하여 다소 많은 양의 목록을 제공합니다. 여기에 표시된 것처럼 SYS에 속한 객체를 필터링 할 수 있습니다.
원하는대로 표시되지만 해당 사용자에게만 적용됩니다.
select username
, 'ROL' type
, granted_role pv
from user_role_privs
union
select username
, 'PRV' type
, privilege pv
from user_sys_privs
union
select grantee as username
, 'OBJ' type,
regexp_replace(max(decode(privilege,'WRITE','WRITE,'))||
max(decode(privilege,'READ','READ,'))||
max(decode(privilege,'EXECUTE','EXECUTE')),'WRITE,READ,EXECUTE','ALL')||
regexp_replace(max(decode(privilege,'SELECT','SELECT'))||
max(decode(privilege,'DELETE',',DELETE'))||
max(decode(privilege,'UPDATE',',UPDATE'))||
max(decode(privilege,'INSERT',',INSERT')),'SELECT,DELETE,UPDATE,INSERT','ALL')||
' ON '||object_type||' "'||a.owner||'"."'||table_name||'"' pv
from user_tab_privs a
, all_objects b
where a.table_name = b.object_name
and a.owner=b.owner
group by a.owner
, table_name
, object_type
, grantee
union
select grantee AS username
, 'COL' type,
privilege||' ('||column_name||') ON "'||owner||'"."'||table_name||'"' pv
from user_col_privs
where grantee=:usercheck
order by 1
, type
, pv;
역할을 통해 액세스 권한이 부여 된 개체는 표시되지 않으며 액세스 권한이 부여 된 역할 만 표시됩니다. – DCookie
쿼리를 실행하고 역할 이름을 : usercheck로 사용해보십시오. 이것은 dba * 테이블을 사용하는 스크립트의 수정입니다. 제한된 사용자의 경우 dba _ * _ privs 테이블/뷰와 같이 볼 수있는 것에 제한을받습니다. –