oracle用戶的角色與權限管理

oracle用戶的角色與權限管理

一、權限分類:
系統權限:系統規定用戶使用數據庫的權限。(系統權限是對用戶而言)。
實體權限:某種權限用戶對其它用戶的表或視圖的存取權限。(是針對表或視圖而言的)。
二、系統權限管理:
1、系統權限分類(通過角色來進行管理):
DBA: 擁有全部特權,是系統最高權限,只有DBA纔可以創建數據庫結構。
RESOURCE:擁有Resource權限的用戶只可以創建實體,不可以創建數據庫結構。
CONNECT:擁有Connect權限的用戶只可以登錄Oracle,不可以創建實體,不可以創建數據庫結構。
對於普通用戶:授予connect, resource權限。
1.1,具有connect權限的用戶,只能夠登陸;
1.2,具有resource權限的用戶可以:
 A:create session
 B:create cluster
 C:create indextype
 D:create operator
 E:create procedure
 F:create sequence
 G:create table
 H:create trigger
 I:create type

對於DBA管理用戶:授予connect,resource, dba權限。

系統權限授權命令:【系統權限只能由DBA用戶授出:sys,system(最開始只能是這兩個用戶)】
授權命令:grant connect ,resource,dba to USER1
[普通用戶通過授權可以具有與system相同的用戶權限,但永遠不能達到與sys用戶相同的權限,system用戶的權限也可以被回收]

查看角色所擁有的權限:
select * from  role_sys_privs;
查詢結果:ROLE:角色名; PRIVILEGE:角色擁有的權限;ADMIN_OPTION:角色被授權時,是否帶有with ADMIN option。

系統權限傳遞:grant connect,resource to USER1 with admin option;

with admin option 用於系統權限授權,with grant option 用於對象授權。
給一個用戶授予系統權限帶上with admin option 時,此用戶可把此係統權限授予其他用戶或角色,但收回這個用戶的系統權限時,這個用戶已經授予其他用戶或角色的此係統權限不會因傳播無效,如授予A系統權限create session with admin option,然後A又把create session權限授予B,但管理員收回A的create session權限時,B依然擁有create session的權限,但管理員可以顯式收回B create session的權限,即直接revoke create session from B.
而with grant option用於對象授權時,被授予的用戶也可把此對象權限授予其他用戶或角色,不同的是但管理員收回用with grant option授權的用戶對象權限時,權限會因傳播而失效,如grant select on table with grant option to A,A用戶把此權限授予B,但管理員收回A的權限時,B的權限也會失效,但管理員不可以直接收回B的SELECT ON TABLE 權限。

查看用戶所屬於的角色
select * from dba_sys_privs;

查看用戶擁有的權限
select * from dba_role_privs;

刪除用戶:drop user USER1 cascade; //加上cascade則將用戶連同其創建的實體全部刪除
*:當前正連接的用戶不得刪除

系統權限回收:系統權限只能由DBA用戶回收
Revoke connect,resource from USER1;

2、實體權限分類:
 select , update , insert , alter , delete , all //all包括所有的權限;
 execute //執行存儲過程權限;

 2.1,將表TABLE上的select,update,insert權限給TEST用戶;
  grant select , update , insert on TABLE to TEST;
  查看對錶所擁有的權限;
  select * from dba_tab_privs where TABLE_NAME='TABLE'; //TABLE_NAME=‘必須大寫’
  授予用戶所有的權限;
  gramt all on TABLE to TEST;
  被賦予all的權限後,所擁有的操作
  PRIVILEGE: alter , delete , index , insert , select , update , references , on commit refresh , query rewrite , debug , flashback
  將表的操作權授予全體用戶:
  grant all on TABLE to public; //public 表示是所有的用戶,這裏的all權限不包括drop;

[實體權限數據字典]:
select owner,table_name from all_tables; //用戶可以查詢的表
select table_name from user_tables; //用戶創建的表
select grantor,table_schema,table_name,privilege from all_tab_privs; //獲取可以存取的表(被授權的)
select grantoe,owner,table_name,privilege from user_tab_privs; //授出權限的表(授出的權限)

實體權限傳遞(with grant option)
grant select,update on product to USER1 with grant option; //USER1 得到權限,並可以傳遞

實體權限收回:
Revoke select,update on product from USER1; //傳遞的權限將全部丟失

