數據庫,實例,表空間,用戶,權限,角色的理解sql
1.數據庫和實例 數據庫database:數據文件+控制文件+日誌文件,都是一些物理上的文件。 數據庫實例instance:數據庫後臺進程+內存區域 嚴格的說:一個Oracle服務,只包括一個Oracle實例和一個數據庫(不考慮雙機並行等這樣的狀況)。可是一個實例只能對應一個數據庫,一個數據庫有可能對應多個實例。數據庫
2.默認表空間和臨時表空間 臨時表空間:用戶查詢以及操做時用到的表空間。好比排序,分組等,若是數據量比較大,那麼內存不可能都分給這一個用戶工做存儲數據,因此會把一些數據放在臨時表空間中,這樣能節省內存空間。並且再次查詢時可直接從臨時表空間中調取,節約時間。 默認表空間:持久化表數據的地方 bash
3.用戶與表空間 一個用戶(1個schema), 必定有一個 默認表空間與默認的臨時表空間 一個用戶,若是建立用戶時未指定默認表空間,那麼系統將默認分配users表空間 一個用戶能夠擁有1個或者多個表空間的權限. session
create table test( id int); //將使用默認表空間
create table test2 ( id int ) tablespace DATA01 ; //將使用DATA01 表空間 複製代碼
用戶實際上和表空間沒有直接的聯繫,若是把用戶看做商人,表看做商品,表空間看做倉庫,1個商人能夠有多個商品,可是1個商品只能歸屬於1個商人,1個商人的全部商品能夠放在1個倉庫,也能夠一部分放在A倉庫,一部分放在B倉庫。同時1個倉庫既能夠放甲商人的商品也能夠放乙商人的商品,因此筆者理解商人和倉庫經過商品間接產生多對多的關係,也即用戶和表空間能夠間接理解爲多對多的關係 oracle
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:表) ui
5.角色 角色是權限集合,經常使用預約義角色connect,resource,dba,通常開發給前2種角色,查詢角色擁有的系統權限spa
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語句會致使事務隱式提交,使用自治事務可解決日誌