Profile是Oracle提供的一种针对用户资源使用和密码管理的策略配置。借助Profile,可以实现特定用户资源上的限制和密码管理规则的应用。在实际的应用中,Profile可以帮助我们实现很多应用层面比较困难实现的需求。
Profile概述
Profile是Oracle安全策略的一个组成部分。
默认情况下,用户连接数据库,形成会话,使用CPU资源和内存资源是没有限制的。在一些应用并发量很大,特别是多个应用部署在同一个数据库服务器上的时候,依据应用对企业重要程度的部分,CPU和内存资源的分配一定是有所侧重的。
此外,用户的密码管理,可以是一个比较复杂的工作。比如,用户锁定之后,多长时间被自动释放、密码生命周期、登录尝试次数等等。
这两个方面的问题,都可以借助Profile去解决。Profile相当于一个命名的安全策略集合,其中规定了资源使用的限制和密码使用的规则。Profile定义之后,是可以应用到每个用户上,对每个用户的安全活动进行限制。
创建Profile
借助GUI工具或者SQL,我们可以比较方便的定义一个Profile。下面语句片段是我们定义Profile的方法。
-- Create profile
create profile DEFAULT limit
sessions_per_user unlimited
cpu_per_session unlimited
cpu_per_call unlimited
connect_time unlimited
idle_time unlimited
logical_reads_per_session unlimited
logical_reads_per_call unlimited
composite_limit unlimited
private_sga unlimited
failed_login_attempts 10
password_life_time unlimited
password_reuse_time unlimited
password_reuse_max unlimited
password_lock_time unlimited
password_grace_time unlimited
password_verify_function Null;
上面代码片段是定义DEFAULT Profile的脚本。上面规定了这个profile所能够规定的各个方面。
Profile各类型限制和取值
Profile是一个规则集合,分为系统资源类和密码管理类。
其中:
类型 | 名称 | 说明 |
资源类参数 | sessions_per_user | 指定同时该用户可以有多少个session连接Oracle; |
cpu_per_user | 指定每个用户可以使用的CPU时间,指定单位为多少百分之一秒; | |
cpu_per_call | 每次调用SQL使用的CPU时间,单位为百分之一秒; | |
connect_time | 指定总的连接时间,单位为分钟; | |
idel_time | 指定在一个session中,处在inactive状态的时间间隔,单位为分钟; | |
logical_read_per_session | 设置允许每个session进行最大的读块数blocks,包括逻辑读和物理读; | |
logical_read_per_call | 设置每次SQL调用可以读取的最大数据块数; | |
private_sga | 指定每个session可以分配的最大private space,在shared pool空间;(在SGA中); 显然这要求是在共享连接模式shared server architecture下; | |
composite_limit | 指定每个session的总的资源成本。使用service unit表示出来。Oracle计算这个指标方法为:cpu_per_session + connect_time + logical_reads_per_session + private_sga; | |
密码类参数 | failed_login_attempt | 指定用户帐号错误密码登录后,多少次会被锁定;默认值为10; |
| password_life_time | 指定同一个密码可以支持使用的时间。如果设置了password_grace_time这个参数,那么在grace_time范围内没有变更密码,就会被认为过期。该参数的默认值为180天; |
| password_reuse_time / password_reuse_max | 这两个参数相互影响。password_reuse_time指定了密码不能重用之前的天数。reuse_max表示当前使用的密码重用前,必须修改过的次数; |
| password_lock_time | 在重复登录次数操作规定次数,用户被锁定之后,恢复的时间。默认为一天; |
| password_grace_time | 设置一个天数,当更换密码警报开始,登录允许后开始计时。默认为7天; |
| password_verify_function | 允许传入一个pl/sql密码复杂度验证脚本。如果使用默认或者自定义的脚本函数,指定这个函数名称; 否则设置null,表示没有验证; |
此处,对password_reuse_time和password_reuse_max参数进行下额外说明:
ü 如果两个参数都指定了整数值,用户在reuse_max次数内和reuse_time内,是不能重用现在使用的密码的;
ü 如果为两个参数中的一个设置了整数值,另外一个设置了unlimited,用户将永远不能重用密码;
ü 如果为其中一个参数设置了Default值,Oracle Profile会采用默认值。如果Default Profile没有修改,默认值为Unlimited,那么这个取值为Unlimited;
ü 如果两个参数都设置为Unlimited,Oracle会忽略这两个参数;
Unlimited和Default取值
在Profile定义和使用中,Unlimited和Default是两个常常使用的取值。
Unlimited表示不对这个资源进行限制,不使用这个规则;
Default含义表示这个Profile的该项限制规则,应用Default Profile的设置值。Defaulte Profile是一个系统预定义的Profile。
修改和删除Profile
使用drop profile和alter profile语句,可以实现删除和修改profile对象。
-- Modify profile
alter profile MONITORING_PROFILE limit
logical_reads_per_session unlimited;
drop profile MONITORING_PROFILE