概要文件的作用
概要文件是口令限制和资源限制的命名集合,是 Oracle安全策略的重要组成部分,利用概要文件可以对数据库用户进行口令管理和资源限制。例如使用概要文可以指定口令有效期、口令校验函数、用户连接时间以及最大空闲时间等。概要文件具有以下一些作用:
• 限制用户执行消耗资源过度的SQL操作。
• 自动断开空闲会话。
• 在大而复杂的多用户数据库系统中合理分配资源。
• 控制用户口令的使用。

在建立数据库时, Oracle 会自动建立名称为 DEFAULT的默认概要文件,初始的DEFAULT概要文件的所有口令及资源限制选项值均为UNLIMITED,即未进行任何口令及资源限制。 当建立用户时, 如果不指定概要文件, 则Oracle会将DEFAULT概要文件分配给该用户。根据用户所承担任务的不同, DBA应该建立不同的概要文件,并将概要文件分配给相应用户。一个用户只能分配一个概要文件, 一个概要文件可以同时包含口令限制和资源限制。

查看default概要文件的信息

SQL> select PROFILE,RESOURCE_NAME,RESOURCE_TYPE,LIMIT from sys.dba_profiles where PROFILE='DEFAULT';

PROFILE          RESOURCE_NAME      RESOURCE_TYPE        LIMIT
-------------------- -------------------- -------------------- --------------------
DEFAULT          COMPOSITE_LIMIT      KERNEL           UNLIMITED
DEFAULT          SESSIONS_PER_USER      KERNEL           UNLIMITED
DEFAULT          CPU_PER_SESSION      KERNEL           UNLIMITED
DEFAULT          CPU_PER_CALL      KERNEL           UNLIMITED
DEFAULT          LOGICAL_READS_PER_SE KERNEL           UNLIMITED
             SSION

DEFAULT          LOGICAL_READS_PER_CA KERNEL           UNLIMITED
             LL

DEFAULT          IDLE_TIME          KERNEL           UNLIMITED

PROFILE          RESOURCE_NAME      RESOURCE_TYPE        LIMIT
-------------------- -------------------- -------------------- --------------------
DEFAULT          CONNECT_TIME      KERNEL           UNLIMITED
DEFAULT          PRIVATE_SGA      KERNEL           UNLIMITED
DEFAULT          FAILED_LOGIN_ATTEMPT PASSWORD           10
             S

DEFAULT          PASSWORD_LIFE_TIME   PASSWORD           180
DEFAULT          PASSWORD_REUSE_TIME  PASSWORD           UNLIMITED
DEFAULT          PASSWORD_REUSE_MAX   PASSWORD           UNLIMITED
DEFAULT          PASSWORD_VERIFY_FUNC PASSWORD           NULL
             TION

PROFILE          RESOURCE_NAME      RESOURCE_TYPE        LIMIT
-------------------- -------------------- -------------------- --------------------
DEFAULT          PASSWORD_LOCK_TIME   PASSWORD           2
DEFAULT          PASSWORD_GRACE_TIME  PASSWORD           7

16 rows selected.

 

修改profile文件里面的内容
SQL> alter profile default limit IDLE_TIME 10;

Profile altered.

 

概要文件内容
概要文件内容包括口令和资源的限制,下面分别介绍这两部分的有关参数。

 口令策略参数
口令策略参数可以实现帐户锁定、口令的过期以及口令的复杂度等策略, 在概要文件中
的口令参数可以有以下几个:
• FAILED_LOGIN_ATTEMPTS: 该参数指定允许的输入错误口令的次数, 超过该次
数后用户帐户被自动锁定。
• PASSWORD_LOCK_TIME:用于指定指定账户被锁定的天数(单位:天)。
• PASSWORD_LIFE_TIME: 指定口令的有效期(单位: 天)。 如果在达到有效期前用
户还没有更换口令,它的口令将失效,这时必须由DBA为它重新设置新的口令。
• PASSWORD_GRACE_TIME:用于指定口令失效的宽限期(单位:天)。

