使用Oracle的PROFILE对用户资源限制和密码限制的研究与探索_第1页
使用Oracle的PROFILE对用户资源限制和密码限制的研究与探索_第2页
使用Oracle的PROFILE对用户资源限制和密码限制的研究与探索_第3页
使用Oracle的PROFILE对用户资源限制和密码限制的研究与探索_第4页
使用Oracle的PROFILE对用户资源限制和密码限制的研究与探索_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、使用Oracle的PROFILE对用户资源限制和密码限制的研究与探索1.用户创建语句 PROFILE选项“引发的血案”如果大家细心的话,在创建用户的语法中有这么一个选项“PROFILE profile”。下面是 Oracle 11gR2官方文档中关于创建用户的语法描述(较之 10g的文档可读性加强了,当然功能也同样有所增加):CREATE USER userIDENTIFIED  BY password      EXTERNALLY  AS 'c

2、ertificate_DN' AS 'kerberos_principal_name'       GLOBALLY  AS ' directory_DN '  DEFAULT TABLESPACE tablespaceTEMPORARY TABLESPACE tablespace tablespace_group_name  

3、QUOTA  size_clause UNLIMITED  ON tablespace .PROFILE profilePASSWORD EXPIREACCOUNT  LOCK UNLOCK  DEFAULT TABLESPACE tablespaceTEMPORARY TABLESPACE tablespace tablespace_group_name  QUOTA 

4、60;size_clause UNLIMITED  ON tablespace .PROFILE profilePASSWORD EXPIREACCOUNT  LOCK UNLOCK ENABLE EDITIONS. 2.提问:PROFILE选项是做什么用的呢?回答:简要的说,PROFILE在Oracle数据库对 数据库用户能够使用的资源做进一步的限制的一种手段,如对连接到某个用户的session或 sql所能使用的CPU资源进行控制,又如控制Oracle用户的密码

5、 管理策略等等3.查看系统的默认PROFILE1)通过dba_profiles视图查看一下系统中默认都有哪些PROFILE数据库创建以后,系统中只会存在一个名为DEFAULT的默认PROFILE,在用户创建之后,如果不做特殊指定,每个用户的PROFILE都会默认的使用个默认的PROFILE。sysora10g> select distinct profile from dba_profiles;PROFILE-DEFAULT2)全面查看一下这个PROFILE都包含哪些限制定义sysora10g> select *

6、 from dba_profiles;PROFILE    RESOURCE_NAME                    RESOURCE LIMIT- - - -DEFAULT    COMPOSITE_LIMIT   &#

7、160;              KERNEL   UNLIMITEDDEFAULT    SESSIONS_PER_USER                KERNEL   UNLIMITEDDE

8、FAULT    CPU_PER_SESSION                  KERNEL   UNLIMITEDDEFAULT    CPU_PER_CALL            

9、         KERNEL   UNLIMITEDDEFAULT    LOGICAL_READS_PER_SESSION        KERNEL   UNLIMITEDDEFAULT    LOGICAL_READS_PER_CALL    

10、;       KERNEL   UNLIMITEDDEFAULT    IDLE_TIME                        KERNEL   UNLIMITEDDEFAULT

11、    CONNECT_TIME                     KERNEL   UNLIMITEDDEFAULT    PRIVATE_SGA          

12、60;           KERNEL   UNLIMITEDDEFAULT    FAILED_LOGIN_ATTEMPTS            PASSWORD 10DEFAULT    PASSWORD_LIFE_TIME 

13、60;             PASSWORD UNLIMITEDDEFAULT    PASSWORD_REUSE_TIME              PASSWORD UNLIMITEDDEFAULT    PASSWORD

14、_REUSE_MAX               PASSWORD UNLIMITEDDEFAULT    PASSWORD_VERIFY_FUNCTION         PASSWORD NULLDEFAULT    PASSWORD_LOCK_TIME&

15、#160;              PASSWORD UNLIMITEDDEFAULT    PASSWORD_GRACE_TIME              PASSWORD UNLIMITED16 rows selected.3)结论

