一:概述
Oracle系统中的profile可以用来对用户所能使用的数据库资源进行限制,使用CreateProfile命令创建一个Profile,用它来实现对数据库资源的限制使用,如果把该profile分配给用户,则该用户所能使用的数据库资源都在该profile的限制之内。
注意事项:
1:建立PROFILE时,如果只设置了部分口令或资源限制选项,其他选项会自动使用默认值(DEFAULT的相应选项)
2:建立用户时,如果不指定PROFILE选项,oracle会自动将DEFAULT分配给相应的数据库用户
3:每个用户只能分配一个PROFILE.如果要同时管理用户的口令和资源,那么在建立PROFILE时应该同时指定口令和资源选项.
4:使用PROFILE管理口令时,口令管理选项总是处于被激活状态,但如果使用PROFILE管理资源,必须要激活资源限制.
二:相关操作
1:创建profile文件
createprofile 文件名
limit
[限制条件…]
例如:
createprofilemyProfile --创建一个名为myProfile的profile文件
limit
password_reuse_time=30, --限制密码使用的时间为30天
password_reuse_max=10, --限制修改密码宽限的时间为10天
failed_login_attempts5, --限制错误登陆次数为5次
password_lock_time=3; --限制锁定时间为3天
注意事项:
必须要有createprofile权限,才能创建profile。
2:删除profile文件
dropprofile文件名[cascade];
例如:
dropprofilemyProfilecascade; --删除名为myProfil的profile文件
注意事项:
1> 已分配的profile,删除时必须加cascade选项。
2> 必须要有createprofile权限,才能创建profile。
3> DEFAULT为默认profile,不能删除
3:修改profile文件
alterprofile文件名
limit
[限制条件…];
例如:
alterprofilemyProfile --修改名为myProfile的profile文件
limit
password_reuse_time=60, --修改限制密码使用的时间为60天
password_reuse_max=5, --修改限制修改密码宽限的时间为5天
failed_login_attempts3, --修改限制错误登陆次数为3次
password_lock_time=5; --修改限制锁定时间为5天
4:给制定用户分配profile文件
alteruser用户名profile文件名;
例如
alteruseruser1profilemyProfile; --为名为user1的用户分配名为myProfile的profile文件
5:查看指定的profile文件内容
select[限定条件…]|*fromdba_profileswhereprofile=文件名;
例如:
select
password_lock_time
fromdba_profile
whereprofile=’myProfile’
三:profile文件参数详解
● FAILED_LOGIN_ATTEMPT:设定登录到ORACLE数据库时可以失败的次数。一旦某用户尝试登录数据库的达到该值时,该用户的帐户就被锁定,只能由DBA能解锁。
● PASSWORD_LIFE_TIME:设定口令的有效时间(天数),一旦超过这一时间,必须重新设口令。缺省为UNLIMITED.
● PASSWORD_REUSE_TIME:许多系统不许用户重新启用过去用过的口令。该资源项设定了一个失效口令要经过多少天,用户才可以重新使用该口令。缺省为UNLIMITED.
● PASSWORD_REUSE_MAX:重新启用一个先前用过的口令前必须对该口令进行重新设置的次数(重复用的次数)。
● PASSWORD_LOCK_TIME:设定帐户被锁定的天数(当登录失败达到FAILED_LOGIN_ATTEMPTS时)。
● PASSWORD_GRACE_TIME:设定在口令失效前,给予的重新设该口令的宽限天。当口令失效之后回,在登录时会出现警告信息显示该天数。如果没有在宽限天内修改口令,口令将失效。
● PASSWORD_VERITY_FUNCTION:该资源项允许调用一个PL/SQL来验证口令。ORACLE公司已提供该应用的脚本,但是只要愿意的话,用户可以制定自己的验证脚本。该参数的设定就是PL/SQL函数的名称。缺省为NULL.
● SESSION_PER_USER:用户可以同时进行的会话(连接到Oracle)的最大数目。如果用户达到该限制,则在下一次登录时产生一条错误信息。
● CPU_PER_SESSION:用户在一次数据库会话期间可以占用的CPU时间总量(单位为:1%秒)。当达到该时间限制之后,用户就不能在会话中执行任何操作了。用户必须断开与Oracle的连接再重新建立连接以使该CPU累计器复位。
● CPU_PER_CALL:该资源表示用户可用的CPU时间总量(单位为:1%秒),与CPU_PER_SESSION不同,该资源是以每次调用(SQL语句)为基准来限制的,而不是以每次会话为基准的。无论何时,只要一个SQL语句达到该限制,该语句就以错误信息结束。不像CPU_PER_SESSION那样,用户不需断开与ORACLE的连接。当使用CPU_PER_CALL时,只要没有超出参数限定的时间用户就可以做新的查询。
● LOGICAL_READS_PER_SESSION:在一次给定的数据库会话期间能够进行的逻辑读(以数据库块为单位)的次数。如果超出该参数的限定。用户仍然可以工作,但只要他不进行读就可以。要想复位,用户必须断开数据库连接再重新连接才行。
● LOGICAL_READS_PER_CALL:在一次CPU调用(SQL语句)期间,可以读取的数据库块数,如果数据库的逻辑读超过了该设定值,则操作就被拒绝。
● IDLE_TIME:可以指定用户在数据库被终止之前,可以让连接处于多长的空闲状态(以分钟为单位)一个被终止的数据库连接可能不易被用户察觉,因为该资源并不终止任何应用程序。只有到用户试图下次执行某个操作时(如查询),他才会认识到该连接已被终止了。假设一用户已登到sqlplus并空闲了2小时,由于IDLE_TIME设为60(=1小时),则该用户的连接在第一小时之后就被终止了,但该用户仍可看到sqlplus,只是不能工作罢了。
● CONNECT_TIME:该资源用于限定用户可以和数据库连接的时间总量。和IDLE_TIME,该资源也是以分钟为单位,当连接时间超出该设置时,该连接就被终止。
● PRIVATE_SGA:表示用户私有的SQL区的大小(以块为单位)。确省为UNLIMITED.
● COMPOSITE_LIMIT:是一项复杂的资源项。利用该项可以对所有混合资源限定作出设定。可把它看成资源成本值。该成本值让用户能够确定在设置资源限制时哪些资源项比较重要。
注意事项:(关于COMPOSITE_LIMIT的说明)
在确定资源成本时,只有一下资源项有用:
.CPU_PER_SESSION
.LOGICAL-READS_PER_SESSION
.CONNECT_TIME
.PRIVATE_SGA
如果某一资源项的资源成本为0,则该资源就没有成本。但是除0以外,都可用Alterresourcecost命令把值赋给资源项。
如:alterresourcecostconnect_time10;
在本例中,每连接1分钟的成本是10个混合资源限制点,当混合资源限制点数据超过该参数的设定时,数据库连接即被终止。
假设用户具有以下资源成本:
CPU_PER_SESSION1
CONNECT_TIME50
LOGICAL_READS_PER_SESSION0
PRIVATE_SGA10
并且当前的混合资源限制如下:
COMPOSITE_LIMIT 15000
则该用户可以用的资源加在一起不得超过由数据库管理员设定的COMPOSITE_LIMIT值15000。在这种情况下,用户在其私有的SQL区(PRIVATE_SGA_PER_SESSION)中能够占用的CPU时间为15000(150秒)(CPU_PER_SESSION)或者1500块(1500*10=15000)。当任何资源合成达到该限定值时,会话即被终止。这里CONNECT_TIME的值被设置为0,它并不占用总的COMPOSITE_LIMIT。
可以同时采用混合限制和明确的限制,如:
IDLE_TIME180
CONNECT_TIME600
CPU_PER_CALL750
COMPOSITE_LIMIT10000
在本例中,如果空闲超过180分钟,或者一次会话的总连接时间超过600分钟,或者执行一个SQL语句所耗的CPU时间超过750(7.5秒),或者混合资源限制超过10000,则配置文件就终止会话。在ORACLE中,只要IDLE_TIME,CONNECT_TIME,或CPU_PER_CALL的值没有超过限定值,则把COMPOSITE_LIMIT的值用做终止标志。如果这些值超出限定值,不管COMPOSITE_LIMIT的值多大,会话都会中断连接。