一、 表空間
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。