16、通过上面的查看,可以得到这个系统默认的PROFILE “DEFAULT”的配置信息只对密码的错误尝试次数做了限制(最多可以错误输错10次密码),如果我们启用了PROFILE(下面有介绍如何启用和停止PROFILE),默认的限制只有这些。如果想要改变限制条件,有两种方法:第一种方法是可以对这个默认的PROFILE做个性化的调整;第二种方法是再重新定制一个新的PROFILE满足新的需求。4.对创建PROFILE的标准语法做一下“解剖麻雀”(更多细节可以参考Oracle的官方文档)1)创建PROFILE的语法如下:CREATE PROFILE profile  

17、; LIMIT resource_parameters 对资源的限制         | password_parameters 对密码的限制.;2)对数据库资源做限制时,下面是全部可用的参数: SESSIONS_PER_USER 每个用户名所允许的并行会话数  | CPU_PER_SESSION   一个会话一共可以使用的CPU时间,单位是百分之一秒  | CPU_PER_CALL      一次SQL调用(解析、执行和获取

18、)允许使用的CPU时间  | CONNECT_TIME      限制会话连接时间,单位是分钟  | IDLE_TIME         允许空闲会话的时间,单位是分钟  | LOGICAL_READS_PER_SESSION 限制会话对数据块的读取,单位是块  | LOGICAL_READS_PER_CALL    限制SQL调用对数据块的读取,单位是块  | COMPOSITE_LI

19、MIT   “组合打法” integer | UNLIMITED | DEFAULT | PRIVATE_SGA   限制会话在SGA中Shared Pool中私有空间的分配 size_clause | UNLIMITED | DEFAULT 3)对密码做限制时,下面是全部可用的参数: FAILED_LOGIN_ATTEMPTS 帐户被锁定之前可以错误尝试的次数  | PASSWORD_LIFE_TIME  

20、;  密码可以被使用的天数,单位是天,默认值180天  | PASSWORD_REUSE_TIME   密码可重用的间隔时间(结合PASSWORD_REUSE_MAX)  | PASSWORD_REUSE_MAX    密码的最大改变次数(结合PASSWORD_REUSE_TIME)  | PASSWORD_LOCK_TIME    超过错误尝试次数后,用户被锁定的天数,默认1天  | PASSWORD_GRACE_TIME   当密码过期之后还

21、有多少天可以使用原密码 expr | UNLIMITED | DEFAULT | PASSWORD_VERIFY_FUNCTION function | NULL | DEFAULT 5.OK,语法已经了然于胸,那么我们来实际创建一个PROFILE(这里的名字我们称其为:sec_profile),在感性认识的同时一同探索一下在这个过程中会遇到的一些有趣现象。1)尝试创建一个混合型的PROFILE(包含 资源限制和密码限制)sysora10g> CRE

22、ATE PROFILE sec_profile LIMIT2     SESSIONS_PER_USER          UNLIMITED3     CPU_PER_SESSION            UNLIMITED4  

23、;   CPU_PER_CALL               60005     CONNECT_TIME               606     LOGICAL_R

24、EADS_PER_SESSION  DEFAULT7     LOGICAL_READS_PER_CALL     60008     COMPOSITE_LIMIT            60000009     PRIVATE_SGA  

25、;              66K10     FAILED_LOGIN_ATTEMPTS      611     PASSWORD_LIFE_TIME         6012  &#

26、160;  PASSWORD_REUSE_TIME        6013     PASSWORD_REUSE_MAX         514     PASSWORD_LOCK_TIME         1/2415

27、     PASSWORD_GRACE_TIME        1016     PASSWORD_VERIFY_FUNCTION   verify_function17  /CREATE PROFILE sec_profile LIMIT*ERROR at line 1:ORA-07443: fu

28、nction VERIFY_FUNCTION not found2)报错原因为什么会报错?错误提示很清楚,VERIFY_FUNCTION这个函数不存在。既然知道不存在,那我们如何创建它呢?回答:VERIFY_FUNCTION函数是通过utlpwdmg.sql脚本创建的,该脚本所在的目录是$ORACLE_HOME/rdbms/admin/3)创建密码复杂性检验函数VERIFY_FUNCTION我们使用utlpwdmg.sql脚本创建以下这个VERIFY_FUNCTION密码复杂度校验函数sysora10g> ?/rdbms/admin/utlpwdm

