一、 表空間 Oracle資料庫包含邏輯結構和物理結構。 資料庫的物理結構指的是構成資料庫的一組操作系統文件。 資料庫的邏輯結構是指描述數據組織方式的一組邏輯概念以及它們之間的關係。 表空間是資料庫邏輯結構的一個重要組件。 表空間可以存放各種應用對象,如表、索引等。 而每一個表空間由一個或多個數據文 ...
一、 表空間
Oracle資料庫包含邏輯結構和物理結構。
資料庫的物理結構指的是構成資料庫的一組操作系統文件。
資料庫的邏輯結構是指描述數據組織方式的一組邏輯概念以及它們之間的關係。
表空間是資料庫邏輯結構的一個重要組件。
表空間可以存放各種應用對象,如表、索引等。
而每一個表空間由一個或多個數據文件組成。
1. 表空間的分類
表空間可分為3類:
- 永久性表空間:一般保存表、上天、過程和索引等數據。system、sysaux、users、example表空間是預設安裝的。
- 臨時性表空間:只用於保存系統中短期活動的數據,如排序數據等。
- 撤銷表空間:用來幫助回退未提交的事務數據,已提交了的數據在這裡是不可以恢復的。一般不需要創建臨時和撤銷表空間,除非把它們轉移到其它磁碟中以提高性能。
2. 表空間的目的
(1) 對不同的用戶分配不同的表空間,對不同的模式對象分配不同的表空間,方便對用戶數據的操作、對模式對象的管理。
(2) 可以將不同數據文件創建到不同的磁碟中,有利於管理磁碟空間、有利於提高I/O性能、有利於備份和回覆數據等。
(3) 一般在完成Oracle系統的安裝並創建Oracle實例後,Oracle系統會自動建立多個表空間。
3. 創建表空間
創建表空間,語法如下:
1 CREATE TABLESPACE tablespaceName 2 DATAFILE 'filename' 3 [SIZE integer [K | M]] 4 [AUTOEXTEND [OFF | ON]];
在語法中:
- tablespaceName是需創建的表空間名稱;
- DATAFILE指定組成表空間的一個或多個數據文件,當有多個數據文件時使用逗號分隔;
- filename是數據文件的路徑和名稱;
- SIZE指定文件的大小,用K指定千位元組大小,用M指定兆位元組大小;
- AUTOEXTEND子句用來啟用或禁用數據文件的自動擴展,設置為ON則空間使用完畢會自動擴展,設置為OFF則很容易出現表空間剩餘容量為0的情況,使數據不能存儲到資料庫中。
實例:創建一個自動增長的表空間geeksss的SQL語句如下:
1 CREATE TABLESPACE geeksss 2 DATAFILE 'D:\ORACLE\DATA\GEEKSSS.DBF' 3 SIZE 10M 4 AUTOEXTEND ON;
4. 刪除表空間
可以通過DROP語句(DROP TABLESPACE 加上表空間的名稱)來刪除用戶自定義的表空間。
語法:
1 DROP TABLESPACE tablespaceName;
刪除表空間之前最好對資料庫進行備份。
二、 自定義用戶管理
當創建一個新資料庫時,Oracle將創建一些預設資料庫用戶,如sys、system和scott等。
sys和system用戶都是Oracle的系統用戶,而scott用戶是Oracle資料庫的一個示範賬戶,裡面包含一些測試樣例表。
下麵簡單介紹一個sys、system和scott用戶的模式。
1. sys
sys用戶是Oracle中的一個超級用戶。
資料庫中的所有數據字典和視圖都存儲在sys模式中。
數據字典存儲了用來管理資料庫對象的所有信息,是Oracle資料庫中非常重要的系統信息。
sys用戶主要用來維護系統信息和管理實例。sys用戶只能以sysoper或sysdba角色登錄系統。
2. system
system用戶是Oracle中預設的系統管理員,它擁有dba許可權。
該用戶擁有Oracle管理工具使用的內部表和視圖,通常通過system用戶管理Oracle資料庫的用戶、許可權和存儲等。
不建議system模式中創建用戶表,system用戶不能以sysoper或sysdba角色登錄系統,只能以預設的方式登錄。
3. scott
scott用戶是Oracle資料庫的一個示範用戶,一般在資料庫安裝時創建。
scott用戶模式包含4個示範表,其中一個是emp表,使用USERS表空間存儲模式對象。
通常情況下,出於安全考慮,對於不同的數據表需要設置不同的訪問許可權。
此時,就需要創建不同的用戶。Oracle中的CREATE USER命令用於創建新用戶。
每個用戶都有一個預設表空間和一個臨時表空間。
如果沒有指定,Oracle就將USERS設為預設表空間,將TEMP設為臨時表空間。
創建用戶語法如下所示:
1 CREATE USER username 2 IDENTIFIED BY password 3 [DEFAULT TABLESPACE tablespaceName] 4 [TEMPORARY TABLESPACE tablespaceName]
在語法中:
- username是用戶名,用戶名必須是一個標識符;
- password是用戶口令,口令必須是一個標識符,且不區分大小寫;
- DEFAULT或TEMPORARY TABLESPACE為用戶確定預設表空間或臨時表空間。
實例:一下代碼演示瞭如何創建名稱為martin的用戶:
1 CREATE USER martin 2 IDENTIFIED BY martinpwd 3 DEFAULT TABLESPACE geeksss 4 TEMPORARY TABLESPACE temp;
上述命令將創建一個名為martin、口令為martinpwd的用戶,預設表空間為geeksss,臨時表空間為temp。
實例:將martin的口令修改為mpwd:
1 ALTER USER martin 2 IDENTIFIED BY mpwd;
Oracle的DROP USER命令可用於刪除用戶,但當用戶擁有模式對象時則無法刪除用戶。
而必須使用CASCADE選項刪除用戶和用戶模式對象。
實例:如何刪除用戶martin:
1 DROP USER martin CASCADE;
三、 資料庫許可權管理
許可權是用戶對一項功能的執行權利。
在Oracle中,根據系統管理方式的不同,可將許可權氛圍系統全新啊與對象許可權兩類。
1. 系統許可權
系統許可權是指被授權用戶是否可以連接到資料庫上及在資料庫中可以進行哪些系統操作。
系統許可權是在資料庫中執行某種系統級別的操作,或者針對某一類的對象執行某種操作的權利。
例如:在資料庫中創建表空間的權利,或者在資料庫中創建表的權利,這些都屬於系統許可權。
常見的系統許可權如下:
- CREATE SESSION:鏈接到資料庫
- CREATE TABLE:創建表
- CREATE VIEW:創建視圖
- CREATE SEQUENCE:創建序列
2. 對象許可權
對象許可權是指用戶對資料庫中具體對象所擁有的許可權。
對象許可權是針對某個特定的模式對象執行操作的權利。
只能針對模式對象未設置和管理對象許可權,如資料庫的表、視圖、序列、存儲過程、存儲函數等。
Oracle資料庫用戶有兩種途徑獲得許可權:
(1) 管理員直接向用戶授予許可權。
(2) 管理員將許可權授予角色,然後再將角色授予給一個或多個用戶。
使用角色能夠更加方便和高效地對許可權進行管理,所以資料庫管理員通常使用角色向用戶授予許可權,而不是直接向用戶授予許可權。
在Oracle資料庫系統中預定義了很多的角色,其中最常用的有CONNECT角色、RESOURCE角色、DBA角色等等。
一般程式使用的用戶只要授予CONNECT和RESOURCE兩個角色即可。
DBA角色具有所有的系統許可權,並且可以給其他用戶、角色授權。由於DBA角色許可權比較多,這裡就不列出來了。
Oracle中常用的系統預定義角色如下:
- CONNECT:需要連接上資料庫的用戶,特別是那些不需要創建表的用戶,通常授予該角色。
- RESOURCE:更為可靠和正式的資料庫用戶可以授予該角色,可以創建表、觸發器、過程等。
- DBA:資料庫管理員角色,擁有管理資料庫的最高許可權,一個具有DBA角色的用戶可以撤銷任何別的用戶甚至別的DBA許可權,這是很危險的,所以不要輕易授予該角色。
(1) 授予許可權語法如下:
1 GRANT 許可權|角色 TO 用戶名;
(2) 撤銷許可權的語法如下:
1 REVOKE 許可權|角色 FROM 用戶名;
實例:如何授予和撤銷martin用戶的CONNECT和RESOURCE兩個角色:
1 GRANT connection,resource to martin; -- 授予CONNECTION和RESOURCE兩個角色 2 REVOKE connection, resource FROM martin; -- 撤銷CONNECTION和RESOURCE兩個角色 3 GRANT SELECT ON SCOTT.emp TO martin; -- 允許用戶查看emp表中的記錄 4 GRANT UPDATE ON SCOTT.emp TO martin; -- 允許用戶更新emp表中的記錄
資料庫用戶安全設計原則:
- 資料庫用戶許可權授權按照最小分配原則;
- 資料庫用戶要分為管理、應用、維護、備份四類用戶;
- 不允許使用sys和system建立資料庫應用對象;
- 禁止GRANT dba TO user。