控制用户的访问之权限、角色【weber出品必属精品】
限制用戶對數據的訪問
?權限的分類
1. 系統權限:能夠存取數據庫的權限?
2. 對象權限:操作數據庫對象的內容
?1.1 如何創建用戶: SQL> create user test default tablespace users identified by test;用戶已創建。
1.2 數據庫中的系統權限
SQL> desc system_privilege_map;Name Null? Type----------------------------------------------------------------- -------- --------------------------------------------PRIVILEGE NOT NULL NUMBERNAME NOT NULL VARCHAR2(40)PROPERTY NOT NULL NUMBERSQL> select privilege,name,property from system_privilege_map;PRIVILEGE NAME PROPERTY ---------- ---------------------------------------- -----------3 ALTER SYSTEM 0-4 AUDIT SYSTEM 0-5 CREATE SESSION 0-6 ALTER SESSION 0-7 RESTRICTED SESSION 01.3?查看某個用戶擁有的系統權限
SQL> select username,privilege,admin_option from user_sys_privs;USERNAME PRIVILEGE ADM ------------------------------ ---------------------------------------- --- SYS AUDIT ANY NO SYS DROP ANY INDEX NO SYS CREATE ANY CLUSTER NO SYS ALTER ANY TABLE NO。。。。。。。。。。。。。。。。。。。。。。。。。 159 rows selected.1.4 系統權限的授予與回收
sys授予select any table給scott
? ? ? ??sys收回select any table給scott
SQL> conn /as sysdba 已連接。 SQL> revoke select any table from scott;撤銷成功。SQL> conn scott/tiger 已連接。 SQL> select USERNAME,PRIVILEGE from user_sys_privs;USERNAME PRIVILEGE ------------------------------ ---------------------------------------- SCOTT CREATE SYNONYM SCOTT CREATE VIEW SCOTT UNLIMITED TABLESPACESQL> select count(*) from hr.employees; select count(*) from hr.employees* 第 1 行出現錯誤: ORA-00942: 表或視圖不存在1.5 權限的轉授
? ? ?系統權限不能被級聯回收
SQL> conn /as sysdba
已連接。
SQL> revoke select any table from scott;
撤銷成功。
SQL> conn scott/tiger
已連接。
SQL> select count(*) from oe.customers;
select count(*) from oe.customers
*
第 1 行出現錯誤:
ORA-00942: 表或視圖不存在
SQL> conn hr/hr
已連接。
SQL> select count(*) from oe.customers;
COUNT(*)
----------
319
?對象權限
對象權限:在某個數據庫對象上的權限
4.1 在某個表上的所有對象權限:
4.2 對象權限的授予與回收
授予單個權限:SQL> show user USER 為 "SCOTT" SQL> grant select on emp to hr;授權成功。SQL> revoke select on emp from hr;撤銷成功。針對于某個列:SQL> grant update(sal) on emp to hr;SQL> revoke update on emp from hr;撤銷成功。 4.3 查看對象權限: SQL> se SQL> col OWNER for a6 SQL> col TABLE_NAME for a15 SQL> col GRANTOR for a7 SQL> col PRIVILEGE for a20SQL> show userUSER 為 "SCOTT"SQL> select grantee,owner,table_name,privilege from user_tab_privs;GRANTEE OWNER TABLE_NAME PRIVILEGE -------- ------ --------------- -------------------- HR SCOTT EMP FLASHBACK HR SCOTT EMP DEBUG HR SCOTT EMP QUERY REWRITE HR SCOTT EMP ON COMMIT REFRESH HR SCOTT EMP REFERENCES HR SCOTT EMP INSERT HR SCOTT EMP INDEX HR SCOTT EMP DELETE HR SCOTT EMP ALTER9 rows selected. GRANTEE:接受權限的用戶GRANTOR:授出權限的用戶 4.4 對象權限的轉授 SQL> show user USER 為 "HR"SQL> revoke update on employees from scott;撤銷成功。SQL> grant update on employees to scott with grant option;授權成功。SQL> show user USER 為 "SCOTT"SQL> grant update on hr.employees to oe;授權成功。SQL> show user USER 為 "SCOTT"SQL> update hr.employees set salary=salary+100;已更新107行。SQL> roll 回退已完成。 SQL> conn oe/oe 已連接。 SQL> update hr.employees set salary=salary+100;已更新107行。SQL> rollback;回退已完成。4.5 對象權限的級聯回收
conn hr/hrgrant update on employees to scott with grant option;conn scott/tigergrant update on hr.employees to oe;SQL> update hr.employees set salary=salary+100;已更新107行。SQL> rollconn oe/oeSQL> update hr.employees set salary=salary+100;已更新107行。SQL> rollconn hr/hrrevoke update on employees from scott;conn scott/tigerSQL> update hr.employees set salary=salary+100; update hr.employees set salary=salary+100* 第 1 行出現錯誤: ORA-01031: 權限不足conn oe/oeSQL> update hr.employees set salary=salary+100;--對象權限會被級聯回收 update hr.employees set salary=salary+100* 第 1 行出現錯誤: ORA-01031: 權限不足5.1 角色:角色是一組權限(包含對象權限和系統權限)的集合
5.2 角色作用:
比較容易的權限管理
動態的權限管理
選擇權限的可獲得性
可通過操作系統授予
5.3. 創建角色并給它授權
查看角色中有哪些系統權限:
SQL> select PRIVILEGE from role_sys_privs where role='R1';PRIVILEGE -------------------- SELECT ANY TABLE查看角色中的對象權限:
SQL> select OWNER,TABLE_NAME,PRIVILEGE from role_tab_privs where role='R1';OWNER TABLE_NAME PRIVILEGE ------ --------------- -------------------- SCOTT EMP UPDATE5.4 角色授予與回收
SQL> grant r1 to hr;--hr擁有角色r1中所有的權限授權成功。SQL> conn hr/hr 已連接。 SQL> select count(*) from oe.customers;COUNT(*) ----------319SQL> update scott.emp set sal=sal+100;已更新14行。SQL> roll 回退已完成。SQL> conn /as sysdba 已連接。 SQL> revoke r1 from hr;--r1中所有的權限都從hr中回收撤銷成功。SQL> conn hr/hr 已連接。 SQL> select count(*) from oe.customers; select count(*) from oe.customers* 第 1 行出現錯誤: ORA-00942: 表或視圖不存在SQL> update scott.emp set sal=sal+100; update scott.emp set sal=sal+100* 第 1 行出現錯誤: ORA-00942: 表或視圖不存在5.5 查看當前用戶有哪些角色
SQL> select GRANTED_ROLE from user_role_privs;GRANTED_ROLE ------------------------------ CONNECT PLUSTRACE RESOURCE角色中的權限,在user_sys_privsH和user_tab_privs中看不到的
SQL> select GRANTED_ROLE from user_role_privs;GRANTED_ROLE ------------------------------ CONNECT PLUSTRACE RESOURCESQL> conn /as sysdba 已連接。SQL> select privilege from role_sys_privs where role='CONNECT';PRIVILEGE -------------------- CREATE SESSIONSQL> select PRIVILEGE from user_sys_privs;PRIVILEGE -------------------- CREATE SYNONYM CREATE VIEW UNLIMITED TABLESPACECREATE SESSION這個系統權限在user_sys_privs中看不到?
?
轉載于:https://www.cnblogs.com/yaoweber/p/3932977.html
總結
以上是生活随笔為你收集整理的控制用户的访问之权限、角色【weber出品必属精品】的全部內容,希望文章能夠幫你解決所遇到的問題。