29、g.sqlFunction created.Profile altered.4)utlpwdmg.sql脚本中的小秘密细心的您在执行utlpwdmg.sql脚本的过程中一定发现了有一个“Profile altered”的提示,难道这个脚本修改了某个PROFILE信息么?正如您所料,它修改了系统的默认PROFILE “DEFAULT”,再次查看一下现在的DEFAULT的定义信息:sysora10g> select * from dba_profiles;PROFILE    RESOURCE

30、_NAME                    RESOURCE LIMIT- - - -DEFAULT    COMPOSITE_LIMIT              

31、0;   KERNEL   UNLIMITEDDEFAULT    SESSIONS_PER_USER                KERNEL   UNLIMITEDDEFAULT    CPU_PER_SESSION    

32、              KERNEL   UNLIMITEDDEFAULT    CPU_PER_CALL                     KERNEL &#

33、160; UNLIMITEDDEFAULT    LOGICAL_READS_PER_SESSION        KERNEL   UNLIMITEDDEFAULT    LOGICAL_READS_PER_CALL           KERNEL   U

34、NLIMITEDDEFAULT    IDLE_TIME                        KERNEL   UNLIMITEDDEFAULT    CONNECT_TIME     &#

35、160;               KERNEL   UNLIMITEDDEFAULT    PRIVATE_SGA                      

36、;KERNEL   UNLIMITEDDEFAULT    FAILED_LOGIN_ATTEMPTS            PASSWORD 3DEFAULT    PASSWORD_LIFE_TIME             

37、  PASSWORD 60DEFAULT    PASSWORD_REUSE_TIME              PASSWORD 1800DEFAULT    PASSWORD_REUSE_MAX            

38、;   PASSWORD UNLIMITEDDEFAULT    PASSWORD_VERIFY_FUNCTION         PASSWORD VERIFY_FUNCTIONDEFAULT    PASSWORD_LOCK_TIME            

39、;   PASSWORD .0006DEFAULT    PASSWORD_GRACE_TIME              PASSWORD 1016 rows selected.与系统创建时的DEFAULT PROFILE相比较,之前只有10次密码输入错误的限制,执行完成这个函数创建之后,我们发现系统默认的PROFILE已经对系统有了一个非常严格

40、的约束。也就是说现在系统上的每一个用户在默认情况下都多了这些密码方面的限制。5)验证一下新默认的PROFILE “DEFAULT”关于错误密码输入次数的限制我们模拟一下错误输错密码三次后的效果,可以看到,在第四次输入后,sec用户被锁定了。sysora10g> conn sec/aERROR:ORA-01017: invalid username/password; logon deniedWarning: You are no longer connected to&

41、#160;ORACLE.sysora10g> conn sec/aERROR:ORA-01017: invalid username/password; logon deniedsysora10g> conn sec/aERROR:ORA-01017: invalid username/password; logon deniedsysora10g> conn sec/aERROR:ORA-28000: the acc

42、ount is locked6)使用dba_users视图比较一下用户的前后状态用户sec已经因错误密码输入次数超过3此导致用户被锁定了,进一步比较一下用户的状态。sysora10g> col USERNAME for a10sysora10g> col ACCOUNT_STATUS for a20sysora10g> col PROFILE for a10sysora10g> select USERNAME,A

43、CCOUNT_STATUS,LOCK_DATE,EXPIRY_DATE from dba_users where username = 'SEC'USERNAME   ACCOUNT_STATUS       LOCK_DATE           EXPIRY_DATE- - - 

44、-SEC        OPENsysora10g> select USERNAME,ACCOUNT_STATUS,LOCK_DATE,EXPIRY_DATE from dba_users where username = 'SEC'USERNAME   ACCOUNT_STATUS       LOCK_DATE&

45、#160;          EXPIRY_DATE- - - -SEC        LOCKED(TIMED)        2009-10-11 16:05:03 2009-12-09 08:46:367)既然默认的PROFILE发生了变化,那么就会面临一个实际问题,如何恢

46、复成原始状态呢?这里给出一个比较简单的方法,就是使用ALTER PROFILE命令修改成原来的模样sysora10g> ALTER PROFILE DEFAULT LIMIT2   COMPOSITE_LIMIT             UNLIMITED3   SESSIONS_PER_USER     

47、60;     UNLIMITED4   CPU_PER_SESSION             UNLIMITED5   CPU_PER_CALL                UNLIMITED6