• PASSWORD_REUSE_TIME: 指定能够重复使用一个口令前必须经过的时间(单位:
天)。
• PASSWORD_REUSE_MAX: 用于指定在重复使用口令之前必须对口令进行修改的
次数。 PASSWORD_REUSE_TIME 和PASSWORD_REUSE_MAX两个参数只能设
置一个,另一个必须为UNLIMITED。
• PASSWORD_VERIFY_FUNCTION: 指定验证口令复杂度的函数。 Oracle提供了一
个默认的口令校验函数, 这可以通过运行脚本utlpwdmg.sql 来建立该函数, 脚本保
存在ORACLE_HOME\rdbms\admin目录中。DBA 也可以通过修改脚本来实现自己
的口令校验函数。 

 

资源限制参数
利用概要文件,可以对以下系统资源进行限制。
• CPU时间
• 逻辑读
• 用户的并发会话数
• 空闲时间
• 连接时间
• 私有SGA 区
对这些资源的限制是通过在概要文件中设置参数来实现的,参数的值可以是一个整数,
也可以是UNLIMITED( 即不受限制), 还可以是DEFAULT( 使用DEFAULT概要文件中的
参数设置)。下面分别介绍有关参数:
• CPU_PER_SESSION:限制每个会话所能使用的CPU时间。参数值是一个整数,
单位是百分之一秒。
• SESSIONS_PER_USER:限制每个用户所允许建立的最大并发会话数。
• CONNECT_TIME: 限制每个会话能连接到数据库的最长时间, 超过这个时间会话将自动断开。参数值是一个整数,单位是分钟。
• IDLE_TIME:限制每个会话所允许的最长连续空闲时间,超过这个时间会话将自动断开。参数值是一个整数,单位是分钟。
• LOGICAL_READS_PER_SESSION:限制每个会话所能读取的数据块数目。
• PRIVATE_SGA:每个会话分配的私有SGA 区大小(以字节为单位)。该参数只对
共享服务器模式有效。 

• CPU_PER_CALL:用于指定每条SQL 语句可占用的最大CPU时间,单位是百分
之一秒。
• LOGICAL_READS_PER_CALL:用于指定每条SQL 语句最多所能读取的数据块数
目。

使用概要文件管理口令
Oracle数据库中不同用户账户具有不同的口令,如何防止其他人窃取账户密码是 DBA要重点关切的问题。 为了加强用户账户的安全性, Oracle提供了概要文件来管理口令, 概要文件管理口令有锁定账户、 终止口令、 口令历史以及口令校验等四种安全保护方式。 大家需要注意,前面介绍的概要文件中共包含了7个口令管理选项, 如果仅指定某个或某几个选项,那么其他选项将自动使用DEFAULT概要文件的相应选项值。使用概要文件管理口令主要步骤是先创建概要文件, 然后设置相关口令参数, 最后把概要文件分配给用户。  建立概要文件是使用CREATE PROFILE 命令来完成的, 一般情况下建立概要文件是由DBA来完成的, 如果要以其他用户身份建立概要文件, 则要求该用户必须具有CREATEPROFILE 系统权限。
锁定帐户
如果用户在指定的次数内尝试登录系统失败,系统会在设置的持续时间内锁定帐户。
• FAILED_LOGIN_ATTEMPTS 参数指定在锁定帐户前尝试登录失败的次数。
• PASSWORD_LOCK_TIME 参数指定在经历指定的尝试登录失败次数后锁定帐户的天数。
如果建立PROFILE 时没有提供PASSWORD_LOCK_TIME选项,将自动使用默认值(UNLIMITED),在这种情况下,需要DBA 手工解锁通过使用概要文件,可以限制登录失败次数,如果连续登录的失败次数超出一定范围,那么Oracle会自动锁定账户。
【实例16-1】为了加强devp用户的口令安全,要限制其登录失败次数为3。
1)以管理员身份登录
SQL>CONNECT/ ASSYSDBA
已连接。
2)创建概要文件,设定相关参数
SQL>CREATE PROFILE devp_lock LIMIT
FAILED_LOGIN_ATTEMPTS 3;
配置文件已创建
3) 分配概要文件给用户devp,这既可以在建立用户时使用PROFILE 子句,也可以在
建立用户之后使用ALTERUSER 语句修改

