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
CONNECT 允許使用者連線到資料庫,RESOURCE 允許使用者建立各種資料庫物件,如表、序列等
1. 向使用者授予系統特權
GRANT CREATE SESSION,CREATE USER,CREATE TABLE TO user_name;
注:使用 WITH ADMIN OPTION 選項,這樣被授予的使用者就可以把這種特權再授予其它使用者
GRANT EXECUTE ANY PROCEDURE TO user_nameWITH ADMIN OPTION;
注:通過將一種特權授予 PUBLIC,就可以將該特權授予所有使用者
CONNECT / AS SYSDBA
GRANT EXECUTE ANY PROCEDURE TO PUBLIC;
2. 檢查授予使用者的系統特權
通過查詢 user_sys_privilege 可以檢查某個使用者具有哪些系統特權
3. 使用系統特權
使用者被授予系統特權之後,就可以使用這種特權來執行特定的任務,如建立使用者等
但執行沒有被授予的系統特權,操作會失敗
4. 撤銷使用者的系統特權
可以使用 REVOKE 語句撤銷某個使用者的系統特權
CONN / AS SYSDBA
REVOKE CREATE TABLE FROM user_name;
三、 物件特權
物件特權(object privilege)允許使用者對資料庫物件執行特定的操作,例如對錶執行 DML 語句
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;
相關文章
- Oracle使用者、授權、角色管理Oracle
- Oracle使用者角色許可權管理Oracle
- Oracle使用者、許可權、角色管理Oracle
- Oracle角色許可權之Default RoleOracle
- Oracle建立使用者、角色、授權、建表Oracle
- [學習]ORACLE使用者、角色、許可權Oracle
- Oracle使用者、許可權、角色管理【轉】Oracle
- 【使用者管理】oracle使用者、角色、許可權管理Oracle
- Oracle使用者及角色的許可權管理[Oracle基礎]Oracle
- 檢視Oracle使用者的許可權或角色Oracle
- Sql server 2005遷移至Oracle系列之五:角色、使用者、及許可權SQLServerOracle
- 如何檢視oracle使用者具有的許可權和角色Oracle
- Oracle 查詢許可權角色Oracle
- MongoDB 3.2的使用者角色許可權介紹和配置MongoDB
- Oracle12c多租戶管理使用者、角色、許可權Oracle
- Oracle使用者訪問許可權與PUBLIC角色的關係Oracle訪問許可權
- Oracle 12c DG管理-分離SYS特權使用者Oracle
- 使用者角色許可權管理架構架構
- 查詢資料庫使用者角色和許可權檢視資料庫
- Oracle檢視當前登陸使用者的許可權或者角色Oracle
- 查詢使用者的系統許可權和使用者所擁有的角色
- 2 Day DBA-管理Oracle例項-管理使用者帳戶和安全-關於使用者許可權和角色Oracle
- 【ASP.NET Core】按使用者角色授權ASP.NET
- jumpserver 使用者,系統使用者和管理使用者 普通使用者和特權使用者 區別Server
- ORACLE DG之備庫角色Oracle
- Oracle的物件許可權、角色許可權、系統許可權Oracle物件
- oracle12c新特性(6)--備份特定使用者特權Oracle
- Oracle資料庫內部安全威脅:審計特權使用者Oracle資料庫
- Oracle中使用者、角色、與許可權涉及的相關表及檢視Oracle
- 2 Day DBA-管理Oracle例項-管理使用者帳戶和安全-給使用者帳戶授予許可權和角色Oracle
- 資料庫安全之許可權與角色資料庫
- 學習和管理oracle角色Oracle
- Oracle的表空間、使用者和使用者授權Oracle
- DB2授權和特權安全機制DB2
- Laravel——使用者角色許可權控制包 Laravel-permissionLaravel
- oracle 12c 多租戶體系結構概念之資料字典、服務、使用者、角色與許可權Oracle
- PostgreSQL學習手冊(角色和許可權)SQL
- Oracle基礎 08 使用者角色 user/roleOracle