Oracle 11g用戶管理與權限分配(《Oracle從入門到精通》讀書筆記5)

先看下Oracle數據庫的安全保護是怎麼做的:

首先,用戶向DB提供身份識別信息(也就是賬號/密碼),在確定該信息是正確的前提下、DB再判斷該用戶所擁有的權限,給予其相應的操作權限。

其次,Oracle採用了傳統的權限->角色->用戶模式來給最終用戶授予權限,也就是先把權限集定義爲一個角色,再把角色賦給用戶;這樣既方便了維護,也一定程度上提高了安全性。Oracle也允許直接把某些權限賦給最終用戶,但除非是測試環境,否則不推薦這樣做。

這裏的權限,大體可以分爲系統權限(如connect、ALTER SYSTEM等)和對象權限(也就是具體操作表、視圖的權限,如select,update等)。


一、角色管理

1. 角色相關的數據字典:

數據庫列上的所有權限:DBA_COL_PRIVS

數據庫對象上的所有權限:DBA_TAB_PRIVS

已經授予用戶或其他角色的角色:DBA_ROLE_PRIVS

已授予用戶或角色的系統權限,或者查看某個角色包含哪些權限:DBA_SYS_PRIVS

系統特權數據目錄:system_privilege_map

查看當前連接用戶的所有有效角色:

select * from session_roles;

查看某個角色包含哪些權限:

select * from dba_sys_privs where grantee = 'ROLE_NAME';--ROLE_NAME要大寫


2. Oracle 11g的預置角色:

(1)connect包含的權限:

alter session,create cluster,create database link,create sequence,create session,create synonym,create table,create view

(2)resource包含的權限:

create cluster,create indextype,create operator,create procedure,create sequence,create table,create trigger,create type

(3)DBA包含所有權限

(4)EXP_FULL_DATABASE包含的權限:

select any table,backup any table,execute any procedure,execute any type,administer resource manager

(5)IMP_FULL_DATABASE包含的權限:

execute_catalog_role,select_catalog_role

此外還有很多,可以通過查詢DBA_ROLES知道該版本的Oracle中包含哪些預置角色


3. 創建自定義角色和授權

(1)創建角色:

create role role_name [ not identified | identified by [ password | exeternally  | globally] ]

·identified by password:使用該角色時需提供密碼驗證

·identified by exeternally:OS驗證

·identified by globally:Oracle安全域中心服務器驗證

例:

create role designer identified by exeternally;

(2)將權限賦給角色:

grant right1,right2,... to role_name;

例:

grant create view,create table to designer;


4. 管理角色

(1)取消角色使用時的密碼:

alter role role_name not identified;

修改角色密碼:

alter role role_name identified by new_password;

(2)角色的生效:

假如某個用戶同時具備了若干個角色r1,r2,r3.那麼如果r1不生效的話,則該用戶同樣無法使用r1包含的權限。

最大可生效的角色數有MAX_ENABLED_ROLES決定:

show parameter MAX_ENABLED_ROLES;

設置角色生效並帶有密碼:

set role role_name identified by password;

(3)修改角色中的權限:

繼續像已存在的角色添加新的權限:

grant new_right1,new_right2,... to exist_rolename;

回收某角色中的權限:

revoke exist_r1,exist_r2,... on schema.object from role_name;

(4)設置當前用戶要生效的角色:假如不使用戶具有的角色生效,那麼用戶同樣不能使用這些權限

set role role_name [identified by passwd];

(5)刪除角色:

drop role role_name;


二、用戶管理

1. 創建用戶:

create user user_name identified by passwd--用戶名和密碼儘量用字母數字和#_號,使用其他符號的話,在寫sql腳本時容易和shell、C++、java等語法衝突

[or identified exeternally]

[or identified globally as 'CN=user']

[default tablespace tablespace_name]] --指定該用戶所在的默認表空間

[temporary tablespace tablespace_name] --指定該用戶使用的臨時表空間

