catalog.sql指令碼介紹
前面介紹瞭如何透過手工建立資料庫,在建立資料庫之後執行了指令碼$ORACLA_HOME/rdbms/admin/catalog.sql指令碼,這裡著重介紹一下該指令碼的作用。
該指令碼使用者建立oracle動態效能檢視,比如v$session,v$session_wait,v$transactoin等。這類效能檢視主要用於監控oracle例項執行的狀態,指令碼檔案開始時的註釋已經說明其作用:
Rem NAME
Rem CATALOG.SQL
Rem FUNCTION
Rem Creates data dictionary views.
Rem NOTES
Rem Must be run when connected AS SYSDBA
必須採用sysdba角色的使用者才可以執行該指令碼。
下面分析一下常用的v$session來分析一下
create or replace view v_$session as select * from v$session;
create or replace public synonym v$session for v_$session;
grant select on v_$session to select_catalog_role;
可以發現資料庫透過該執行該指令碼對底層的v$session檢視進一步作了封裝。
透過建立一個新的檢視v_$session,並將該v_$session檢視的查詢許可權分配了
select_catalog_role這個角色,任何user只要擁有select_catalog_role這個角色,都可以透過sys.v_$session來訪問sys使用者的v_$session檢視,但是考慮到使用者訪問的不便,同時也考慮對sys使用者對應檢視的封裝,建立了一個public 同義詞。
擁有select_catalog_role角色的使用者其實訪問的只是v$session這個public同義詞,實現了對底層v$session檢視的封裝隱藏,使用者本身並不知道該檢視時sys使用者還是其他使用者。
進一步向下檢視,所有的動態效能檢視都是透過這種方式對sys使用者下的檢視做了封裝隱藏。我們可以參照這種做法實現類似的封裝
SQL> conn / as sysdba
SQL>create table test(t number(10));
SQL>conn scott/tiger
SQL>select count(*) from test;
ERROR at line 1:
ORA-00942: table or view does not exist
切回到sys使用者
SQL>conn / as sysdba
SQL>create view test_ as select * from test;
View created.
SQL>create public synonym test for test_;
Synonym created.
SQL>grant select on test_ to tiger;
Grant succeeded.
對中間檢視test_查詢許可權分配完畢。切回到scott使用者試下
SQL>conn scott/tiger
Connected.
SQL>select count(*) from test;
COUNT(*)
----------
0
可見scott使用者已經可以查詢sys使用者下的test表。但是實際上使用者查詢的僅僅是這個public synonym。
catalog指令碼中還需要注意一點,所有的v_$檢視的查詢許可權都分配給了select_catalog_role這個角色,意味著只要使用者分配給了該角色,就能查詢該指令碼中所有的v$效能檢視。
SQL> grant select_catalog_role to scott;
Grant succeeded.
SQL> conn scott/tiger
Connected.
SQL> select count(*) from v$session;
COUNT(*)
----------
17
scott使用者已經可以查詢v$session檢視,否則scott使用者按照utlsampl.sql建立之後不允許查詢v$之類的效能檢視。
而select_catalog_role這個角色是在執行建立oracle資料庫指令碼時自動建立的,由於oracle建立資料庫時會自動執行$ORACLE_HOME/rdbms/admin/sql.bsq指令碼。我們透過該指令碼,可以看到具體如下:
/
create role select_catalog_role
/
create role execute_catalog_role
/
create role delete_catalog_role
/
grant select_catalog_role to dba with admin option
/
grant execute_catalog_role to dba with admin option
/
grant delete_catalog_role to dba with admin option
可以看到建庫時oracle自動建立了select_catalog_role這個角色,將該角色賦予給dba角色,並允許dba角色的使用者賦予許可權。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31520497/viewspace-2156754/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- meterpreter常見指令碼介紹指令碼
- Shell指令碼介紹與使用指令碼
- Linux shell 指令碼基礎介紹Linux指令碼
- XSS跨站指令碼攻擊介紹指令碼
- linux常用指令介紹Linux
- Laravel 8 - 路由指令介紹Laravel路由
- QuickTask動態指令碼支援框架整體介紹篇UI指令碼框架
- Quick-Task 動態指令碼支援框架之使用介紹篇UI指令碼框架
- 010 Rust 網路程式設計,cargo 構建指令碼介紹Rust程式設計Cargo指令碼
- 快速入門Redis呼叫Lua指令碼及使用場景介紹Redis指令碼
- HTML 指令碼簡介HTML指令碼
- Bash 指令碼簡介指令碼
- GBase8s優化指令介紹優化
- macOS Monterey 12.0 新功能介紹:快捷指令Mac
- Linux常用初級指令介紹和使用Linux
- 關於ASP程式中常見的幾種指令碼語言介紹指令碼
- Linux Bash Shell 指令碼入門(3)——Linux常用命令介紹Linux指令碼
- 『動善時』JMeter基礎 — 45、指令碼錄製工具Badboy介紹JMeter指令碼
- Python指令碼和網頁有什麼區別?差異介紹!Python指令碼網頁
- nginx的gzip指令介紹,Nginx的gzip指令使用小結Nginx
- MHA常用指令碼簡介指令碼
- Unicode編碼介紹Unicode
- 簡單介紹Shell指令碼之檔案批次建立與修改的方法指令碼
- OutputStreamWriter介紹&程式碼實現和InputStreamReader介紹&程式碼實現
- 3個例項介紹shell指令碼中幾個特殊引數的用法指令碼
- Java字串編碼介紹Java字串編碼
- Python 位元組碼介紹Python
- Linux配置開機自啟動執行指令碼方法有哪些?常見介紹!Linux指令碼
- [20200117]ashtop指令碼使用簡介.txt指令碼
- [20211118]mutexprof指令碼使用簡介.txtMutex指令碼
- 『現學現忘』Docker基礎 — 37、ONBUILD指令介紹DockerUI
- 條形碼生成原理介紹及簡介
- Unicode編碼解碼的全面介紹Unicode
- ASCII編碼的全面介紹ASCII
- ReentrantLock介紹及原始碼解析ReentrantLock原始碼
- 介紹 golang net/http 原始碼GolangHTTP原始碼
- Unity引擎與C#指令碼簡介UnityC#指令碼
- BiLSTM介紹及程式碼實現