SQL>ALTER USER devp PROFILE devp_lock;
用户已更改。 

当将概要文件分配给devp用户之后, 如果以devp连接到数据库时, 连续登录失败
次数达到三次,那么系统会自动锁定该用户账户。此时,即使为用户 devp提供了正确的口
令,也将无法连接到数据库,并显示错误信息。例如:
SQL>connect devp
请输入口令:
ERROR:
ORA-28000:the account is locked 

终止口令
使用户口令具有生存期,口令在此生存期之后会失效,而且可能已更改。
• PASSWORD_LIFE_TIME 参数指定口令的生存期 ( 以天为单位),此时间之后,
口令会失效。
• PASSWORD_GRACE_TIME 参数指定口令失效后首次成功登录时用于更改
口令的宽限期(以天为单位)。
注: 通过使口令失效和锁定SYS、 SYSMAN 和DBSNMP 帐户, 可避免出现Enterprise
Manager 不正常运行的情况。应用程序必须捕获“口令到期”警告消息并处理口令更
改;否则,宽限期一到期,会在原因不明的情况下锁定用户。
【实例16-2】强制用户devp每隔10天修改其自身口令,并设置两天宽限期。
1)以管理员身份登录
SQL>CONNECT/ AS SYSDBA
已连接。
2)创建概要文件,设定相关参数
SQL>CREATE PROFILE devp_life LIMIT
PASSWORD_LIFE_TIME 10
PASSWORD_GRACE_TIME 2;
配置文件已创建
3) 分配概要文件给用户devp
SQL>ALTER USER devp PROFILE devp_life;
用户已更改。
当将概要文件分配给用户devp之后,第10天登录会显示警告信息:
SQL>connect devp/development
ERROR:
ORA_28002: the password will expire within 2 days
已连接。
如果第10天未改变口令, 那么第11天登录时仍然会显示类似警告信息。但用户如果第11天仍然未改变口令,那么第12天登录时系统会强制你改变口令,并显示如下信息:
SQL>connect devp/development 

RROR:
ORA-28001:thepasswordhasexpired
更改devp的口令
新口令:
重新键入新口令:
口令已更改
已连接 

 

【实例16-3】密码180天过期设置

查询当前几天过期

select * from dba_profiles where profile='DEFAULT' and resource_name='PASSWORD_LIFE_TIME';

如果是180,不是UNLIMITED,就修改:

Alter PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;

 

使用概要文件管理资源 

概要文件不仅可用于管理用户口令, 也可用于限制用户的资源占用。概要文件既可以限制整个会话的资源占用, 也可以限制调用级(SQL语句)的资源占用。 但大家需要注意, 如果要使用概要文件管理资源,则必须要激活资源限制功能,这可以通过设置初始化参 数RESOURCE_LIMIT为TRUE做到:ALTER SYSTEMSET RESOURCE_LIMIT=TRUE;
使用概要文件管理资源的步骤同管理口令的步骤一样, 也是先创建概要文件, 然后设置相关资源参数,最后把概要文件分配给用户。

 CREATEPROFILE"TEMPPROFILE"
/*【一般信息】选项卡对应的配置参数*/
LIMITCPU_PER_SESSION1000 //CPU会话
CPU_PER_CALL1000 //CPU调用
CONNECT_TIME30 //连接时间
IDLE_TIMEDEFAULT //空闲时间
SESSIONS_PER_USER10 //并行会话数
LOGICAL_READS_PER_SESSION1000//读取数/会话
LOGICAL_READS_PER_CALL1000//读取数/调用
PRIVATE_SGA16K //专用SGA
COMPOSITE_LIMIT1000000 //组合限制
/*【口令】选项卡对应的配置参数*/
FAILED_LOGIN_ATTEMPTS3 //允许输入的错误口令的次数
PASSWord_LOCK_TIME5 //输入错误口令而被锁定的天数
PASSWORD_GRACE_TIME60 //口令过期时间天数
PASSWORD_LIFE_TIME30 //
PASSWORD_REUSE_MAX
DEFAULTPASSWORD_REUSE_TIME3 0
PASSWORD_VERIFY_FUNCTIONDEFAULTV//验证用户口令复杂度的函数 