[quota [integer k[m] [unlimited]  on tablespace_1]--指定在tablespace_1上允許佔用的最大空間

[,quota [integer k[m] [unlimited] ] on tablespace_2]--以此類推

...

[profiles profile_name] --該用戶使用的資源文件的名稱,不指定的話默認爲default,一般默認即可

[account lock or  account unlock] --該用戶是否加鎖,不常用,一般默認不加;如果想用這個功能,需要事先在PROFILE文件裏設置該功能,詳見下文

例:

create user xk identified by xk
default tablespace tb_3
temporary tablespace TEMP_TEST
quota 10m on tb_3;

*注意,如果不適用quota語句,那麼 該用戶在此表空間上的配額爲0,雖然它是可選的...

2. 修改用戶:

(1)修改磁盤限額:

當oracle報錯ORA-01536時,表示該用戶在磁盤上的限額已滿,需要擴充

alter user user_name quota 20m on tablespace_name;

(2)修改用戶密碼:

alter user user_name identified by 123456;

(3)解鎖用戶:

alter user ORACLE_OCM account unlock;

(4)刪除用戶:

drop user user_name cascade;--將用戶下面的對象也一併刪除

(5)給用戶授權:與給角色授權類似

grant role_name, right_name to user_name [with admin option];

*with admin option:表示被授權的用戶A有權把自己得到的角色二次授權給自己新建的用戶B(如果它可以新建用戶的話),即使A的某項權限被收回,B仍然可以使用這種權限

(6)回收用戶權限:與回收角色權限類似

revoke role_name, right_name from user_name;


三、profile(資源配置文件,又叫用戶配置文件)管理

profile文件,可以理解成是密碼限制、資源限制等規則的集合;管理員可以通過它來爲用戶配置解鎖/鎖定條件、設置密碼過期時間等安全策略,它是Oracle安全策略的重要組成部分。

1. 顯示PROFILE信息:

顯示資源配置文件的資源配置信息:

select * from dba_profile where profile='(select profile from dba_users where username='user_name')';

如果查不出來,表示沒有爲該用戶配置安全策略

2. 使用PROFILE管理密碼:

(1)賬戶鎖定:

--設置一個連續登陸失敗5次、將被鎖定7天的配置名lock_account(也就是profile名,地位相當於default)

create profile lock_account limit
failed_login_attempts 5
password_lock_time 7;

--將這個配置分配給某個用戶

alter user user_name profile lock_account;

(2)密碼過期時間:

create profile password_lift_time limit
password_life_time 30         --密碼有效期爲30天
password_grace_time 3;           --表示到期前3天提醒
alter user user_name profile password_lift_time;

(3)密碼歷史:有兩個參數可以實現

PASSWORD_REUSE_TIME:指定密碼可重用的時間,單位爲天

PASSWORD_REUSE_MAX:舊口令在可以重用前、必須改變的次數

如:超過一分鐘,並且密碼變更次數超過三後,密碼可以重用
CREATE PROFILE sec_profile LIMIT
PASSWORD_REUSE_TIME 1/1440
PASSWORD_REUSE_MAX  3
;

如:PASSWORD_REUSE_TIME設置爲unlimited,不做限制,PASSWORD_REUSE_MAX爲3
ALTER PROFILE sec_profile LIMIT
PASSWORD_REUSE_TIME unlimited
PASSWORD_REUSE_MAX 3;

(4)密碼複雜度:PASSWORD_VERIFY_FUNCTION

這裏需要用到驗證碼複雜度的規則函數,Oracle 11g默認的規則校驗函數(verify_function_11G)在下面位置:

app\Administrator\product\11.2.0\client_1\RDBMS\ADMIN\utlpwdmg.sql

我們只需要把這個函數配給PASSWORD_VERIFY_FUNCTION即可

ALTER PROFILEprofile_name LIMIT

PASSWORD_VERIFY_FUNCTION verify_function_11G;

當然,我們也可以自己改寫這個函數。(但是記得備份文件/(ㄒoㄒ)/~~)

3. 使用PROFILE管理資源

首先要將下面參數置爲true

show parameter resource_limit;

alter system set resource_limit=true;

創建和修改此類 profile文件的語法和上面完全一致

(1)某個用戶可以同時連接的會話數:

SESSION_PER_USER

(2)某用戶一次可以使用的CPU時間,單位是1/100秒:

CPU_PER_SESSION

(3)每條sql語句能使用的CPU時間,單位是1/100秒:

CPU_PER_CALL

(4)限制每個回話所能讀取的數據塊數量,單位爲“個”

LOGICAL_READS_PER_SESSION

(5)限制每個用戶所能連接到數據庫的最長時間

CONNECT_TIME

(6)限制每個用戶回話所能連接到數據庫的最長時間

IDLE_TIME


4. 刪除profile文件

drop profile profile_name cascade;


(第十二章完)

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