程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> Oracle之用戶、特權和角色

Oracle之用戶、特權和角色

編輯:Oracle教程

Oracle之用戶、特權和角色


本文主要包括:

· 介紹創建用戶

· 了解如何使用特權來確保用戶能夠在數據庫中執行任務

· 介紹兩種特權類型:系統特權和對象特權

· 介紹系統特權怎樣允許執行操作,例如執行 DDL 語句

· 介紹對象特權怎樣允許執行操作,例如執行 DML 語句

· 介紹如何將特權組合在一起形成角色

一、 用戶

數據庫使用表空間來存儲對象,其中可以包含表、類型和 PL/SQL 代碼等

表空間存儲在數據文件 (datafile) 中

1. 創建用戶

語法:

CREATE USER user_name IDENTIFIED BY password

[DEFAULT TABLESPACE default_tablespace]

[TEMPORARY TABLESPACE temporary_tablespace];

可以從 user_users 查詢默認表空間和默認臨時表空間

2. 修改用戶密碼

ALTER USER user_name IDENTIFIED BY password;

PASSWORD 可以用來修改當前登錄用戶的密碼

3. 刪除用戶

DROP USER user_name;

注:如果要刪除的用戶模式中包含任何表或其他項,就必須在 DROP USER

語句中,在要刪除的用戶名後面加上關鍵字 CASCADE

二、 系統特權

系統特權(system privilege)允許用戶在數據庫中執行特定的操作,比如執行 DDL 語句

常用的系統特權如下表

\

特權組合在一起形成角色(role),授予用戶的兩種有用的角色是 CONNECT 和 RESOURCE<喎?http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+Q09OTkVDVCDUytDt08O7p8GsvdO1vcr9vt2/4qOsUkVTT1VSQ0Ug1MrQ7dPDu6e0tL2ouPfW1sr9vt2/4rbUz/OjrMjnse2hotDywdC1yDwvcD4KPHA+MS4gz/LTw7unytrT6M+1zbPM2MioPC9wPgo8cD5HUkFOVCBDUkVBVEUgU0VTU0lPTixDUkVBVEUgVVNFUixDUkVBVEUgVEFCTEUgVE8gdXNlcl9uYW1lOzwvcD4KPHA+16Kjusq508MgV0lUSCBBRE1JTiBPUFRJT04g0aHP7qOs1eLR+bG7ytrT6LXE08O7p77Nv8nS1LDR1eLW1szYyKjU2cra0+jG5Mv808O7pzwvcD4KPHA+R1JBTlQgRVhFQ1VURSBBTlkgUFJPQ0VEVVJFIFRPIHVzZXJfbmFtZVdJVEggQURNSU4gT1BUSU9OOzwvcD4KPHA+16Kjus2ouf29q9K71tbM2MioytrT6CBQVUJMSUOjrL7Nv8nS1L2ruMPM2MioytrT6Mv509DTw7unPC9wPgo8cD5DT05ORUNUIC8gQVMgU1lTREJBPC9wPgo8cD5HUkFOVCBFWEVDVVRFIEFOWSBQUk9DRURVUkUgVE8gClBVQkxJQzs8L3A+CjxwPjIuILzssunK2tPo08O7p7XEz7XNs8zYyKg8L3A+CjxwPs2ouf2y6dGvIHVzZXJfc3lzX3ByaXZpbGVnZSC/ydLUvOyy6cSzuPbTw7unvt/T0MTE0KnPtc2zzNjIqDwvcD4KPHA+My4gyrnTw8+1zbPM2MioPC9wPgo8cD7Tw7unsbvK2tPoz7XNs8zYyKjWrrrzo6y+zb/J0tTKudPD1eLW1szYyKjAtNa00NDM2LaotcTIzs7xo6zI57S0vajTw7untcg8L3A+CjxwPrWr1rTQ0MO709Cxu8ra0+i1xM+1zbPM2Mioo6yy2df3u+HKp7DcPC9wPgo8cD40LiCzt8/608O7p7XEz7XNs8zYyKg8L3A+CjxwPr/J0tTKudPDIFJFVk9LRSDT777ks7fP+sSzuPbTw7untcTPtc2zzNjIqDwvcD4KPHA+Q09OTiAvIEFTIFNZU0RCQTwvcD4KPHA+UkVWT0tFIENSRUFURSBUQUJMRSBGUk9NIHVzZXJfbmFtZTs8L3A+Cgo8cD7I/aGiILbUz/PM2MioPC9wPgo8cD621M/zzNjIqKOob2JqZWN0IHByaXZpbGVnZaOp1MrQ7dPDu6e21Mr9vt2/4rbUz/PWtNDQzNi2qLXEstnX96OswP3I57bUse3WtNDQIERNTCDT777kPC9wPgo8cD48aW1nIHNyYz0="http://www.2cto.com/uploadfile/Collfiles/20141201/20141201092221106.png" alt="\">

1. 向用戶授予對象特權

可以使用 GRANT 語句向用戶授予對象特權

范例:以 store 用戶的身份連接到數據庫,並向 steve 用戶授予以下特權:

對 products 表的 SELECT、INSERT、UPDATE對象特權以及對表 employees 的 SELECT 特權

CONN store/store_password

GRANT SELECT,INSERT,UPDATE ON store_products TO steve;

GRANT SELECT ON store.employees TO steve;

注:可以使用 GRANT 選項,這樣被授予的用戶就可以把這種特權再授予其他用戶

GRANT SELECT ON store.customers TO steve WITH GRANT OPTION;

2. 檢查已授予的對象特權

通過查詢 user_tab_privs_made 可以檢查某個用戶對哪些表向其他用戶開放了哪些對象特權

\

范例:檢索 table_name 為 PRODUCTS 的行

