建立和修改使用者
CREATE USER 語句將建立一個使用者。當一個使用者串連到ORACLE資料庫時,它必須被驗證。ORACLE中驗證有三種類型:
Database
external
Global
預設是資料庫驗證,當使用者串連到資料庫時,oracle將檢測使用者是否是資料庫的合法使用者,並且要提供正確的password.external驗證,oracle將只檢測使用者是否是合法使用者,password已經被網路或系統驗證了。global驗證也是只檢測是否是合法使用者,password由oraclesecurity server驗證。
Database驗證使用者帳號
資料庫驗證帳號是張好的預設類型,也是最普通的類型。建立一個帳號是piyush,口令是welcome的帳號,只需執行下面的命令:
| CREATE USE piyush IDENTIFIED BY welcome |
piyush可以通過下面的語句將口令改變為saraswatt:
| ALTER USER piyush IDENTIFIED BY saraswati; |
外部驗證使用者帳號
使用者帳號進入資料庫時可以不提供口令,這種情況下代替資料庫識別口令的是用戶端作業系統。外部驗證帳號有時也叫OPS$帳號,當他們最初在oracle6開始介紹時,oracle帳號都有關鍵字首碼OPS$,這也就是為什麼init.ora 參數os_authent_prefix是OPS$--預設特徵與oracle6保持一致。os_authent_prefix定義的字串必須被預先處理為用於Oracle外部識別帳號的作業系統帳號名。建立作業系統使用者appl的語句是:
| CREATE USER ops$appl IDENTIFIED EATERNALLY |
但在通常情況下,os_authent_prefix將被設定為空白,像下面這樣:
| CREATE USER appl IDENTIFIED EATERNALLY |
這樣效果是一樣的,關鍵字IDENTIFIED EXTERNALLY告訴ORACLE這是一個外部識別帳號。
GLOBAL使用者帳號
GLOBAL類型的使用者帳號資料庫不檢測口令,而是由X.509目錄伺服器檢測口令。建立一個GLOBAL類型的使用者帳號的方法是:
| CREATE USER scott IDENTIFIED GLOBALLY AS "CN=scott,OU=divisional,O=sybex,C=US" |
關鍵字IDENTIFIED GLOBALLY AS表示建立的是一個GLOBAL類型的使用者帳號.
建立和更改使用者帳號
CREATE USER 用於建立使用者帳號和給使用者帳號的屬性賦值。ALTER USER用於更改使用者帳號和屬性。但CREATE USER語句必須包括使用者名稱和口令。
有部分屬效能用CREATER USER和ALTER USER語句設定,下面對是這些的屬性具體描述:
給使用者指派預設資料表空間
資料表空間(tablespace)是放置表、索引、叢等使用者物件的。如果在create user語句中沒有包含資料表空間,那麼預設的是系統資料表空間。
CREATE USER piyush IDENTIFIED BY saraswati DEFAULTE TABLESPACE user_data; ALTER USER manoj DEFAULTE TABLESPACE dev1_data; |
給使用者指派暫存資料表空間
暫存資料表空間,顧名思義是臨時存放表、索引等使用者物件的臨時段。建立方法一樣
CREATE USER piyush IDENTIFIED BY saraswati Temporary TABLESPACE user_data; ALTER USER manoj Temporary TABLESPACE dev1_data; |
給使用者指派資料表空間的使用定額
使用定額限制使用者在資料表空間中使用磁碟的數量。定額可以按位元組、KB、MB或者無限制來制定。
CREATE USER piyush IDENTIFIED BY saraswati DEFAULT TABLESPACE user_data QUOTA UNLIMITED ON user_data QUOTA 20M ON tools; ALTER USER manoj QUOTA 2500K ON tools; |
給使用者指派一個簡表
簡表可以限制使用者在會話時消耗的資源。這些資源套件括:串連資料庫的時間,空閑時間,每次會話的邏輯讀資料的數量等等,預設的簡表對資源無限制。
CREATE USER piyush IDENTIFIED BY saraswati PROFILE TABLESPACE user_data; ALTER USER manoj Temporary TABLESPACE dev1_data; |
為使用者響應指定角色
這個屬性只能由ALTER USER語句設定,試圖用CREATE USER語句設定將回返回一個例外。
| ALTER USER manoj DEFAULT ROLE ALL EXCEPT salary_adm; |
為使用者的password設定到期時間以便在使用者下次登入時更改
當使用者的password到期,在下一次登入時將強迫修改password,oracle提示使用者輸入舊的password,然後輸入新的password。這項功能常用於新使用者,當新使用者用預設的password登入時必須修改立即修改password.
ALTER USER manoj IDENTIFIED BY welcome; ALTER USER manoj PASSWORD EXPIRE; |
鎖定帳號,是使用者不能登入
ALTER USER ql AC COUNT LOCK |
對帳號解鎖,以便使用者能登入資料庫
| ALTER USER ql ACCOUNT UNLOCK |
許可權和角色
許可權允許使用者訪問屬於其它使用者的對象或執行程式,ORACLE系統提供三種許可權:
Object 對象級
System 系統級
Role 角色級
這些許可權可以授予給使用者、特殊使用者public或角色,如果授予一個許可權給特殊使用者"Public"(使用者public是oracle預定義的,每個使用者享有這個使用者享有的許可權),那麼就意味作將該許可權授予了該資料庫的所有使用者。
對系統管理權限而言,角色是一個工具,許可權能夠被授予給一個角色,角色也能被授予給另一個角色或使用者。使用者可以通過角色繼承許可權,除了系統管理權限外角色服務沒有其它目的。許可權可以被授予,也可以用同樣的方式撤銷。
建立和使用角色
如前所訴,角色存在的目的就是為了使許可權的管理變得輕鬆。建立角色使用CREATE ROLE語句,他的文法如下:
CREATE ROLE role_name IDENTIFIED BY password CREATE ROLE role_name IDENTIFIED EXTERNALLY CREATE ROLE role_name IDENTIFIED GLOBALLY |
預設情況下建立的角色沒有password或者其他的識別。如果使用IDENTIFIED BY 子句建立,那麼角色不會自動響應,必須用SET ROLE啟用。
| SET ROLE role_name IDENTIFIED BY password |
EXTERNALLY和GLOBALLY類型的角色由作業系統和ORACLE Service server驗證。通常使用者需要許可權修改應用程式中使用的表單中的資料,但是只有在應用程式運行時而不是在使用ad hoc工具時,這種上下文敏感安全可以通過有PASSWORD的角色來實現。當使用者在應用程式內部連結資料庫時,代碼將執行SET ROLE命令,通過安全驗證。所以使用者不需要知道角色的password,也不需要自己輸入SET ROLE命令。
對象許可權
對象許可權就是指在表、視圖、序列、過程、函數或包等對象上執行特殊動作的權利。有九種不同類型的許可權可以授予給使用者或角色。如下表:
| 許可權 |
ALTER |
DELETE |
EXECUTE |
INDEX |
INSERT |
READ |
REFERENCE |
SELECT |
UPDATE |
| Directory |
no |
no |
no |
no |
no |
yes |
no |
no |
no |
| function |
no |
no |
yes |
no |
no |
no |
no |
no |
no |
| procedure |
no |
no |
yes |
no |
no |
no |
no |
no |
no |
| package |
no |
no |
yes |
no |
no |
no |
no |
no |
no |
| DB Object |
no |
no |
yes |
no |
no |
no |
no |
no |
no |
| Libary |
no |
no |
yes |
no |
no |
no |
no |
no |
no |
| Operation |
no |
no |
yes |
no |
no |
no |
no |
no |
no |
| Sequence |
yes |
no |
no |
no |
no |
no |
no |
no |
no |
| Table |
yes |
yes |
no |
yes |
yes |
no |
yes |
yes |
yes |
| Type |
no |
no |
yes |
no |
no |
no |
no |
no |
no |
| View |
no |
yes |
no |
no |
yes |
no |
no |
yes |
yes |
對象由不止一個許可權,特殊許可權ALL可以被授予或撤銷。如TABLE的ALL許可權就包括:
SELECT,INSERT,UPDATE和DELETE,還有INDEX,ALTER,和REFERENCE。
如何看這個表我們以ALTER許可權為例進行說明
ALTER許可權
允許執行ALTER TABLE和LOCK TABLE操作,ALTER TABLE可以進行如下操作:
. 更改表名
. 增加或刪除列
. 改變列的資料類型或大小
. 將錶轉變為分區表
在SEQUENCE上的ALTER許可權允許執行ALTER Sequence語句,重新給sequence分配最小值、增量和緩衝區大小。
系統許可權
系統許可權需要授予者有進行系統級活動的能力,如串連資料庫,更改使用者會話、建立表或建立使用者等等。你可以在資料字典視圖SYSTEM_PRIVILEGE_MAP上獲得完整的系統許可權。對象許可權和系統許可權都通過GRANT語句授予使用者或角色。需要注意的是在授予對象許可權時語句應該是WITH GRANT OPTION子句,但在授予系統權象時語句是WITH ADMIN OPTION,所以在你試圖授予系統許可權時,使用語句WITH GRANT OPTION系統會報告一個錯誤:ONLY ADMIN OPTION can be specified。在考試中要特別注意這個文法和錯誤資訊。
角色和角色許可權
角色許可權就是將屬於使用者的許可權授予一個角色。任何許可權都可以授予給一個角色。授予系統許可權給被授予者必須使用WITH_ADMIN_OPTION子句,在會話期間通過SET ROLE語句授予或撤銷角色許可權。然而,角色許可權不能依靠儲存在SQL中的許可權。如果函數、程式、包、觸發器或者方法使用另一個計劃擁有的對象,那麼就必須直接給對象的擁有者授權,這是因為許可權不會在會話之間改變。
授予和撤銷許可權
給使用者或者角色授予許可權使用GRANT 語句,GRANT語句的文法如下:
| GRANT ROLE(或system privilege) TO user(role,Public) WITH ADMIN OPTION(可選) |
對象許可權被授予 WITH GRANT OPTION,
許可權和資料字典
資料字典是ORACLE儲存有關資料庫結構資訊的地方,資料本身存放在其他地方,資料字典由表和視圖組成。在考試中關於資料字典最容易考的內容是:查看那一類許可權已經被授予。比如DBA_TAB_PRIV包含了使用者授予給另一使用者的對象許可權和在授予時是否帶有WITH GRANT OTPION子串的資訊。注意DBA_TAB_PRIV不僅僅包含了對錶的許可權的關係,他還包括函數、包、隊列等等上的許可權的關係。下表列出了所有的許可權和角色的資料字典視圖:
表: 許可權的資料字典視圖
| 視圖 |
作用 |
| ALL_COL_PRIVS |
表示列上的授權,使用者和PUBLIC是被授予者 |
| ALL_COL_PRIVS_MADE |
表示列上的授權,使用者是屬主和被授予者 |
| ALL_COL_RECD |
表示列上的授權,使用者和PUBLIC是被授予者 |
| ALL_TAB_PRIVS |
表示對象上的授權,使用者是PUBLIC或被授予者或使用者是屬主 |
| ALL_TAB_PRIVS_MADE |
表示對象上的許可權,使用者是屬主或授予者 |
| ALL_TAB_PRIVS_RECD |
表示對象上的許可權, 使用者是PUBLIC或被授予者 |
| DBA_COL_PRIVS |
資料庫列上的所有授權 |
| DBA_ROLE_PRIVS |
顯示已授予使用者或其他角色的角色 |
| DBA_SYS_PRIVS |
已授予使用者或角色的系統許可權 |
| DBA_TAB_PRIVS |
資料庫物件上的所有許可權 |
| ROLE_ROLE_PRIVS |
顯示已授予使用者的角色 |
| ROLE_SYS_PRIVS |
顯示通過角色授予使用者的系統許可權 |
| ROLE_TAB_PRIVS |
顯示通過角色授予使用者的對象許可權 |
| SESSION_PRIVS |
顯示使用者現在可利用的所有系統許可權 |
| USER_COL_PRIVS |
顯示列上的許可權,使用者是屬主、授予者或被授予者 |
| USER_COL_PRIVS_MADE |
顯示列上已授與權限,使用者是屬主或授予者 |
| USER_COL_PRIVS_RECD |
顯示列上已授與權限,使用者是屬主或被授予者 |
| USER_ROLE_PRIVS |
顯示已授予給使用者的所有角色 |
| USER_SYS_PRIVS |
顯示已授予給使用者的所有系統許可權 |
| USER_TAB_PRIVS |
顯示已授予給使用者的所有對象許可權 |
| USER_TAB_PRIVS_MADE |
顯示已授予給其他使用者的對象許可權,使用者是屬主 |
| USER_TAB_PRIVS_RECD |
顯示已授予給其他使用者的對象許可權,使用者是被授予者 |