在之前的Blog里,讲了Oracle用户和角色的一些概念,但是没有讲属性profile的信息。
Oracle用户及角色介绍
在Profile文件里保存了一些资源的限制信息。如果在创建用户时指定了profile。 那么用户就不能超过profile里指定的资源。
1.一些注意事项
(1)创建profile需要CREATE PROFILE的权限。
(2)当为用户指定profile资源限制时,需要启用动态资源限制参数:RESOURCE_LIMIT。该参数默认是False.
ALTER SYSTEM SET RESOURCE_LIMIT=TRUE SCOPE=BOTH;
当该参数设置为True时,profile中的参数生效。 当设置为False,Profile中一些参数设置不能生效。
注意,该参数不对密码资源受限制。密码资源限制永远是生效的。
2.创建自己的Profile:
create profile "profile_personal" limit
composite_limit unlimited
sessions_per_user unlimited
cpu_per_session unlimited
cpu_per_call unlimited
logical_reads_per_session unlimited
logical_reads_per_call unlimited
idle_time unlimited
connect_time unlimited
private_sga unlimited
failed_login_attempts unlimited
password_life_time 7776000/86400
password_reuse_time 86400/86400
password_reuse_max 5
password_lock_time unlimited
password_grace_time unlimited ;
验证:
SQL> select * from dba_profiles where profile='PROFILE_PERSONAL';
PROFILERESOURCE_NAMERESOURCE LIMIT
------------------------------ -------------------------------- -------- -------
PROFILE_PERSONALCOMPOSITE_LIMITKERNELUNLIMIT
PROFILE_PERSONALSESSIONS_PER_USERKERNELUNLIMIT
PROFILE_PERSONALCPU_PER_SESSIONKERNELUNLIMIT
PROFILE_PERSONALCPU_PER_CALLKERNELUNLIMIT
PROFILE_PERSONALLOGICAL_READS_PER_SESSIONKERNELUNLIMIT
PROFILE_PERSONALLOGICAL_READS_PER_CALLKERNELUNLIMIT
PROFILE_PERSONALIDLE_TIMEKERNELUNLIMIT
PROFILE_PERSONALCONNECT_TIMEKERNELUNLIMIT
PROFILE_PERSONALPRIVATE_SGAKERNELUNLIMIT
PROFILE_PERSONALFAILED_LOGIN_ATTEMPTSPASSWORD UNLIMIT
PROFILE_PERSONALPASSWORD_LIFE_TIMEPASSWORD 90
PROFILERESOURCE_NAMERESOURCE LIMIT
------------------------------ -------------------------------- -------- -------
PROFILE_PERSONALPASSWORD_REUSE_TIMEPASSWORD 1
PROFILE_PERSONALPASSWORD_REUSE_MAXPASSWORD 5
PROFILE_PERSONALPASSWORD_VERIFY_FUNCTIONPASSWORD DEFAULT
PROFILE_PERSONALPASSWORD_LOCK_TIMEPASSWORD UNLIMIT
PROFILE_PERSONALPASSWORD_GRACE_TIMEPASSWORD UNLIMIT
16 rows selected.
SQL>
3.在创建用户时指定Profile:
SQL> create user dave identified by dave default tablespace users temporary tablespace temp profile profile_personal;
验证:
SQL> select username,profile from dba_users where username='DAVE';
USERNAMEPROFILE
------------------------------ ------------------------------
DAVEPROFILE_PERSONAL
4.修改用户的Profile
SQL>ALTER USER dave PROFILE default;
验证:
SQL> select username,profile from dba_users where username='DAVE';
USERNAMEPROFILE
------------------------------ ------------------------------
DAVEDEFAULT
5.修改Profile属性
我们可以通过dba_profiles查询profile信息,但是不能通过该表进行修改。 修改profile需要如下命令:
SQL>alter profile PROFILE_PERSONAL limit FAILED_LOGIN_ATTEMPTS UNLIMITED;
在这里举FAILED_LOGIN_ATTEMPTS这个为例,是因为这个参数与我们DB密切关心。 因为这个参数默认是10.即当我们用户连续10次输入错误密码,这个用户就会被锁住。
所以一般在生产环境下,会根据具体情况设置这个参数,如果防止用户被锁,则将这个参数设置为UNLIMITED。 这个是注意的地方。
用户连词失败次数是在表USER$中的lcount字段记录的。 该值默认为0.当失败一次,该值加1.成功登录,该值清零。
SQL> select name,lcount from user$ where name='SYSTEM';
NAMELCOUNT
------------------------------ ----------
SYSTEM0
SQL> conn system/1;
ERROR:
ORA-01017: invalid username/password; logon denied
Warning: You are no longer connected to ORACLE.
SQL> conn system/2;
ERROR:
ORA-01017: invalid username/password; logon denied
SQL> conn system/3;
ERROR:
ORA-01017: invalid username/password; logon denied
SQL> conn system/4;
ERROR:
ORA-01017: invalid username/password; logon denied
SQL> conn / as sysdba;
Connected.
SQL> select name,lcount from user$ where name='SYSTEM';
NAMELCOUNT
------------------------------ ----------
SYSTEM4
SQL> conn system/oracle;
Connected.
SQL> conn / as sysdba;
Connected.
SQL> select name,lcount from user$ where name='SYSTEM';
NAMELCOUNT
------------------------------ ----------
SYSTEM0