如何检查角色是否对Oracle对象具有权限?

时间:2014-01-10 20:15:54

标签: oracle plsql

我需要知道一个角色是否对Oracle对象有特权。

我写了以下函数:

create or replace  FUNCTION HasPrivilegeOnObject
     (RoleName in varchar2
       , ObjectName in varchar2
       , ObjectOwner in varchar2
       , PrivilegeName in varchar2) 
    RETURN NUMBER 
AS
    Output number;
BEGIN       

    select count(*) into Output 
    from DBA_TAB_PRIVS        
    where 
            GRANTEE = RoleName and
            OWNER = ObjectOwner and
            TABLE_NAME = ObjectName and
            Privilege = PrivilegeName;                   

    if Output > 0 then                
            Output := 1;        
    end if;  

    return Output;
END HasPrivilegeOnObject;

函数编译但是,当我执行它时,它不会返回正确的结果。

对于某个角色和一个对象,当我检查变量Output INSIDE 的值时,它位于 1 。但是当我从另一个函数检查时,它是 0

摘要:

call dbms_output.put_line(HasPrivilegeOnObject(Role1, Table1, User1, 'SELECT')) 

返回1;

在另一个PL / SQL函数中:

HasPrivilegeOnObject(Role1, Table1, User1, 'SELECT') 

返回0.

有没有人对这个问题有所了解?

0 个答案:

没有答案