限制会话资源
当用户连接到数据库时, Oracle 将创建一个会话( session)。 每个会话都将消耗 Oracle
所在计算机的 CPU 时间及内存。用户可以在会话级( session level)设置多种资源限制( resourcelimit)。如果用户超过了某一会话级资源限制, Oracle 将终止( 回滚) 当前执行的语句, 并通知用户此会话超出资源限制。此时, 当前会话内已经执行的语句不受资源限制的影响, 而用户则只能执行 COMMIT, ROLLBACK, 或断开连接( disconnect)( 如断开连接, 当前事务将被提交)。用户的其他所有操作都将导致报错。在事务被提交或回滚后,用户在当前会话内也不能执行其他任何操作。
【实例16-5】数据库最多允许两个开发人员以devp用户登录进行应用开发,每个会话
连接时间不能超过30min,会话空闲时间不能超过10min。
1)以管理员身份登录
SQL>CONNECT/ ASSYSDBA
已连接。
2)创建概要文件,设定参数
SQL>CREATE PROFILE devp_session LIMIT
CPU_PER_SESSION 5000
SESSIONS_PER_USER 2
CONNECT_TIME 30
IDLE_TIME 10;
配置文件已创建
3) 分配概要文件给用户devp 

SQL>ALTER USER devp PROFILE devp_session;
用户已更改。
因为在建立概要文件时指定SESSION_PER_USER选项为2, 即允许用户最多可以同时建立两个会话,所以如果用户devp的并发会话个数达到两个,那么当建立第三个会话时则会显示如下错误信息:
SQL>CONNECT devp/development
ERROR:
ORA-02391: exceeded simultaneous SESSIONS_PER_USER limit
因为 IDLE_TIME选项被设置为 10,所以如果会话空闲时间超过 10min,那么 Oracle会自动断开会话。
管理员可以限制用户并发会话数( concurrent sessions for each user)。 每个用户的并发会话数不能超过预设值。管理员可以限制一个会话的空闲时间( idle time)。 如果会话内两次 Oracle 调用间的间隔时间达到了限制值,当前事务将被回滚,会话将被终止( aborted),会话所占用的资源将被系统回收。 下次会话将得到报错信息, 提示用户已经终止了与实例的连接。 此限制的设置单位为分钟。
当会话由于超出空闲时间限制而被终止之后,进程监视器( process monitor, PMON)
后台进程将对被终止的会话进行清理。 在 PMON 完成此过程前, 统计用户及会话资源使用时仍将包含被终止的会话。
管理员可以限制每个会话的连接持续时间。如果会话持续连接时间超出限制值, 当前事务将被回滚, 会话将被移除( dropped), 会话所占用的资源将被系统回收。 此限制的设置单位为分钟。
Oracle 不会持续不断地监控会话的空闲时间及连接时间, 因为这样做将降低系统性能。Oracle 的做法是每隔数分钟检查一次。因此,在 Oracle 依据资源限制终止会话前,会话有可能已经略微超出了限制时间(例如,超出 5 分钟)。 

限制调用资源
SQL 语句每次运行时, Oracle 都将执行一系列操作来处理此语句。在处理过程中,不同的执行阶段需要向数据库发起不同的调用。为了防止某个调用过度地使用系统资源,Oracle 允许管理员在调用级( calllevel)设定多种资源限制( resourcelimit)。
如果用户超过了调用级资源限制, Oracle 将停止执行语句,并进行回滚,之后向用户报错。此时,当前会话内已经执行的语句不受资源限制的影响,用户会话也将保持连接状态。
当 Oracle 执行 SQL 语句或用户的其他各类调用( call)时,系统需要一定的 CPU 时间来处理此调用。 普通的调用所需的 CPU 时间较少。 但是需要处理大量数据的语句, 或失控的查询 ( runawayquery)可能占用大量的 CPU 时间, 这减少了其他处理任务可用的 CPU时间。
为了防止 CPU 时间被不受控地占用,管理员可以限制会话内每个调用使用的 CPU 时间, 以及会话中所有 Oracle 调用的 CPU 时间之和。设置及衡量调用或会话可使用的 CPU 

