暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

Oracle profile介绍

原创 Z·A·Q 2022-12-20
2548

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 

语法

image.png

语法解释

  • unlimited:使用资源参数时,unlimited意味着分配该 profile 的用户对资源使用无限制;使用密码参数时,unlimited 意味着没有为参数设置限制
  • default:指定为 default 意味着忽略对 profile 中的一些资源限制;被分配该 profile 的用户会受 DEFAULT profile 的限制;DEFAULT profile (数据库中默认会有 该 profile )定义对资源不限制,可以通过 alter profile 命令来改变这些限制;任何未显式地分配 profile 的用户都将受 DEFAULT profile 的限制。另外,如果显式分配给用户的 profile 省略了某些资源的限制或者为某些限制指定了 DEFAULT,则用户遵从 DEFAULT profile 定义的那些资源限制
    image.png
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 的设置
    image.png
  • 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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论