1. 程式人生 > >oracle中,建立其他使用者表的對應檢視

oracle中,建立其他使用者表的對應檢視

需求是這樣:在A使用者下,需要批量生成B使用者的所有表對應的檢視。在網上找了很多例子,最後用比較容易的方法解決了。

注意,不能簡單的賦予A使用者DBA許可權,有些操作也是無效的;另外不能授權所有許可權給A使用者,否則A使用者可以刪除B使用者中的表。

方法如下:

1.授權B使用者connect,resource角色許可權,再授予create any viewselect any table系統許可權。

2.由於要批量處理,所以用到了儲存過程,在儲存過程中需要查詢dba_tables表,所以需要新增對應許可權:在sys使用者中,grant select any dictionary to B

3.建立儲存過程:

CREATE OR REPLACE PROCEDURE PROC_CREATE_VIEWS IS
  CURSOR CUR IS
    SELECT OWNER, TABLE_NAME FROM DBA_TABLES WHERE OWNER = 'B';
  CREATE_SQL VARCHAR2(500);
BEGIN
  FOR TEMP_CUR IN CUR LOOP
    CREATE_SQL := 'create or replace view ' || TEMP_CUR.TABLE_NAME ||
                  ' as select * from B.' || TEMP_CUR.TABLE_NAME;
    EXECUTE IMMEDIATE CREATE_SQL;
  END LOOP;
END PROC_CREATE_VIEWS;

可根據需要,新增引數,變成通用的儲存過程。

查詢角色對應的系統許可權:select * from dba_sys_privs where grantee='CONNECT'

以上親測可用。