时间的单位为百分之一秒。
【实例16-6】限制用户devp的调用级资源。
1)以管理员身份登录
SQL>CONNECT/ AS SYSDBA
已连接。
2)创建概要文件,设定参数
SQL>CREATE PROFILE devp_call LIMIT
CPU_PER_CALL200
LOGICAL_READS_PER_CALL 3;
配置文件已创建
3) 分配概要文件给用户devp
SQL>ALTER USER devp PROFILE devp_call;
用户已更改。
因为在建立概要文件devp_call时指定了LOGICAL_READS_PER_CALL选项为3,所
以如果执行单条SQL语句访问的数据块总数超过3,则会显示如下错误信息:
SQL>CONNECT devp/development
已连接。
SQL>select * from scott.emp;
select * from scott.emp
*
ERROR 位于第 1 行:
ORA-02395: 超出 IO 使用的调用限制
1.1.7.3.3其他资源
1) 逻辑读取
输入/输出 ( Input/output, I/O)是数据库系统中开销最大的操作。I/O 操作密集的 SQL 语句可能会占用大量内存及硬盘,并与其他需要同样资源的数据库操作产生竞争。
为了防止 I/O 被独占, Oracle 可以限制调用及会话的逻辑数据块读取 ( logicaldatablock
read)。逻辑数据块读取包含从内存及磁盘读取数据。设置及衡量调用或会话可使用的逻辑
读取的单位为数据块数量。
LOGICAL_READS_PER_SESSON:用于指定会话的最大逻辑读取次数.
LOGICAL_READS_PER_CALL:用于限制每次调用的最大逻辑I/O次数.
2) CPU
可以每个会话或每个调用为基础限制CPU 资源。
“CPU/会话”限制为1,000表示:
当使用此概要文件的任一会话占用10 秒以上的CPU 时间 ( CPU 时间限制以百分之一秒为单位)时,该会话就会收到错误并被注销:
ORA-02392:exceeded session limiton CPU usage,youare 

beingloggedoff
每个调用限制的作用是相同的, 但是它不是限制用户的整个会话, 而是防止任一命令占
用过多的CPU。如果“CPU/调用”受到限制,而且用户超出了限制,命令就会中止,用户还
会收到错误消息,例如:
ORA-02393:exceededcalllimitonCPUusage
CPU_PER_SESSION:用于指定每个会话可以占用的最大CPU时间.
CPU_PER_CALL:限制每次调用(解析,执行或提取数据)可占用的最大CPU时间(单位:百
分之一秒)
3) 网络/内存:每个数据库会话都会占用系统内存资源和网络资源(如会话来自服务
器的非本地用户)。可以指定以下参数:
- 连接时间:指示用户在自动注销前可以保持连接的分钟数
- 闲置时间:指示用户会话在自动注销前可以保持闲置的分钟数。只会计算服务
器进程的闲置时间。闲置时间中不考虑应用程序活动。 IDLE_TIME 限制不受
长时间运行查询和其它操作的影响。
- 并行会话:指示使用数据库用户帐户可以创建多少并行会话
- 专用SGA:限制系统全局区域(SGA) 中执行排序、合并位图等操作占用的空间。
此限制仅在会话使用共享服务器时才有效。(在“配置OracleNetwork 环境”
一课中会讨论共享服务器)。
PRIVATE_SGA:用于指定会话在共享池中可以分配的最大总计私有空间.需要注意,该选
项只使用与共享服务器模式.
COMPOSITE_LIMIT:用于指定会话的总计资源消耗(单位:服务单元).oracle会根据
CPU_PER_SESSION,CONNECT_TIME,LOGICAL_READS_PER_SESSION以及
PRIVATE_SGA的求权结果取得总计服务单元.
SESSIONS_PER_USER:用于指定每个用户的最大并发会话个数.
CONNECT_TIME:用于指定会话的最大连接时间.
IDLE_TIME:用于指定会话的最大空闲时间.
通过概要文件还可提供组合限制。组合限制以“CPU/会话”、 “读取/会话”、 “连接时
间”和“专用SGA”的加权组合为基础。
下面以限制帐户DEVEP会话占用CPU时间不超过50秒,逻辑读取次数不超过100次为
例,说明使用 PROFILE 限制会话资源的方法.为了控制会话资源,首先应执行 CREATE
PROFILE命令建立PROFILE,然后使用ALTERUSER 命令将PROFILE分配给用户DEVEP.
CREATEPROFILEsession_limitLIMIT
CPU_PER_SESSION5000LOGICAL_READS_PER_SESSION100; 
ALTER USER devep PROFILE session_limit;