48、   LOGICAL_READS_PER_SESSION   UNLIMITED7   LOGICAL_READS_PER_CALL      UNLIMITED8   IDLE_TIME                   UN

49、LIMITED9   CONNECT_TIME                UNLIMITED10   PRIVATE_SGA                 UNLIMITED11  &

50、#160;FAILED_LOGIN_ATTEMPTS       1012   PASSWORD_LIFE_TIME          UNLIMITED13   PASSWORD_REUSE_TIME         UNLIMITED14   P

51、ASSWORD_REUSE_MAX          UNLIMITED15   PASSWORD_VERIFY_FUNCTION    NULL16   PASSWORD_LOCK_TIME          UNLIMITED17   PASSWORD_GRACE_

52、TIME         UNLIMITED18  /Profile altered.8)最后我们重新创建一下这个实验PROFILE:sec_profile,可以预测,这次一定会成功滴sysora10g> CREATE PROFILE sec_profile LIMIT2     SESSIONS_PER_USER     

53、0;    UNLIMITED3     CPU_PER_SESSION            UNLIMITED4     CPU_PER_CALL               60005

54、     CONNECT_TIME               606     LOGICAL_READS_PER_SESSION  DEFAULT7     LOGICAL_READS_PER_CALL     60008

55、60;    COMPOSITE_LIMIT            60000009     PRIVATE_SGA                66K10     FAILED

56、_LOGIN_ATTEMPTS      611     PASSWORD_LIFE_TIME         6012     PASSWORD_REUSE_TIME        6013     PASSWORD_

57、REUSE_MAX         514     PASSWORD_LOCK_TIME         1/2415     PASSWORD_GRACE_TIME        1016    &

58、#160;PASSWORD_VERIFY_FUNCTION   verify_function17  /Profile created.创建成功鸟在这个 实验中,我们使用了PROFILE几乎所有的参数,惟一没有包含的参数是IDLE_TIME,目的仅仅是为了说明一个细节:如果该PROFILE被授权给用户后,这个被省略的IDLE_TIME参数将继承默认PROFILE “DEFALT”中的定义。对上面我们创建的PROFILE逐行做一下诠释,以便加深理解:第 2行:对用户的并发连接会话数不做限制第 3行:对于连接到用户的每一个session的

59、CPU时间的使用不做限制第 4行:一次调用消耗的CPU时间不能超过60秒(不超过一分钟)第 5行:连接到用户的每次会话时间不能超过60分钟(不超过一个小时)第 6行:一次会话使用的物理读与逻辑读数据块总量与DEFAULT profile中定义保持一致第 7行:一次调用使用的物理读与逻辑读数据块总量不超过6000个数据块第 8行:一次会话总的资源消耗不超过6000000个服务单元(service units)第 9行:一次会话在SGA中不能分配超过66K的空间第10行:帐户被锁定之前允许6次的错误尝试第11行:超过此生命周期后密码作废第12行:密码重用时间60天第13行:密码重用之前密码需要完成

60、5次改变第14行:超过错误尝试次数后,用户将被锁定1小时第15行:当密码过期之后原密码还可以使用10天第16行:使用密码复杂度校验函数verify_function对密码做检查再单独深入解释一下第12行和13行组合搭配之后的含义:也就是说只有完成了5次的密码修改后并且已经超过60天后,之前的密码才能够再一次被使用。9)通过dba_profiles视图再一次查看一下此时系统中存在的PROFILE的信息sysora10g> col PROFILE for a12sysora10g> col RESOURCE_NAME 

61、;for a25sysora10g> col LIMIT for a15sysora10g> select * from dba_profiles order by 1,2;PROFILE      RESOURCE_NAME             RESOURCE 

62、;LIMIT- - - -DEFAULT      COMPOSITE_LIMIT           KERNEL   UNLIMITEDDEFAULT      CONNECT_TIME          

63、    KERNEL   UNLIMITEDDEFAULT      CPU_PER_CALL              KERNEL   UNLIMITEDDEFAULT      CPU_PER_SESSION  &

64、#160;        KERNEL   UNLIMITEDDEFAULT      FAILED_LOGIN_ATTEMPTS     PASSWORD 3DEFAULT      IDLE_TIME         

