口令和資源管理
1、Profiles: 概要文件,包含一些對口令和資源限制的一個命名的集合。通過CREATE USER 或 ALTER USER 命令來指定用戶。它可以是enabled 或 disabled??梢詤⒖糳efault profile(默認(rèn),資源和口令沒有做任何限定)。
sql>create user test
identified by test; //用戶和口令都是test
2、口令管理:Account locking >Password history >Password expiration and aging 口令生命周期和過期時間>Password verification 設(shè)定口令的復(fù)雜性(符號等)>用戶
口令限制是一直保持的。使用 CREATE USER or Lock,unlock ,expire accounts 這些命令
sql> alter user test account lock; //賬號鎖定
sql>alter user test account unlock; //賬號解鎖
sql>alter user test password expire; //口令到期
(1)口令賬號鎖定:FAILED_LOGIN_ATTEMPTS 在賬號被鎖之前登錄嘗試的失敗次數(shù) ,PASSWORD_LOCK_TIME 在嘗試失敗登錄達(dá)到一定的次數(shù)后賬號被鎖定的時間(單位:1天),超過這個時間將自動解鎖。
sql>create profile profile1 limit
password_lock_time 1/1440
failed_login_attempts 3; //配置文件profile1已創(chuàng)建
sql>alter user kong
profile profile1; //將用戶kong使用配置文件profile1
sql>conn kong/kkk //ERROR
sql>conn kong/kxf //ERROR
sql>conn kong/kkk //ERROR
sql>conn kong/111 //the account is locked 賬號已被鎖定(登錄失敗3次后賬號自動鎖定)
sql>alter profile profile1 limit
password_lock_time 1/1440; //表示1分鐘后鎖定的賬號將自動解鎖(1/60*1/24)
sql>conn kong/kxf;
(2)口令生存周期和失效后允許改變的時間:PASSWORD_LIFE_TIME 口令的生存周期(口令經(jīng)過多少天后會提示到期)/ PASSWORD_GRACE_TIME 失效后鎖定,即設(shè)定幾天后鎖定。
sql>alter profile profile1 limit
password_life_time 2 //口令經(jīng)過2天后會提示到期
password_grace_time 3; //口令到期的3天后被鎖定,這3天內(nèi)可以對口令做改變。
(3)保留口令歷史記錄: PASSWORD_REUSE_TIME 保留時間(幾天)/ PASSWORD_REUSE_MAX 保留最多重用次數(shù)(幾次)
注意:PASSWORD_REUSE_TIME 和PASSWORD_REUSE_MAX 是復(fù)式的,可以都指定但只有一個生效)
sql> alter profile profile1 limit
password_reuse_time 10 //口令保留10天
password_reuse_max 3; //口令最多重用3次
(4)啟用口令復(fù)雜性函數(shù):PASSWORD_VERIFY_FUNCTION(PL/SQL函數(shù)在口令被設(shè)定前做一個口令復(fù)雜性檢查)
滿足條件:函數(shù)必須建立在SYS 作為owner下,Boolean函數(shù)返回的值是個boolean值。函數(shù)中三個參數(shù)必須是輸入?yún)?shù)(用戶ID,新口令,舊口令),并且是VARCHAR2類型和30個字符。
function_name(userid_parameter IN VARCHAR2(30),password_parameter IN VARCHAR2(30),old_password_paramemter IN VARCHAR2(30)) RETURN BOOLEAN
Oracle給了一個默認(rèn)的口令驗證函數(shù):VERIFY_FUNCTION()
步驟:conn sys 連接 > run一個腳本:utlpwdmg.sql ORACLE會自動產(chǎn)生一個VERIFY_FUNCTION()函數(shù),同時修改DEFAULT profile概要文件。
要求如下:
a.口令最小長度是4個字節(jié);
b.口令不能和用戶名相同;
c.口令至少有一個字母,一個數(shù)字和一個特殊符號。
d.口令改變時新口令必須和舊口令保證有三個符號以上的差異。
sql>conn sys/admin1 as sysdba
sql>start d:\oracle\ora90\rdbms\admin\utlpwdmg.sql //函數(shù)已經(jīng)創(chuàng)建,同時DEFAULT profile已經(jīng)更新
sql>alter user kong profile default; //用戶已更改為默認(rèn)的口令文件
sql>alter user kong identified by kong_002; //口令已修改,新口令不能和舊口令相同
sql>alter user kong identified by kxf_001; //重新改回kxf_001.
另一個窗口:
sql>conn kong/kxf_001
sql>password //修改新口令:kong_002
(5)創(chuàng)建Profile:口令文件的設(shè)定
CREATE PROFILE grace_5 LIMIT
FAILED_LOGIN_ATTEMPTS 3
PASSWORD_LOCK_TIME UNLIMITED
PASSWORD_LIFE_TIME 30
PASSWORD_REISE_TIME 30
PASSWORD_VERIFY_FUNCTION verify_function
PASSWORD_GRACE_TIME 5;
sql>alter profile profile1 limit
password_verify_function verify_function; //配置文件已經(jīng)修改。
(6)改變Profile:口令文件的設(shè)定
刪除口令文件:
DROP PROFILE developer_prof;
DROP PROFILE developer_prof CASCADE;
sql>alter user kong
profile profile1;
sql>drop profile profile1; //配置文件profile1指定了用戶,不能沒有casecade而刪除
sql>drop profile profile1
cascade; //profile的刪除對當(dāng)前用戶session不起作用。只是在以后的session中才會有效。
3、資源的管理:session級,call級別或者兩個都生效(默認(rèn)default不生效)。
限制可以被定位在profiles中使用CREATE PROFILE 命令。
要使資源限制生效方法:RESOURCE_LIMIT 初始化參數(shù)(靜態(tài)改變)、ALTER SYSTEM 動態(tài)改變命令
ALTER SYSTEM SET resource_limit=TRUE;
例如:并行會話數(shù) 設(shè)定為2個用戶 (默認(rèn)disabled)
sql>conn kong/kxf_001 //已連接
在另一個窗口:
sql>conn kong/kxf_001 //已連接
第三個窗口:
sql>conn kong/kxf_001 //已連接
如果想要并行會話數(shù)起作用,那么需要用到resource_limit=true;
sql>alter system set resource_limit=true;
sql>conn kong/kxf_001 //exceeded simultaneous SESSIONS_PER_USER limit 已經(jīng)超過每個用戶并行session限制
【注意】如果將并行會話數(shù)設(shè)置為4,那么繼續(xù)conn kong/kxf_001又可以連接了。
(1)設(shè)定資源限制在Session級別:
CPU_PER_SESSION CPU/會話——每個session可以指定多少CPU (單位:1/100 s)
SESSIONS_PER_USER 每個用戶可以開多少session
CONNECT_TIME 連接時間——連接多久退出去 (單位:min)
IDLE_TIME 空閑時間——用戶非活動檢測時間,多長時間沒有做動作就自動斷開(單位:min)
LOGICAL_READS_PER_SESSION 每個Session讀取多少數(shù)據(jù)塊(物理和邏輯讀)
PRIVATE_SGA 每個用戶占用多少內(nèi)存區(qū)域(單位:bytes)
sql>create profile profile1 limit
cpu_per_session 10000 ; //100秒
connect_time 60; //連接時間60分鐘
idle_time 5; //指定空閑時間為5分鐘
sql>alter user kong
profile profile1;
另一個窗口:
sql>conn kong/kxf_001
sql>select * from authors;
sql>set wrap off
sql>set linesize 1000
sql>run
等待5分鐘后繼續(xù)操作。。。
sql>select * from authors ;// 超出了最大的空閑時間,自動斷開了連接
(2)設(shè)定資源限制CALL級別:
CPU_PER_CALL 每一個調(diào)用可以占用多少CPU時間(1/100 s)
LOGICAL_READS_PER_CALL 每一個調(diào)用可以讀多少數(shù)據(jù)塊(bytes)
sql>alter profile profile1 limit
cpu_per_call 1000 ; //占用10s
logical_reads_per_call 10; //每個調(diào)用只能讀10塊。
創(chuàng)建Profile做資源限定:
CREATE PROFILE developer_prof LIMIT
SESSIONS_PER_USER 2
CPU_PER_SESSION 10000
IDLE_TIME 60
CONNECT_TIME 480;
4、管理資源使用Database Resource Manager 數(shù)據(jù)庫資源管理器:
提供Oracle服務(wù)器更多的控制來體現(xiàn)資源管理的決策:資源使用者組、資源計劃、資源分配方法、資源計劃調(diào)度等等信息。如果不通過圖形界面完成,可以使用DBMS_RESOURCE_MANAGER package 來創(chuàng)建和管理這些元素。
要求使用ADMINISTER_RESOURCE_MANAGER 權(quán)限。
sql>desc dbms_resource_manager
5、獲取口令和資源限制的信息:DBA_USERS / DBA_PROFILES
sql>desc dba_users; //查詢當(dāng)前用戶的所有信息
sql>select username,account_stauts from dba_users; //發(fā)現(xiàn)test用戶是expire狀態(tài)
sql>alter user test
account lock; //此時test用戶狀態(tài):expired&locked
sql>desc dba_profiles //profile、resource_name、resource_type、limit(繼承)
sql>select * from dba_profiles where profile='profile1';