修改概要文件
当口令和资源限制无法满足用户的实际需求时,你就需要修改概要文件中的口令及资源
限制参数。修改概要文件是使用ALTERPROFILE命令由DBA来完成的;如果要以其它用
户身份修改概要文件, 则要求该用户必须具有ALTERPROFILE系统权限。 需要注意, 修改
概要文件对已存在会话没有影响,而只对新会话起作用。
【实例16-7】修改用户devp的口令和资源限制。
1)以管理员身份登录
SQL>CONNECT/ AS SYSDBA
已连接。
2)修改概要文件
SQL>ALTER PROFILE devp_call LIMIT
SESSIONS_PER_USER 2
FAILED_LOGIN_ATTEMPTS 2
CPU_PER_CALL 200;
配置文件已更改修改用户devp当前的概要文件后, 当devp重新登录后, 其口令和资源限制就发生变化了,如该用户的口令失败次数只能两次。删除概要文件当某个概要文件不需要时,可以删除它。删除概要文件是使用DROPPROFILE命令由DBA来完成的,如果要以其他用户身份删除概要文件,则要求该用户必须具有 DROPROFILE系统权限。
【实例16-8】删除概要文件devp_call
1)以管理员身份登录
SQL>CONNECT / AS SYSDBA
已连接。
2)删除概要文件
SQL>DROPP ROFILE devp_call CASCADE;
配置文件已丢弃
需要注意,如果概要文件已经被分配给某个用户,那么当删除概要文件时必须带有 CASCADE选项。
如果用户的概要文件已经被删除, Oracle将自动为用户重新指定DEFAULT概要文件。
显示概要文件信息
Oracle提供了几个数据字典视图查询有关概要文件的信息。下面分别介绍。
1) 显示用户的概要文件
当建立或修改用户时, 通过PROFILE子句可以为用户分配概要文件。 如果没有显式地
分配概要文件, 那么Oracle会将DEFAULT概要文件自动分配给用户。那么如何确定用户的
概要文件呢?通过查询数据字典视图DBA_USERS,可以取得用户的概要文件信息。
【实例16-9】查询用户devp的概要文件
1)以管理员身份登录
SQL>CONNECT / AS SYSDBA
已连接。
2)查询
SQL>SELECT profile FROM DBA_USERS WHERE username=’DEVP’;
PROFILE
------------------------
DEFAULT
2) 显示概要文件的内容
数据字典视图DBA_PROFILES中包含了每个概要文件的内容, 通过查询该数据字典视
图可以取得用户的口令限制及资源限制信息。
【实例16-10】查询概要文件devp_session的口令和资源限制。
1)以管理员身份登录
SQL>CONNECT/ ASSYSDBA
已连接。
2)查询
SQL>SELECT *  FROM DBA_PROFILES WHERE profile=’DEVP_SESSION’;
PROFILE RESOURCE_NAME RESOURCE_TYPE LIMIT
-------------------------------------------------------------------------------------------------
DEVP_SESSION CONNECT_TIME KERNAL 30
DEVP_SESSION IDLE_TIME KERNAL 10
DEVP_SESSION SESSIONS_PER_USER KERNAL 3
DEVP_SESSION CPU_PER_SESSION KERNAL 5000
DEVP_SESSION PASSWORD_LIFE_TIME PASSWORD DEFAULT 

其中:
• PROFILE:概要文件名称。
• RESOURCE_NAME:口令或资源选项名。
• RESOURCE_TYPE: PASSWORD表示口令管理选项,而KERNAL则表示资源限
制选项。
• LIMIT:概要文件选项值