Oracle数据库口令策略
Oracle口令和资源管理
1、Profiles: 概要文件,包含一些对口令和资源限制的一个命名的集合。通过CREA TE USER 或ALTER USER 命令来指定用户。它可以是enabled 或disabled。可以参考default profile(默认,资源和口令没有做任何限定)。
sql>create user test
identified by test; //用户和口令都是test
2、口令管理:Account locking >Password history >Password expiration and aging 口令生命周期和过期时间>Password verification 设定口令的复杂性(符号等)>用户
口令限制是一直保持的。使用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_A TTEMPTS 在帐号被锁之前登录尝试的失败次数,PASSWORD_LOCK_TIME 在尝试失败登录达到一定的次数后帐号被锁定的时间(单位:1天),超过这个时间将自动解锁。
sql>create profile profile1 limit
password_lock_time 1/1440
failed_login_attempts 3; //配置文件profile1已创建
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 口令的生存周期(口令经过多少天后会提示到期)/ PASSWORD_GRACE_TIME 失效后锁定,即设定几天后锁定。
sql>alter profile profile1 limit
password_life_time 2 //口令经过2天后会提示到期
password_grace_time 3; //口令到期的3天后被锁定,这3天内可以对口令做改变。
(3)保留口令历史记录:PASSWORD_REUSE_TIME 保留时间(几天)/ PASSWORD_REUSE_MAX 保留最多重用次数(几次)
注意:PASSWORD_REUSE_TIME 和PASSWORD_REUSE_MAX 是复式的,可以都指定但只有一个生效)
sql> alter profile profile1 limit
password_reuse_time 10 //口令保留10天
password_reuse_max 3; //口令最多重用3次
(4)启用口令复杂性函数:PASSWORD_VERIFY_FUNCTION(PL/SQL函数在口令被设定前做一个口令复杂性检查)
满足条件:函数必须建立在SYS 作为owner下,Boolean函数返回的值是个boolean
值。函数中三个参数必须是输入参数(用户ID,新口令,旧口令),并且是V ARCHAR2类型和30个字符。
function_name(userid_parameter IN V ARCHAR2(30),password_parameter IN V ARCHAR2(30),old_password_paramemter IN V ARCHAR2(30)) RETURN BOOLEAN
Oracle给了一个默认的口令验证函数:VERIFY_FUNCTION()
步骤:conn sys 连接> run一个脚本:utlpwdmg.sql ORACLE会自动产生一个VERIFY_FUNCTION()函数,同时修改DEFAULT profile概要文件。
要求如下:
a.口令最小长度是4个字节;
b.口令不能和用户名相同;
c.口令至少有一个字母,一个数字和一个特殊符号。
d.口令改变时新口令必须和旧口令保证有三个符号以上的差异。
sql>conn sys/admin1 as sysdba
sql>start d:\\oracle\\ora90\\rdbms\\admin\dmg.sql //函数已经创建,同时DEFAULT profile已经更新
sql>alter user kong profile default; //用户已更改为默认的口令文件
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)创建Profile:口令文件的设定
CREATE PROFILE grace_5 LIMIT
FAILED_LOGIN_A TTEMPTS 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; //配置文件已经修改。
(6)改变Profile:口令文件的设定
删除口令文件:
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的删除对当前用户session不起作用。只是在以后的session中才会有效。
3、资源的管理:session级,call级别或者两个都生效(默认default不生效)。
限制可以被定位在profiles中使用CREATE PROFILE 命令。
要使资源限制生效方法:RESOURCE_LIMIT 初始化参数(静态改变)、ALTER SYSTEM 动态改变命令
ALTER SYSTEM SET resource_limit=TRUE;
例如:并行会话数设定为2个用户(默认disabled)
sql>conn kong/kxf_001 //已连接
在另一个窗口:
sql>conn kong/kxf_001 //已连接
第三个窗口:
sql>conn kong/kxf_001 //已连接
如果想要并行会话数起作用,那么需要用到resource_limit=true;
sql>alter system set resource_limit=true;
sql>conn kong/kxf_001 //exceeded simultaneous SESSIONS_PER_USER limit 已
经超过每个用户并行session限制
【注意】如果将并行会话数设置为4,那么继续conn kong/kxf_001又可以连接了。
(1)设定资源限制在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读取多少数据块(物理和逻辑读)PRIVATE_SGA 每个用户占用多少内存区域(单位: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分钟后继续操作。。。
sql>select * from authors ;// 超出了最大的空闲时间,自动断开了连接
(2)设定资源限制CALL级别:
CPU_PER_CALL 每一个调用可以占用多少CPU时间(1/100 s)
LOGICAL_READS_PER_CALL 每一个调用可以读多少数据块(bytes)
sql>alter profile profile1 limit
cpu_per_call 1000 ; //占用10s
logical_reads_per_call 10; //每个调用只能读10块。
创建Profile做资源限定:
CREATE PROFILE developer_prof LIMIT
SESSIONS_PER_USER 2
CPU_PER_SESSION 10000
IDLE_TIME 60
CONNECT_TIME 480;
4、管理资源使用Database Resource Manager 数据库资源管理器:
提供Oracle服务器更多的控制来体现资源管理的决策:资源使用者组、资源计划、资源分配方法、资源计划调度等等信息。如果不通过图形界面完成,可以使用
DBMS_RESOURCE_MANAGER package 来创建和管理这些元素。
要求使用ADMINISTER_RESOURCE_MANAGER 权限。
sql>desc dbms_resource_manager
5、获取口令和资源限制的信息:DBA_USERS / DBA_PROFILES
sql>desc dba_users; //查询当前用户的所有信息
sql>select username,account_stauts from dba_users; //发现test用户是expire状态sql>alter user test
account lock; //此时test用户状态:expired&locked
sql>desc dba_profiles //profile、resource_name、resource_type、sql>select * from dba_profiles where profile='profile1';
(继承)limit
因篇幅问题不能全部显示,请点此查看更多更全内容