Oracle 用户权限获取Procedure

CREATE OR REPLACE PROCEDURE grant_priv

      /*

            grant select and dml privilege to

            user

      */

      (strToUser VARCHAR2,

       strPriv  VARCHAR2 )

AS

      strSql VARCHAR2(500);

      lngCount NUMBER(10);

      tab_name VARCHAR2(100);

      CURSOR cur_tab IS

            SELECT table_name FROM user_tables  ORDER BY 1;

BEGIN

      strSql:=' SELECT COUNT(*) FROM dba_users WHERE  username='''||strToUser||'''';

      EXECUTE IMMEDIATE strSql INTO lngCount ;

     

      IF lngCount>0 THEN

            --GRANT DELETE ON AM_DEPT TO LIS

            IF strPriv ='SEL' THEN

                  OPEN cur_tab ;

                  LOOP

                        FETCH cur_tab INTO tab_name;

                        EXIT WHEN cur_tab%NOTFOUND;

                        strSql:='GRANT SELECT ON '||tab_name|| ' TO '|| strToUser;

                        EXECUTE IMMEDIATE strsql;

                        --dbms_output.put_line(strSql);

                  END LOOP;

                  CLOSE cur_tab;   

            END IF;

 

            IF strPriv ='DML' THEN

                  OPEN cur_tab ;

                  LOOP

                        FETCH cur_tab INTO tab_name; 

                        EXIT WHEN cur_tab%NOTFOUND;

                        strSql:='GRANT ALL ON '||tab_name|| ' TO '|| strTouser;

                        EXECUTE IMMEDIATE strsql;

                        --dbms_output.put_line(strsql);

                  END LOOP;

                  CLOSE cur_tab;   

            END IF;

      END IF;

END grant_priv;


多年前写的内容,请测试后使用。

 

请使用浏览器的分享功能分享到微信等