65、;        KERNEL   UNLIMITEDDEFAULT      LOGICAL_READS_PER_CALL    KERNEL   UNLIMITEDDEFAULT      LOGICAL_READS_PER_SESSION KERNEL  

66、0;UNLIMITEDDEFAULT      PASSWORD_GRACE_TIME       PASSWORD 10DEFAULT      PASSWORD_LIFE_TIME        PASSWORD 60DEFAULT      P

67、ASSWORD_LOCK_TIME        PASSWORD .0006DEFAULT      PASSWORD_REUSE_MAX        PASSWORD UNLIMITEDDEFAULT      PASSWORD_REUSE_TIME   

68、0;   PASSWORD 1800DEFAULT      PASSWORD_VERIFY_FUNCTION  PASSWORD VERIFY_FUNCTIONDEFAULT      PRIVATE_SGA               KERNEL

69、0;  UNLIMITEDDEFAULT      SESSIONS_PER_USER         KERNEL   UNLIMITEDSEC_PROFILE  COMPOSITE_LIMIT           KERNEL   50

70、00000SEC_PROFILE  CONNECT_TIME              KERNEL   45SEC_PROFILE  CPU_PER_CALL              KERNEL   3000SEC

71、_PROFILE  CPU_PER_SESSION           KERNEL   UNLIMITEDSEC_PROFILE  FAILED_LOGIN_ATTEMPTS     PASSWORD 5SEC_PROFILE  IDLE_TIME       

72、60;         KERNEL   DEFAULTSEC_PROFILE  LOGICAL_READS_PER_CALL    KERNEL   1000SEC_PROFILE  LOGICAL_READS_PER_SESSION KERNEL   DEFAULTSEC_PROFILE  PASSWOR

73、D_GRACE_TIME       PASSWORD 10SEC_PROFILE  PASSWORD_LIFE_TIME        PASSWORD 60SEC_PROFILE  PASSWORD_LOCK_TIME        PASSWORD .0416SEC_PROFILE 

74、 PASSWORD_REUSE_MAX        PASSWORD 5SEC_PROFILE  PASSWORD_REUSE_TIME       PASSWORD 60SEC_PROFILE  PASSWORD_VERIFY_FUNCTION  PASSWORD VERIFY_FUNCTIONSEC_PROFILE  PR

75、IVATE_SGA               KERNEL   15360SEC_PROFILE  SESSIONS_PER_USER         KERNEL   UNLIMITED32 rows selected.10)删除PROFILE既然有创建,

76、就一定对应着删除,删除方法很简单,语法如下:DROP PROFILE profile  CASCADE  如果创建的PROFILE已经授权给了具体的用户,则需要使用CASCADE选项级联的收回相应的限制信息,在收回这些限制信息之后将会以系统默认的PROFILE对该用户进行限制。删除示例如下:sysora10g> drop profile SEC_PROFILE cascade;Profile dropped.如果该PROFILE已经授权给具体的用户,使用不带有cascade选项的

77、删除命令将得到如下的报错信息:sysora10g> drop profile SEC_PROFILE;drop profile SEC_PROFILE*ERROR at line 1:ORA-02382: profile SEC_PROFILE has users assigned, cannot drop without CASCADE6.关于PROFILE内容何时生效的一点注意事项这里讨论需要谈到一个系统参数,它就是

78、resource_limit。如果要开启“资源限制”的话,这个参数必须是“TRUE”的状态sysora10g> show parameter resource_limitNAME            TYPE                 VALUE- -&#

79、160;-resource_limit  boolean              FALSE这里有一个小细节不得不提:之所以称这个参数为resource_limit(资源限制)而没有称作“profile_limit”,是因为这个参数只对PROFILE中的资源限制部分起作用,如果是默认的FALSE状态,表示PROFILE定义中的资源限制条件不起作用,只有该参数为TRUE时,资源限制的定义才生效。不过,关于PROFILE中密码限制的条件则

80、与这个参数无关,无论这个参数设置为什么值,有关密码限制的条件都会默认生效,从这个细节上可以看出来Oracle对用户密码的重视程度。因此关于PROFILE的生效情况结论是:1)用户所有拥有的PROFILE中有关密码的限制永远生效,不受限制。2)用户所有拥有的PROFILE中有关资源的限制与resource_limit参数的设置有关,当为TRUE时生效,当为FALSE时(默认值是FALSE)无效。7.一切都OK了,最后我们来演示一下将新创建的PROFILE sec_profile指定给具体用户sec的操作sysora10g> alter user sec