3、用戶profile文件
  Oracle系統中的profile 可以用來對用戶所能使用的數據庫資源進行限制,使用Create Profile 命令創建一個Profile,用它來實現對數據庫資源的限制使用,如果把該prifile分配給用戶,則該用戶所能使用的數據庫資源都在該prifile的限制之內。
 3.1、創建profile必須要有CREATE PROFILE 的系統權限。

 創建用戶的Profile 文件
 create profile STUDENT limit //STUDENT 爲資源文件名;
 failed_login_attempts 3 //指定鎖定用戶的登錄失敗次數;
 password_lock_time 5 //指定用戶被鎖定天數;
 password_life_time 30 //指定口令可用天數;
 select * from dba_profiles;

創建用戶:
create user USER1
identified by PASSWORD //如果密碼是數字,請用雙引號括起來
default tablespace TABLESPACE
temporary tablespace TABLESPACE
profile PROFILE
quota INTEGER/UNLIMITED on TABLESPACE;

查詢用戶缺省表空間、臨時表空間
select username,default_tablespace,temporary_tablespace from dba_users;

查詢系統資源文件名:
select * from dba_profiles;

資源文件類似表,一旦創建就會保存在數據庫中
select username,profile,default_tablespace,temporary_tablespace from dba_users;

create profile COMMON limit
failed_login_attempts 5
idle_time 5;

alter user USER1 profile COMMON;

 3.2、修改用戶:
 alter user USER1
 identified PASSWORD
 temporary tablespace TABLESPACE
 profile PROFILE
 quota INTEGER/UNLIMITED on TABLESPACE;

A、修改口令字
alter user USER1 identified by PASSWORD;
B、修改用戶缺省空間
alter user USER1 default tablespace USER1;
C、修改用戶臨時表空間
alter user USER1 temporary tablespace TEMP_DATA;
D、強制用戶修改口令字
alter user USER1 password EXPIRE;
E、將用戶加/解鎖
alter user USER1 acount lock; //加鎖
alter user USER1 acount unlock; //解鎖

3.3、監視用戶
A、查詢用戶會話信息
select username,sid,serial#,machine from v$session;
B、刪除用戶會話信息
alter system kill session 'sid,serial#';
C、查詢用戶
select user_name,sql_text from v$open_cursor;

3.4、查詢權限分配情況
 ROLE_SYS_PRIVS : 角色擁有的系統權限
 ROLE_TAB_PRIVS : 角色擁有的對象權限
 USER_TAB_PRIVS_MADE : 查詢授出去的對象權限
 USER_TAB_PRIVS_RECD : 用戶擁有的對象權限
 USER_COL_PRIVS_MADE : 用戶分配出去的列的對象權限
 USER_COL_PRIVS_RECD : 用戶擁有的關於列的對象權限
 DBA_SYS_PRIVS : 數據庫中用戶和角色擁有的系統權限
 DBA_TAB_PRIVS : 數據庫中所有的對象權限
 DBA_COL_PRIVS : 數據庫中所有的列對象權限
 DBA_ROLE_PRIVS : 數據庫中所有的用戶和角色擁有的角色

三、管理角色
1、建角色
create role ROLE1;

2、授權給角色
grant create any table,create procedure to ROLE1;

3、授予角色給用戶
grant ROLE1 to USER1;

4、查看角色所包含的權限
select * from role_sys_privs;

5、創建帶有口令的角色(在生效帶有口令的角色時必須提供口令)
create role ROLE1 identified by PASSWORD1;

6、修改角色是否需要口令
alter role ROLE1 not identified;
alter role ROLE1 identified by PASSWORD1;

7、設置當前用戶要生效的角色
(注:角色的生效是一個什麼概念呢?假設用戶a有b1,b2,b3三個角色,那麼如果b1未生效,則b1所包含的權限對於a來說是不擁有的,只有角色生效了,角色內的權限才作用於用戶,最大可生效角色數由參數MAX_ENABLED_ROLES設定;在用戶登錄後,oracle將所有 直接賦給用戶的權限和用戶默認角色中的權限賦給用戶。)
set role ROLE1; //使ROLE1生效
set role ROLE1,ROLE2 ; //使ROLE1,ROLE2 生效
set role ROLE1 identified by PASSWORD1L //使用帶有口令的ROLE1生效
set role all; //使用該用戶的所有角色生效
set role none; //設置所有角色失效
set role all except ROLE1; //除ROLE1外的該用戶的所有其他角色生效
select * from SESSION_ROLES; //查看當前用戶的生效的角色

8、修改指定用戶,設置其默認角色
alter user USER1 default role ROLE1;
alter user USER1 default role all except ROLE1;

9、刪除角色
drop role ROLE1;
角色刪除後,原來擁有該角色的用戶就不再擁有該角色了,相應的權限也就沒有了;
說明:A、無法使用 with grant option 爲角色授予對象權限
      B、可以使用 with admin option 爲角色授予系統權限,取消時不是級聯

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章