oracle profile介绍

profile文件的介绍: 

 Oracle系统中的profile可以用来对用户所能使用的数据库资源进行限制,使用Create Profile命令创建一个Profile, 
用它来实现对数据库资源的限制使用,如果把该profile分配给用户,则该用户所能使用的数据库资源都在该profile的限制之内。 

1、查看信息 
select * from dba_users;--查看用户的参数 
select * from dba_profiles;--显示所有profile文件及其限制 
select * from user_password_limits;--描述指定给用户的profile中的口令限制情况 
select * from user_resource_limits;--描述指定给用户的profile中的资源限制情况 
select * from resource_cost;--列举每个资源的价值 

2、profile的参数含义 
COMPOSITE_LIMIT:一个会话的资源成本限制 
SESSIONS_PER_USER:一个用户允许同时(并发)会话的总数,超过后系统禁止该用户的后续会话 
CPU_PER_SESSION:定义了一个SESSION占用的CPU的时间(1/100 秒),当达到这个限制用户不能在此会话中执行任何操作,此时必须先断开连接,再连接才行 
CPU_PER_CALL:限制每次调用SQL语句期间(parse、execute、fetch)可用的CPU时间总量,单位是百分之一秒。 
              达到限制时语句以报错结束。不同于CPU_PER_SESSION的是,没达到CPU_PER_SESSION限制,还可以进行新的查询 
LOGICAL_READS_PER_SESSION:一个会话允许读写的逻辑块的数量限制 
LOGICAL_READS_PER_CALL:一次调用的SQL期间,允许读数据库块数限制 
IDLE_TIME:一个连接会话的最长连接时间;当用户空闲时间超过IDLE_TIME指定的时间,Oracle将回滚当前事务,并且结束他的会话 
CONNECT_TIME:一个连接会话的最长连接时间(分钟);当用户会话时间超过CONNECT_TIME指       定的时间,Oracle将回滚当前事务,并且结束他的会话 
PRIVATE_SGA:一个会话允许分配的最大SGA大小,使用K/M定义 
FAILED_LOGIN_ATTEMPTS:当连续登陆失败次数达到该参数指定值时,用户被加锁; 
PASSWORD_LIFE_TIME:口令的有效期(天),默认为UNLIMITED 
PASSWORD_REUSE_TIME:口令被修改后原有口令隔多少天被重新使用,默认为UNLIMITED 
PASSWORD_REUSE_MAX:口令被修改后原有口令被修改多少次才允许被重新使用 
PASSWORD_VERIFY_FUNCTION:口令效验函数 
PASSWORD_LOCK_TIME:帐户因FAILED_LOGIN_ATTEMPTS锁定时,加锁天数 
PASSWORD_GRACE_TIME:口令修改的宽限期(天) 

3、profile创建和参数修改 
--创建一个简单profile,限制每个用户的会话数 
SQL> create profile pf_all limit sessions_per_user 20; 

--指定用户使用profile限制 
为用户指定资源限制,必须: 
动态地使用alter system或使用初始化参数resource_limit使资源限制生效。该改变对密码资源无效,密码资源总是可用。 
SQL> show parameter resource_limit 
NAME                                 TYPE        VALUE 
------------------------------------ ----------- ------------------------------ 
resource_limit                       boolean     FALSE 
SQL> alter system set resource_limit=true; 
系统已更改。 
SQL> show parameter resource_limit; 
NAME                                 TYPE        VALUE 
------------------------------------ ----------- ------------------------------ 
resource_limit                       boolean     TRUE 
SQL> alter user tina profile pf_all; 

--修改profile参数 
SQL>alter PROFILE pf_all limit sessions_per_user 10; 

--删除一个新的尚未分配给用户的PROFILE 
SQL>DROP PROFILE pf_all; 

--删除已创建的profile,如果已经指定了用户则要加上cascade关键字 
SQL>DROP PROFILE pf_all cascade; 
注:DEFAULT PROFILE不可以被删除 

--设置密码可失败次数 
SQL>alter profile default limit  failed_login_attempts unlimited; 

--设置密码生命周期 
SQL>alter profile default limit PASSWORD_LIFE_TIME unlimited; 

4、创建在创建新用户与老用户密码修改时验证复杂度的函数   --以前同事写的 
CREATE OR REPLACE FUNCTION SYS.tina_passwd_complex 
/*((1)长度:10位以上 (2)复杂度:必须为英文字母+特殊字符+数字  (3)密码不能与用户名相同 (4)密码需要至少有3个字符与之前的口令不相同)*/ 
(username varchar2, 
  password varchar2, 
  old_password varchar2) 
  RETURN boolean IS 
   n boolean; 
   m integer; 
   differ integer; 
   isdigit boolean; 
   ischar  boolean; 
   ispunct boolean; 
   digitarray varchar2(20); 
   punctarray varchar2(25); 
   chararray varchar2(52); 

