oracle一些易混淆的概念

胖子k發表於2019-04-28

引文

    資料庫,例項,表空間,使用者,許可權,角色的理解

正文

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語句會導致事務隱式提交,使用自治事務可解決


相關文章