81、0;profile sec_profile;User altered.sysora10g> select USERNAME,PROFILE from dba_users where USERNAME = 'SEC'USERNAME   PROFILE- -SEC        SEC_PROFILE8.【附】密码验证函数VERIFY_FUNCTION的创建

82、脚本内容utlpwdmg.sql,供参考。ora10gsecDB /home/oracle$ cat $ORACLE_HOME/rdbms/admin/utlpwdmg.sqlRemRem $Header: utlpwdmg.sql 31-aug-2000.11:00:47 nireland Exp $RemRem utlpwdmg.sqlRemRem  Copyright (c) Oracle Corporation 1996,

83、60;2000. All Rights Reserved.RemRem    NAMERem      utlpwdmg.sql - script. for Default Password Resource LimitsRemRem    DESCRIPTIONRem      This 

84、;is a script. for enabling the password management featuresRem      by setting the default password resource limits.RemRem    NOTESRem      This 

85、file contains a function for minimum checking of passwordRem      complexity. This is more of a sample function that the customerRem      can use

86、 to develop the function for actual complexity checks that theRem      customer wants to make on the new password.RemRem    MODIFIED   (MM/DD/YY)Rem&#

87、160;   nireland    08/31/00 - Improve check for username=password. #1390553Rem    nireland    06/28/00 - Fix null old password test. #1341892Rem  

88、0; asurpur     04/17/97 - Fix for bug479763Rem    asurpur     12/12/96 - Changing the name of password_verify_functionRem    asurpur    

89、; 05/30/96 - New script. for default password managementRem    asurpur     05/30/96 - CreatedRem- This script. sets the default password resource parameters- Th

90、is script. needs to be run to enable the password features.- However the default resource parameters can be changed based- on the need.- A default password complexity

91、0;function is also provided.- This function makes the minimum complexity checks like- the minimum length of the password, password not same as the- username, etc. The use

92、r may enhance this function according to- the need.- This function must be created in SYS schema.- connect sys/<password> as sysdba before running the scriptCREATE OR

93、60;REPLACE FUNCTION verify_function(username varchar2,password varchar2,old_password varchar2)RETURN boolean ISn boolean;m integer;differ integer;isdigit boolean;ischar  boolean;ispunct boolean;digitarray varchar2(20);punctar

94、ray varchar2(25);chararray varchar2(52);BEGINdigitarray:= '0123456789'chararray:= 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'punctarray:='!"#$%&()*+,-/:;<=>?_'- Check if the password is same as&#

95、160;the usernameIF NLS_LOWER(password) = NLS_LOWER(username) THENraise_application_error(-20001, 'Password same as or similar to user');END IF;- Check for the minimum length of the passwo

96、rdIF length(password) < 4 THENraise_application_error(-20002, 'Password length less than 4');END IF;- Check if the password is too simple. A dictionary of words may be- 

97、maintained and a check may be made so as not to allow the words- that are too simple for the password.IF NLS_LOWER(password) IN ('welcome', 'database', 'ac

98、count', 'user', 'password', 'oracle', 'computer', 'abcd') THENraise_application_error(-20002, 'Password too simple');END IF;- Check if the password contains at lea

99、st one letter, one digit and one- punctuation mark.- 1. Check for the digitisdigit:=FALSE;m := length(password);FOR i IN 1.10 LOOPFOR j IN 1.m LOOPIF substr(password,j,1) =

100、60;substr(digitarray,i,1) THENisdigit:=TRUE;GOTO findchar;END IF;END LOOP;END LOOP;IF isdigit = FALSE THENraise_application_error(-20003, 'Password should contain at least one digit, one character and&

101、#160;one punctuation');END IF;- 2. Check for the character<<findchar>>ischar:=FALSE;FOR i IN 1.length(chararray) LOOPFOR j IN 1.m LOOPIF substr(password,j,1) = substr(chararray,i,1) THENisc

102、har:=TRUE;GOTO findpunct;END IF;END LOOP;END LOOP;IF ischar = FALSE THENraise_application_error(-20003, 'Password should contain at least one digit, one character and one punctuation');END IF;- 3. Check for the punctuation<<findp

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论