SELECT grantee,table_name,grantor,privilege,grantable,hierarchy

FROM user_tab_privs_made

WHERE table_name="PRODUCTS';

通過查詢 user_col_privs_made 可以檢查某個用戶對哪些列對象開放了哪些特權

\

范例:對 user_col_privs_made 進行查詢

SELECT grantee,table_name,column_name,grantor,privilege,grantable

FROM user_col_privs_made

ORDER BY column_name;

注:

· 系統特權的傳遞使用 WITH ADMIN OPTION

· 對象特權的傳遞使用 WITH GRANT OPTION

3. 檢查已接受的對象特權

通過查詢 user_tab_privs_recd表可以檢查某個用戶被授予了哪些表上的哪些對象特權

\

范例:以 steve 用戶的身份連接到數據庫,並對 user_tab_privs_recd 進行查詢

SELECT owner,table_name,grantor,privilege,grantable,hierarchy

FROM user_tab_privs_recd

ORDER BY table_name,privilege;

通過查詢 user_col_privs_recd可以檢查某個用戶被授予了哪些列的對象特權

\

范例:對 user_col_privs_recd 進行查詢

SELECT owner,table_name,column_name,grantor,privilege,grantable

FROM user_col_privs_recd;

4. 使用對象特權

用戶被授予對象特權之後,就可以使用這種特權來執行特定的任務,

例如, steve 用戶對 store.customers 具有 SELECT 特權

CONNECT steve/button

SELECT * FROM store.customers;

注:如果 steve 試圖對 purchases 表 (steve 對該表沒有任何權限) 進行檢索,數據庫就會報錯

SELECT * FROM store.purchases;

5. 創建同義詞

范例:以 system 用戶的身份連接到數據庫,並將 CREATE SYNONYM 系統特權授予 steve 用戶

CONN system/oracle

GRANT CREATE SYNONYM TO steve;

范例:以 steve 身份連接到數據庫,並執行一條 CREATE SYNONYM 語句,為 store.customers 表創建同義詞

CONN steve/button

CREATE SYNONYM customers FOR store.customers;

6. 創建公共同義詞

可以為表創建公共同義詞 (public synonym) ,在創建公共同義詞之後,所有的用戶都可以

看到這個同義詞,下面這4條語句執行以下任務:

· 以 system 用戶的身份連接到數據庫

· 將 CREATE PUBLIC SYNONYM 系統特權授予 store 用戶

· 以 store 用戶的身份連接到數據庫

· 為 store.products 創建公共同義詞

CONNECT system/oracle

GRANT CREATE PUBLIC SYNONYM TO store;

CONN store/store_password

CREATE PUBLIC SYNNONYM products FOR store.products;

7. 撤銷用戶的對象特權

可以使用 REVOKE 語句撤銷某個用戶的對象特權

范例:以 store 用戶的身份連接到數據庫,並撤銷 steve 用戶對 products 表的 INSERT 特權

CONN store/store_password

REVOKE INSER ON products FROM steve;

注:

· 系統特權在撤銷時,該用戶授予其它用戶的特權不會消失

· 對象特權再撤銷時,該用戶授予其它用戶的特權也會消失

四、 角色

角色就是一組特權,可以分配給用戶或其它角色,角色的優點可以總結為如下幾點:

· 並不是一次一個地將特權直接授予用戶,而是先創建角色,向角色授予一些特權,

然後再將角色授予多個用戶和角色

· 在增加或刪除角色的某種特權時,被授予該角色的所有用戶和角色都會自動獲得

新增加的特權或自動失去這種特權

· 可以將多個角色授予用戶或角色

· 可以為角色設置密碼

1. 創建角色

要創建角色,必須具有 CREATE ROLE 系統特權

2. 為角色授權

3. 將角色授予用戶

4. 檢查授予用戶的角色

通過查詢 user_role_privs 可以檢查已經授予用戶哪些角色

\

注:

· 密碼保護的角色是禁用的,必須輸入密碼才能使用該角色

· 創建角色的那個用戶也會被授予該角色

5. 檢查授予角色的系統特權

通過查詢 role_sys_privs 可以檢查已經授予角色哪些系統特權

\

6. 檢查授予角色的對象特權

通過查詢 role_tab_privs 可以檢查已經授予角色哪些對象特權


7. 使用已授予角色的特權

對於無密碼保護的角色,通過角色將特權授予用戶之後,用戶連接到數據庫後就

可以立即使用這種特權了;

對於密碼保護的角色,用戶必須輸入角色密碼才能使用這個角色

SET ROLE role_name IDENTIFIED BY role_password;

8. 啟用和禁用角色

可以禁用角色,ALTER ROLE 語句可以用來對角色進行修改,使其變為非默認角色

范例:以 system 用戶身份連接到數據庫,並對 john 用戶進行修改,使 hr_manager 不再是默認角色

CONN system/oracle

ALTER USER john DEFAULT ROLE ALL EXCEPT hr_manager;

范例:使用 SET ROLE 命令啟用 hr_manager 角色

SET ROLE hr_manager;

范例:將 hr_manager 角色設置為默認角色,它在退出登錄後仍然保留

CONN system/oracle

ALTER USER john DEFAULT ROLE hr_manager;

范例:可以將角色設置為 NONE ,這表示沒有角色

CONN john/brown

SET ROLE NONE;

范例:將角色設置為除 hr_manager 之外的任何角色

SET ROLE ALL EXCEPT hr_manager;

9. 撤銷角色

REVOKE 語句可以用來撤銷角色

REVOKE role_name FROM user_name;

10. 從角色中撤銷特權

REVOKE 語句可以用來從角色中撤銷某種特權

REVOKE ALL ON table_name FROM role_name;

11. 刪除角色

DROP ROLE 語句可以用來刪除角色

DROP ROLE role_name;

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved