將指定用戶下所有表的查詢權限賦權給查詢用戶


 將指定用戶下所有表的查詢權限賦權給查詢用戶[轉]
-----------------------------------------------2013/11/1
oracle的開發和管理往往都是分開的,當然不否認這種"集萬千寵愛於一身"的人才也大有人在,但是在公司,往往開發人員兼顧程序和數據庫的設計與開發,而oracle dba則是負責oracle的安全與維護。那么這就出現了一個問題,權限問題,不是所有人都可以有dba權限的,這樣很容易造成不安全的隱患。所以要合理的分配用戶和權限。 以下舉例說明: 
一、創建了一個查詢用戶rptuser,該用戶具有scott(根據公司具體要求替換用戶)用戶下所有表的查詢權限。
注意:如果只是把scott用戶下emp表的select權限賦權給rptuser,那么很簡單,直接在dba用戶下執行grant select on scott.emp to rptuser;即可,那是因為僅此一條語句,所以可以直接賦權,若是要求將一個具有幾千幾萬張表的用戶(此時若不是scott用戶只有9張表)下的所有表賦權給一個查詢用戶,那豈不是悲劇了?
   稍安勿躁,下面有請"絕招"上場,大家鼓掌歡迎~~吼吼
二、兩種方式:此處我采用方法二列舉過程 
1.select 'grant select on '|| tname ||' to  rptuser ;' from tab;  
  (當前用戶有dba權限如system或者sysdba,執行輸出腳本)
2.select 'grant select on user.' || tname || ' to rptuser;' from tab;  
  (當前用戶無dba權限也就是scott用戶,用system或者sysdba用戶執行輸出腳本)
輸出內容為:
 
  1. grant select on DEPT to  rptuser ; 
  2. grant select on EMP to  rptuser ; 
  3. grant select on BONUS to  rptuser ; 
  4. grant select on SALGRADE to  rptuser ; 
  5. grant select on AVGSAL to  rptuser ; 
  6. grant select on BOOK to  rptuser ; 
  7. grant select on TEST_INDEX to  rptuser ;  
  8. grant select on TB_EMPLOYEES to  rptuser ; 
三、直接復制此內容使用system用戶執行即可,這里我使用的是oracle的客戶端Toad for oracle,執行結果如下:
    賦權執行成功。
四、再用具有dba權限的用戶給rptuser用戶賦予建同義詞的權限
    grant create synonym to rptuser;
五、再在scott用戶下執行
select 'create synonym ' ||  tname || ' for scott.' ||  tname || ';' from tab;
或者
select 'create synonym '|| table_name || ' for scott.' || table_name || ';' from user_tables;
輸出腳本內容為:
 
  1. create synonym DEPT for scott.DEPT; 
  2. create synonym EMP for scott.EMP; 
  3. create synonym BONUS for scott.BONUS; 
  4. create synonym SALGRADE for scott.SALGRADE; 
  5. create synonym BOOK for scott.BOOK; 
  6. create synonym TB_EMPLOYEES for scott.TB_EMPLOYEES; 
  7. create synonym TEST_INDEX for scott.TEST_INDEX; 
六、最后將這個腳本內容用rptuser查詢用戶執行,完成
七、用rptuser用戶查詢scott用戶下的表,即無需from scott.tablename了,可以直接查詢了
 
  1. SQL> show user;
  2. USER is "RPTUSER"
  3. SQL> select * from dept; 
  4.     DEPTNO DNAME          LOC 
  5. ---------- -------------- ------------- 
  6.         10 ACCOUNTING     NEW YORK 
  7.         20 RESEARCH       DALLAS 
  8.         30 SALES          CHICAGO 
  9.         40 OPERATIONS     BOSTON      
    總結:這種辦法的好處就是可以使dba簡化繁瑣的工作,若是一張一張表的賦權,那么要是遇到一個用戶幾千張,不,估計幾十張,你就得瘋了,所以采用此方法。
    舉一反三:如果賦權給查詢用戶sequence的查詢權限也是一樣,我想大家都看得明白了,僅給出語句,過程就不寫了,呵呵。
select 'grant select on ' || sequence_name || ' to itreport;' from dba_sequences where sequence_owner='USER_NAME';
注意兩點:1.此處應該用具有dba權限的用戶執行此語句
          2.紅色部分USER_NAME為具體用戶名
   其他過程如上所述,此處省略十分鍾的口水。。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM