引文
資料庫,例項,表空間,使用者,許可權,角色的理解
正文
1.資料庫和例項 資料庫database:資料檔案+控制檔案+日誌檔案,都是一些物理上的檔案。 資料庫例項instance:資料庫後臺程式+記憶體區域 嚴格的說:一個Oracle服務,只包括一個Oracle例項和一個資料庫(不考慮雙機並行等這樣的情況)。但是一個例項只能對應一個資料庫,一個資料庫有可能對應多個例項。
2.預設表空間和臨時表空間 臨時表空間:使用者查詢以及操作時用到的表空間。比如排序,分組等,如果資料量比較大,那麼記憶體不可能都分給這一個使用者工作儲存資料,所以會把一些資料放在臨時表空間中,這樣能節省記憶體空間。而且再次查詢時可直接從臨時表空間中調取,節約時間。 預設表空間:持久化表資料的地方
3.使用者與表空間 一個使用者(1個schema), 一定有一個 預設表空間與預設的臨時表空間 一個使用者,如果建立使用者時未指定預設表空間,那麼系統將預設分配users表空間 一個使用者可以擁有1個或者多個表空間的許可權.
create table test( id int); //將使用預設表空間
create table test2 ( id int ) tablespace DATA01 ; //將使用DATA01 表空間 複製程式碼
使用者實際上和表空間沒有直接的聯絡,如果把使用者看作商人,表看作商品,表空間看作倉庫,1個商人可以有多個商品,但是1個商品只能歸屬於1個商人,1個商人的所有商品可以放在1個倉庫,也可以一部分放在A倉庫,一部分放在B倉庫。同時1個倉庫既可以放甲商人的商品也可以放乙商人的商品,所以筆者理解商人和倉庫通過商品間接產生多對多的關係,也即使用者和表空間可以間接理解為多對多的關係
4.系統許可權和物件許可權 4.1 系統許可權 1)系統許可權介紹 系統許可權是指執行特定型別sql命令的權利。它用於控制使用者可以執行的一個或是一組資料庫操作。比如當使用者具有create table許可權時,可以在其方案中建表,當使用者具有create any table許可權時,可以在任何方案中建表。oracle提供了100多種系統許可權。 常用的有: create session 連線資料庫 create table 建表 create view 建檢視 create public synonym 建同義詞 create procedure 建過程、函式、包 create trigger 建觸發器 create cluster 建簇 2)顯示系統許可權 oracle提供了很多種系統許可權,而且oracle的版本越高,提供的系統許可權就越多,我們可以查詢資料字典檢視system_privilege_map,可以顯示所有系統許可權,sql語句為: select * from system_privilege_map ;
4.2 物件許可權 1)物件許可權介紹 物件許可權指訪問其它方案物件的權利,使用者可以直接訪問自己方案的物件,但是如果要訪問別的方案的物件,則必須具有物件的許可權。 比如smith使用者要訪問scott.emp表(scott:方案,emp:表)
5.角色 角色是許可權集合,常用預定義角色connect,resource,dba,一般開發給前2種角色,查詢角色擁有的系統許可權
select*from system_privilege_map order by name; //查詢系統一共有哪些許可權
select*from user_role_privs; //當前使用者有哪些角色
select*from role_sys_privs ; //查詢當前使用者的所有角色許可權
select*from user_sys_privs; //查詢使用者有哪些顯示授權的系統許可權(這個表中沒有通過角色獲取的許可權)
select*from user_tab_privs; //查詢使用者有哪些物件許可權
複製程式碼
以上查詢都是針對當前登陸的使用者,如果想通過dba來查詢其它使用者的相關許可權、角色,只需把上面這些表名中的user換成dba,後面加上相應的查詢條件即可 dba角色擁有所有系統許可權,除了啟停資料庫 隱式授權:通過角色授權 顯式授權:直接授權給使用者 oracle預設為定義者許可權(相對有1個呼叫者許可權),定義者許可權在儲存過程中隱式授權無效,需要顯式授權 ,過程中的DDL語句會導致事務隱式提交,使用自治事務可解決