BEGIN 
   digitarray:= '0123456789'; 
   chararray:= 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; 
   punctarray:='!"@#$%^&()``*+,-/:;<=>?_'; 

   -- Check if the password is same as the username 
   IF NLS_LOWER(password) = NLS_LOWER(username) THEN 
     raise_application_error(-20001, 'Password same as or similar to user'); 
   END IF; 

   -- Check for the minimum length of the password 
   IF length(password) < 10 THEN 
      raise_application_error(-20002, 'Password length less than 10'); 
   END IF; 

   -- Check if the password is too simple. 
   IF NLS_LOWER(password) IN ('database','user', 'password', 'oracle') THEN 
      raise_application_error(-20002, 'Password too simple'); 
   END IF; 

   -- Check if the password contains at least one letter, one digit and one punctuation mark. 
   -- 1. Check for the digit 
   isdigit:=FALSE; 
   m := length(password); 
   FOR i IN 1..10 LOOP 
      FOR j IN 1..m LOOP 
         IF substr(password,j,1) = substr(digitarray,i,1) THEN 
            isdigit:=TRUE; 
             GOTO findchar; 
         END IF; 
      END LOOP; 
   END LOOP; 
   IF isdigit = FALSE THEN 
      raise_application_error(-20003, 'Password should contain at least one digit, one character and one punctuation'); 
   END IF; 
   
   -- 2. Check for the character 
   <<findchar>> 
   ischar:=FALSE; 
   FOR i IN 1..length(chararray) LOOP 
      FOR j IN 1..m LOOP 
         IF substr(password,j,1) = substr(chararray,i,1) THEN 
            ischar:=TRUE; 
             GOTO findpunct; 
         END IF; 
      END LOOP; 
   END LOOP; 
   IF ischar = FALSE THEN 
      raise_application_error(-20003, 'Password should contain at least one 
              digit, one character and one punctuation'); 
   END IF; 
   
   -- 3. Check for the punctuation 
   <<findpunct>> 
   ispunct:=FALSE; 
   FOR i IN 1..length(punctarray) LOOP 
      FOR j IN 1..m LOOP 
         IF substr(password,j,1) = substr(punctarray,i,1) THEN 
            ispunct:=TRUE; 
             GOTO endsearch; 
         END IF; 
      END LOOP; 
   END LOOP; 
   IF ispunct = FALSE THEN 
      raise_application_error(-20003, 'Password should contain at least one 
              digit, one character and one punctuation'); 
   END IF; 

   <<endsearch>> 
  
   -- Check if the password differs from the previous password by at least 3 letters 
   IF old_password IS NOT NULL THEN 
     differ := length(old_password) - length(password); 

     IF abs(differ) < 3 THEN 
       IF length(password) < length(old_password) THEN 
         m := length(password); 
       ELSE 
         m := length(old_password); 
      END IF; 

       differ := abs(differ); 
       FOR i IN 1..m LOOP 
         IF substr(password,i,1) != substr(old_password,i,1) THEN 
           differ := differ + 1; 
         END IF; 
       END LOOP; 

       IF differ < 3 THEN 
         raise_application_error(-20004, 'Password should differ by at least 3 characters'); 
       END IF; 
     END IF; 
   END IF; 
   -- Everything is fine; return TRUE ;  
   RETURN(TRUE); 
END; 

5、创建profile 
CREATE PROFILE pw_profile LIMIT 
FAILED_LOGIN_ATTEMPTS 10        /*连续登录10次失败,则用户被锁*/ 
PASSWORD_LOCK_TIME 999          /*如果用户连续3次登录失败,账号被锁,指定被锁的时间长度*/ 
PASSWORD_GRACE_TIME 7           /*提示密码过期,仍能用原密码登录的天数*/ 
PASSWORD_LIFE_TIME 90          /*密码有效的天数,即需要用户至少90天修改一次密码*/ 
PASSWORD_REUSE_TIME UNLIMITED  /*需要多少天后,该密码可以被重用,这里天数不受限制*/ 
PASSWORD_REUSE_MAX 10          /*当前密码被重用之前,最少需要修改10次密码 */ 
PASSWORD_VERIFY_FUNCTION tina_passwd_complex  /*使用的密码规则验证的函数*/ 
SESSIONS_PER_USER 5 
IDLE_TIME 10; 

6、将所有profile均使用tina_passwd_complex函数,以使任何用户修改密码都必须符合复杂度函数 
declare 
  sql_alter varchar2(200); 
begin 
   for cur in(select distinct profile as profile_name from dba_profiles) loop 
   sql_alter:='ALTER PROFILE '||cur.profile_name||' limit password_verify_function tina_PASSWD_COMPLEX'; 
   execute immediate sql_alter;        
   end loop; 
end; 

commit; 

7.若不在需要,可删除函数和profile 
SQL> drop function sys.tina_passwd_complex; 

Function dropped. 

SQL> drop profile pw_profile; 

Profile dropped. 

SQL> alter profile DEFAULT limit PASSWORD_VERIFY_FUNCTION null; --将所有涉及上面函数的profile都修改 

Profile altered. 

时间: 2024-11-06 01:27:25

oracle profile介绍的相关文章

【体系结构】Oracle参数介绍

[体系结构]Oracle参数介绍 1  BLOG文档结构图     2  前言部分 2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ① Oracle中的各种参数介绍及其查询方法 ② Oracle中V$PARAMETER及V$PARAMETER2的区别 ③ 隐含参数的查询.重置.清除 ④ 会话参数和实例参数的查询 ⑤ 静态参数和动态参数.延迟参数 ⑥ V$PARAMETER视图的每列含义(重点) Tips: ① 

Oracle dblink介绍

Oracle dblink介绍 官网:https://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_5005.htm 当用户要跨本地数据库访问另外一个数据库表中的数据时,本地数据库中必须创建了远程数据库的DBLINK,通过DBLINK可以像访问本地数据库一样访问远程数据库表中的数据.其实,DBLINK和数据库中的VIEW差不多,创建DBLINK的时候需要知道待读取数据库的IP地址.ORACLE_SID以及数据库用户名和密码.

Oracle管理安全和资源(二)使用Oracle Profile管理口令

1.账户锁定 FAILED_LOGIN_ATTEMPTS:用于指定连续登录的最大失败次数. PASSWORD_LOCK_TIME:用于指定账户被锁定的天数. 03:34:13 SQL> create profile lock_account limit 03:36:51   2   failed_login_attempts 3 03:37:07   3   password_lock_time 10; Profile created. 02:56:45 SQL> select profile

ORACLE MERGE 介绍

MERGE语句是Oracle9i新增的语法,用来合并UPDATE和INSERT语句. 通过MERGE语句,根据一张表或多表联合查询的连接条件对另外一张表进行查询,连接条件匹配上的进行UPDATE,无法匹配的执行INSERT.这个语 法仅需要一次全表扫描就完成了全部工作,执行效率要高于INSERT+UPDATE.通过这个MERGE你能够在一个SQL语句中对一个表同时执行 INSERT和UPDATE操作. 在 Oracle 10g中MERGE有一些新特性,后面我会介绍这些新特征.先看看MERGE语法

oracle索引介绍(图文详解)_oracle

对于数据库来说,索引是一个必选项,但对于现在的各种大型数据库来说,索引可以大大提高数据库的性能,以至于它变成了数据库不可缺少的一部分. 索引分类:逻辑分类single column or concatenated  对一列或多列建所引unique or nonunique 唯一的和非唯一的所引,也就是对某一列或几列的键值(key)是否是唯一的.Function-based  基于某些函数索引,当执行某些函数时需要对其进行计算,可以将某些函数的计算结果事先保存并加以索引,提高效率. Doman 

Oracle存储过程介绍

存储过程(Stored Procedure )是一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中.用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它.存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程. 存储过程是由流控制和SQL 语句书写的过程,这个过程经编译和优化后存储在数据库服务器中,应用程序使用时只要调用即可.在Oracle 中,若干个有联系的过程可以组合在一起构成程序包. 存储过程的创建 使用CREATE OR REPL

一个开发需求的解决方案 &amp;amp; Oracle临时表介绍

一.开发需求 最近有一个开发需求,大致需要先使用主表,或主表和几张子表关联查询出ID(主键)及一些主表字段,然后再用这些ID查找最多10张表中对应的记录,主表记录数大约2000万,每张子表的记录数均为百万以上,最多可能会有5000万,主表一条数据可能对应子表多条数据.现在开发使用的逻辑是: 1.使用条件查询主表或主表和几张子表(不同场景)符合条件的主表记录ID值及其他一些主表字段项. 2.利用这些主表ID值,分别和几张子表使用IN子句,查询出子表中符合条件的记录项.有几张子表,就执行几次SQL语

2.oracle的安装常识,Oralce服务器,oracle集群,oracle服务介绍,用户解锁相关

 1 oracle的安装常识(oracle10g和oracle11g的版本差别): A 安装目录都不要有中文和空格 B oracle10g支持winxp 不支持win7,8和vista;Oracle11g支持所有版本   2 Oralce服务器:由oracle实例和oracle数据库组成 oracle数据库:磁盘上物理文件的集合 A 当配置了oracle_home时,可以通过 echo$ORACLE_HOME来查看oracle的安装目录 B bin目录(存放exe工具).位置:F:\app\

oracle JRockit 介绍

1.什么是JRockit?--是JVM Oracle JRockit (原来的 Bea JRockit)系列产品是一个全面的Java运行时解决方案组合,包括了行业最快的标准Java解决方案. 大量的行业基准测试显示,基本JRockit JVM是世界上最快的JVM.JRockit面向延迟敏感型应用的解决方案JRockit Real Time提供以毫秒或微秒计的JVM响应时间,适合财务前端办公.军事指挥与控制和电信网络的需要.使用JRockit产品,客户已经体验到了显著的性能提高(一些超过了70%