CREATE PROFILE
- 要创建 profile,必须具有 CREATE PROFILE 的系统权限
- 要为一个用户指定资源限制,必须:
- 1)使用 alter system 语句或初始化参数 RESOURCE_LIMIT 启用资源限制(该参数默认是 FALSE)。该参数不会应用到密码资源,密码资源是一直启用的
SQL> show parameter resource_limit
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
resource_limit boolean FALSE
SQL> alter system set resource_limit=true;
- 2)使用 create profile 语句创建一个 profile,定义资源限制
- 3)使用create user 或 alter user 语句把 profile 分配给用户
create user ... profile <profile_name>;
alter user <username> profile <profile_name>;
dba_users.profile 列:查看用户的 profile
语法

语法解释
- unlimited:使用资源参数时,unlimited意味着分配该 profile 的用户对资源使用无限制;使用密码参数时,unlimited 意味着没有为参数设置限制
- default:指定为 default 意味着忽略对 profile 中的一些资源限制;被分配该 profile 的用户会受 DEFAULT profile 的限制;DEFAULT profile (数据库中默认会有 该 profile )定义对资源不限制,可以通过 alter profile 命令来改变这些限制;任何未显式地分配 profile 的用户都将受 DEFAULT profile 的限制。另外,如果显式分配给用户的 profile 省略了某些资源的限制或者为某些限制指定了 DEFAULT,则用户遵从 DEFAULT profile 定义的那些资源限制

resource_parameter 部分
-
1)session_per_user:指定并发会话数
-
2)cpu_per_session:指定会话的 CPU 时间限制,以百分之一秒表示
-
3)cpu_per_call:指定一次调用(解析、执行或获取)的CPU时间限制,以百分之一秒表示
-
4)connect_time:指定会话的总连接时间,以分钟表示
-
5)idle_time:指定会话允许连续非活跃的总时间,以分钟表示,超过该时间,会话将断开;但是长查询和其他操作的不受此限制
-
6)logical_reads_per_session:指定一个会话允许读取的数据块的数目,包括从内存和磁盘读取的数据块
-
7)Logical_read_per_call:指定一次执行SQL(解析、执行或获取)调用所允许读取的数据块的数目
-
8)private_sga:指定一个会话在 SGA 的共享池中所允许分配的私有空间,以字节为单位。(该限制只在使用共享服务器时才有效,会话在SGA中的私有空间包括私有SQL 和 PL/SQL 区,但不包括共享 SQL和PL/SQL 区)
-
9)composite_limit:指定一个会话的总资源成本,以 service units 表示。Oracle 数据库通过 CPU_PER_SESSION、CONNECT_TIME、LOGICAL_READS_PER_SESSION 和 PRIVATE_SGA 的权重和来计算总 service units
-
在 profile 中设置资源限制:
CREATE PROFILE app_user LIMIT
SESSIONS_PER_USER UNLIMITED
CPU_PER_SESSION UNLIMITED
CPU_PER_CALL 3000
CONNECT_TIME 45
LOGICAL_READS_PER_SESSION DEFAULT
LOGICAL_READS_PER_CALL 1000
PRIVATE_SGA 15K
COMPOSITE_LIMIT 5000000;
password_parameter部分
- 设置时间长度的参数,换句话说,除了 FAILED_LOGIN_ATTEMPTS 和PASSWORD_REUSE_MAX 之外的密码参数,都是以天数解释。出于测试目的,你可以为这些参数指定小时(n/24)、分钟(n / 1440)或秒(n / 86400);你也可以使用一个十进制值(例如 .0833 大约一个小时)。最小值是 1秒;最大值是24855天。对于FAILED_LOGIN_ATTEMPTS 和 PASSWORD_REUSE_MAX,必须指定一个整数
- 1)failed_login_attempts:指定在帐户被锁定之前所允许的连续失败登录的次数;如果省略,默认是 10次
- 2)password_life_time:指定同一密码所允许使用的天数。如果同时设置了password_grace_time,如果在 grace period 内没有改变密码,则密码会过期,后续的数据库连接会被拒绝;如果省略,默认是 180天
- 3)password_reuse_time 和 password_reuse_max:这两个参数必须一起设置;password_reuse_time 指定了密码不能重用前的天数,而 password_reuse_max 则指定当前密码可重用之前所需的密码更改次数
要使参数生效需要为这两个参数指定值
如果为这两个参数指定了一个值,则用户不能重用密码,直到在password_reuse_time 指定的时间内,密码被修改了 password_reuse_max 指定的次数;如:password_reuse_time=30,password_reuse_max=10,如果密码已经更改了 10次,用户可以在 30天后重用该密码
如果为其中一个参数指定值,而另一个为 unlimited,则用户永远不能重用一个密码
如果指定了其中的一个为 default,Oracle 数据库使用 DEFAULT profile 中的值,默认情况下,DEFAULT profile 中的所有参数都被设置为 unlimited;如果没有改变DEFAULT profile 中的默认设置,那么数据库将该参数默认为 unlimited
如果两个参数都设置为 unlimited,则数据库会忽略这两个参数;
- 4)password_lock_time:指定连续失败登录的次数到达后,帐户被锁定的天数;如果省略,默认是 1 天
- 5)password_grace_time:指定宽限期开始后的天数,在此期间数据库发出警告并允许登录;如果省略,默认是 7 天
- 6)password_verify_function:该子句允许将 PL/SQL 密码复杂度验证脚本做为参数传递到 create profile 语句中。Oracle 数据库提供了一个默认的脚本,但是可以创建自己的验证规则或使用第三方软件验证
对于 function,指定密码复杂度验证规则的名称;该函数必须存在于 SYS 用户下,并且你需要拥有该函数的 EXECUTE 权限
指定 NULL 则表示不执行密码验证
- 在 profile 中设置密码限制:verify_function 是数据库默认的密码验证策略
CREATE PROFILE app_user2 LIMIT
FAILED_LOGIN_ATTEMPTS 5
PASSWORD_LIFE_TIME 60
PASSWORD_REUSE_TIME 60
PASSWORD_REUSE_MAX 5
PASSWORD_VERIFY_FUNCTION verify_function
PASSWORD_LOCK_TIME 1/24
PASSWORD_GRACE_TIME 10;
密码复杂度验证函数
- 1)11g 数据库中,在 $ORACLE_HOME/rdbms/admin/utlpwdmg.sql 脚本中定义了密码复杂度验证函数 verify_function_11G
- 2)使用 SYS 用户运行该脚本
SQL> @$ORACLE_HOME/rdbms/admin/utlpwdmg.sql
Function created.
Grant succeeded.
Profile altered.
Function created.
Grant succeeded.
- 3)再次查看 DEFAULT profile 的设置

- 4)停止密码检验函数
alter profile DEFAULT limit password_verify_function null;
DROP PROFILE
- 1)使用该 DROP PROFILE 语句从数据库中删除 profile;你可以删除 DEFAULT profile 以外的任何 profile;你必须具有 DROP PROFILE 系统权限
- 2)语法
DROP PROFILE profile [ CASCADE ] ;
- profile:指定要删除的配置文件的名称
- CASCADE:指定 CASCADE 取消该 profile 的分配。Oracle 数据库自动将 DEFAULT profile 分配给这些用户。你必须指定此子句以删除当前已经分配给用户的 profile
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




