打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Oracle 用户管理与权限分配

用户与模式的关系

Oracle数据库的安全保护流程可以分为3个步骤。首先,用户向数据库提供身份识别信息,即提供一个数据库账号。接下来用户还需要证明他们所给出的身份识别信息是有效的,这是通过输入密码来实现的,用户输入的密码经过数据库的核对确认用户提供的密码是否正确。最后,假设密码是正确的,那么数据库认为身份识别信息是可信赖的。此时,数据库将会在基于身份识别信息的基础上确定用户所拥有的权限,即用户可以对数据库执行什么操作。因此,为了确保数据库的安全,首要的问题就是对用户进行管理。
这里所有的用户并不是数据库的操作人员,而是在数据库中定义的一个名称,更准确地说它是账户,只是习惯上称其为用户,它是Oracle数据库的基本访问控制机制,当连接到Oracle数据库时,操作人员必须提供正确的用户名和密码。
连接到数据库的用户所具有的权限是不同的,Oracle提供了一些特权用户,比如,SYSDBA或SYSOPER,这类用户主要用于执行数据库的维护操作,如启动数据库、关闭数据库、建立数据库,以及执行备份和恢复等操作。SYSDBA和SYSOPER的区别在于:SYSDBA不仅具备SYSOPER的所有权限,而且还可以建立数据库,执行不完全恢复。在Oracle 11g中,Oracle提供了默认的特权用户SYS,当以特权用户身份登录数据库时,必须带有AS SYSDBA或AS SYSOPER选项。例如;

SQL> connect system/1qaz2wsx as sysdba;已连接。
  • 1
  • 2

与用户密切关系的另一个概念是模式,模式也称作方案(Schema)。模式或方案实际上是用户所拥有的数据库对象的集合。在Oracle数据库中,对象是以用户来组织的,用户与模式是一一对应的关系,并且两者名称相同。
SCOTT用户拥有的所有对象都属于SCOTT模式,而HR用户拥有的所有对象都属于HR模式。


当访问数据库对象时,需要注意如下一些事项:

  • 在同一个模式中不能存在同名对象,但是不同模式中的对象名称则可以相同。
  • 用户可以直接访问其它模式对象,但如果要访问其它模式对象,则必须具有该对象的相应访问权限。例如,用户SCOTT可以直接查看其模式中的EMP表,但如果用户HR要查看SCOTT模式中的EMP表时,则必须在EMP表上具有SELECT操作的权限。
  • 当用户要访问其它模式对象时,必须附加模式名作为前缀。

创建与管理用户

Oracle为用户账户提供了三种身份验证方法。
密码验证 当一个使用密码验证机制的用户视图连接到数据库时,数据库会核实用户名是否是一个有效的数据库账户,并且提供与该用户在数据库中存储的密码相匹配的密码。由于用户信息和密码都存储在数据库内部,所以使用密码验证用户也称为数据库验证用户。
外部验证外部验证是指当用户试图连接到数据库时,数据库会核实用户名是否是一个有效的数据库账户,并且确认该用户已经完成了操作系统级别的身份验证。
注意:外部验证用户并不在数据库中存储一个验证密码。
全局验证全局验证是指用户不在数据库中存储验证密码,而是通过一种高级安全选项所提供的身份验证服务来进行的。
在上述的三种验证方式中,密码验证是最常使用的验证方法。

创建用户

要创建一个新的用户,可采用CREATE USER命令。其语法格式如下:

create user user_name identified by pass_word[or identified exeternally][or identified globally as ‘CN=user’][default tablespace tablespace_default][temporary tablespace tablespace_temp][quota [integer k[m]] [unlimited] ] on tablesapce_ specify1[,quota [integer k[m]] [unlimited] ] on tablesapce_ specify2[,…]…on tablespace_specifyn[profiles profile_name][account lock or account unlock]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

参数说明如下:

  • user_name:用户名,一般为字母数字型和“#”及“_”符号。
  • pass_word:用户口令,一般为字母数字型和“#”及“_”符号。
  • identified exeternally:表示用户名在操作系统下验证,这种情况下要求该用户必须与操作系统中所定义的用户名相同。
  • identified globally as ‘CN=user’:表示用户名由Oracle安全域中心服务器验证,CN名字表使用户的外部名。
  • [default tablespace tablespace_default]:表示该用户在创建数据对象时使用的默认表空间
  • [temporary tablespace tablespace_temp]:表示该用户所使用的临时表空间。
  • [quota [integer K[M]] [unlimited]] on
    tablespace_specify1:表示该用户在指定表空间中允许占用的最大空间。
  • [profiles profile_name]:资源文件的名称。
  • [account lock or account unlock]:用户是否被加锁,默认情况下是不加锁的。
    (1)创建用户,并指定默认表空间和临时表空间。
----创建一个mr用户,口令为mrsoft,并设置默认的表空间为users,临时表空间为temp的用户SQL> create user mr identified by mrsoft  2  default tablespace users  3  temporary tablespace temp;
  • 1
  • 2
  • 3
  • 4

(2)创建用户,并配置其在指定表空间上的磁盘限额。有时,为了避免用户在创建表和索引对象时占用过多的空间,可以配置用户在表空间上的磁盘限额。在创建用户时,可通过QUOTA xxxM ON tablespace_ specify子句配置指定表空间的最大可用限额,下面来看一个例子。

----创建一个用户east,口令为mrsoft,默认表空间为users,临时表空间为temp的用户,并指定该用户在tbsp_1表空间上最多可使用的大小为10mSQL> create user east identified by mrsoft  2  default tablespace users  3  temporary tablespace temp  4  quota 10m on tbsp_1;
  • 1
  • 2
  • 3
  • 4
  • 5

说明:如果要禁止用户使用某个表空间,则可以通过quota关键字设置该表空间的使用限额为0。
(3)创建用户,并配置其在指定表空间上不受限制,如果要设置用户在指定表空间上不受限制,可以使用QUOTA UNLIMITED ON tablespace_ specify子句。

----创建一个用户名为df,口令为mrsoft,临时表空间为temp,默认表空间为tbsp_1,并且该用户使用tbsp_1表空间不受限制SQL> create user df identified by mrsoft  2  default tablespace tbsp_1  3  temporary tablespace temp  4  quota unlimited on tbsp_1;
  • 1
  • 2
  • 3
  • 4
  • 5

在创建完用户之后,需要注意以下几点:
- 如果建立用户时不指定DEFAULT TABLESPACE子句,Oracle会将SYSTEM表空间作为用户默认表空间。
- 如果建立用户时不能指定TEMPORARY TABLESPACE子句,Oracle会将数据库默认临时表空间作为用户的临时表空间。
- 初始建立的用户没有任何权限,所以为了是用户可以连接到数据库,必须授权其CREATE SESSION权限
- 如果建立用户时没有为表空间指定QUOTA子句,那么用户在特定表空间上的配额为0,用户将不能在相应的表空间上建立数据对象。
- 初始建立的用户没有任何权限,不能执行任何数据库操作。

修改用户

用户创建完后,管理员可以对用户进行修改,包括修改用户口令,改变用户默认表空间、临时表空间、磁盘配额及资源限制等。修改用户的语法与创建的用户的语法基本相似,只是把创建用户语法中的“CREATE”关键字替换成“ALTER”罢了。
修改用户的磁盘限额
如果DBA在创建用户时,指定了用户在某个表空间的磁盘限额,那么经过一段时间,该用户使用该表空间已经达到了DBA所设置的磁盘限额时,Oracle系统就会显示如图13-2所示的错误提示。


表示该用户使用的资源已经超出了限额,DBA需要为该用户适当增加资源。

 ----修改用户east在表空间上的磁盘限额为20m(原始为10m,先增加10m)。SQL> alter user east quota 20m on tbsp_1;
  • 1
  • 2

修改用户的口令
用户的口令在使用一段时间之后,根据系统安全的需要或在PROFILE文件中(资源配置文件)设置的规定,用户必须要修改口令。

----修改用户east的新口令为123456(原始为mrsoft)。SQL> alter user east identified by 123456;
  • 1
  • 2

解锁被锁住的用户
Oracle默认安装完成后,为了安全起见,很多用户处于LOCKED状态,DBA可以对LOCKED状态的用户解除锁定。

----使用alter user命令解除被锁定的账户SH。SQL> alter user SH account unlock;
  • 1
  • 2

删除用户

删除用户通过DROP USER语句完成的,删除用户后,Oracle会从数据字典中删除用户、方案及其所有对象方案,语法如下:

drop user user_name[cascade]
  • 1

参数说明如下:

  • user_name:要删除的用户名。
  • cascade:级联删除选项,如果用户包含数据库对象,则必须加
    CASCADE选项,此时连同该用户所拥有的对象一起删除。
----使用drop user语句删除用户df,并连同该用户所拥有的对象一起删除。SQL> drop user df cascade;
  • 1
  • 2

用户权限管理

权限简介

根据系统管理方式的不同,在Oracle数据库中将权限分为两大类:系统权限和对象向权限。
系统权限是在系统级对数据库进行存取和使用的机制,比如,用户是否能够连接到数据库系统(SESSION权限),执行系统级的DDL语句(如CREAT、ALTER、和DROP)等。
对象权限是指某一个用户对其他用户的表、视图、序列、存储过程、函数、包等的操作权限。不同类型的对象具有不同的对象权限,对于某些模式对象,比如簇、索引、触发器、数据库链接等没有相应的实体权限,这些权限由系统权限进行管理。

授权操作

在Oracle 11g中含有200多种系统特权,并且所有这些系统特权均被列举在SYSTEM_PRIVILEGE_MAP数据目录视图中。授权操作使用GRANT命令,其语法格式如下:

grant sys_privi | role to user | role | public [with admin option]
  • 1

参数说明如下:

  • sys_privi:表示Oracle系统权限,系统权限是一组约定的保留字。比如,若能够创建表,则为“CREATE TABLE”。
  • role:角色,关于角色会在后面小节中介绍。
  • user:具体的用户名,或者是一些列的用户名。
  • public:保留字,代表Oracle系统的所有用户。
  • with admin option:表示被授权者可以再将权限授予另外的用户。
    —-为用户east授予连接和开发系统权限,并尝试使用east连接数据库。
SQL> connect system/1qaz2wsx已连接。SQL> grant connect,resource to east;授权成功。 SQL> connect east/123456;已连接。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

在上面的代码中,使用east连接数据库后,Oracle显示“已连接”,这说明给east授予“connect”的权限是成功的。另外,如果想要east将这两个权限可以传递给其他的用户,则需要在grant语句中使用“with admin option”关键字。

 ----在创建用户dongfang和xifang后,首先system将创建session和创建-table的权限授权给dongfang,然后dongfang再将这两个权限传递给xifang,最后通过xifang这个用户创建一个数据表SQL> create user dongfang identified by mrsoft  2  default tablespace users  3  quota 10m on users; 用户已创建。 SQL> create user xifang identified by mrsoft  2  default tablespace users  3  quota 10m on users; 用户已创建。 SQL> grant create session,create table to dongfang with admin option; 授权成功。 SQL> connect dongfang/mrsoft;已连接。SQL> grant create session,create table to xifang; 授权成功。 SQL> connect xifang/mrsoft;已连接。SQL> create table tb_xifang  2  ( id number,  3    name varchar2(20)  4  ); 表已创建。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

回收系统权限

一般用户若被授予过高的权限就可能给Oracle系统带来安全隐患。作为Oracle系统的管理员,应该能够查询当前Oracle系统各个用户的权限,并且能够使用REVOKE命令撤销用户的某些不要的系统权限,REVOKE命令的语法格式如下:

revoke sys_privi | role from user | role | public
  • 1

参数说明如下:

  • sys_privi:系统权限或角色;
  • role:角色;
  • user:具体的用户名;
  • public:保留字,代表Oracle系统所有的用户;

—- 撤销east用户的resource系统权限,代码及运行结果如下。

SQL> connect system/1qaz2wsx;已连接。SQL> revoke resource from east;撤销成功。
  • 1
  • 2
  • 3
  • 4

如果数据库管理员用GRANT命令给用户A授予系统权限是带有WITH ADMIN OPTION选项,则该用户A有权将系统权限再次授予另外的用户B。在这种情况下,如果数据库管理员使用REVOKE命令撤销A用户的系统权限,则用户B的系统权限仍然有效。
首先撤销用户dongfang的create table权限,然后尝试是否还可以通过用户xifang创建数据表(注:是dongfang将create table权限传递给xifang),代码及运行结果如下。

SQL> revoke create table from dongfang;撤销成功。SQL> connect xifang/mrsoft;已连接。SQL> create table tb_xifang_2  2  ( id number,  3   name varchar2(10)  4  );表已创建。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

对象授权

与将系统权限授予用户基本相同,授予对象权限给用户或角色也使用GRANT命令,其语法格式如下:

Grant obj_privi | all column on schema.object to user | role | public [with grant option] | [with hierarchy option]
  • 1

参数说明如下:

  • obj_privi:表示对象的权限,可以是ALTER、EXECUTE、SELECT、UPDATE和INSERT等;
  • role:角色名;
  • user:被授权的用户名;
  • with admin option:表示被授权者可再将系统权限授予其他的用户;
  • with hierarchy option:在对象的子对象(在视图上再建立视图)上授权给用户。
----给用户xifang授予select、insert、delete和update表soctt.emp的权限。SQL> grant select,insert,delete,update on scott.emp to xifang;授权成功。
  • 1
  • 2
  • 3

回收对象权限

要从用户或角色中撤销对象权限,仍然要使用REVOKE命令,其语法格式如下:

revoke obj_privi | all on schema.object from user | role | public cascade constraints
  • 1

参数说明如下:

  • obj_privi:表示对象的权限。
  • public:保留字,代表Oracle系统的所有权限。
  • cascade ascade constraints:表示有关联关系的权限也被撤销。
----从xifang用户撤销scott.emp表的update和delete权限。SQL> connect system/1qaz2wsx;已连接。SQL> revoke delete,update on scott.emp from xifang;撤销成功。
  • 1
  • 2
  • 3
  • 4
  • 5

说明:如果数据库管理员GRANT命令给用户A授予对象权限时带有WITH ADMIN OPTION选项,则该用户A有权将权限再次授予另外的用户B。在这种情况下,如果数据库管理员用REVOKE命令撤销A用户的对象权限时,用户B的对象权限也被撤销。由此可见,在进行系统权限回收和进行对象权限回收时,效果是不同的。

查询用户与权限

用户被授予的系统权限或对象权限都被记录在Oracle的数据字典里,了解某个用户被授予哪些系统权限和对象权限是确保应用系统安全的重要工作。表是Oracle 11g用于存放用户、系统权限、对象权限有关的数据字典。

角色管理

角色简介

角色是一个独立的数据库实体,它包括一组权限。也就是说,角色是包括一个或者多个权限的集合,它并不被哪个用户所拥有。角色可以被授予任何用户,也可以从用户中将角色收回。
使用角色可以简化权限的管理,可以仅用一条语句就能从用户那里授予或回收权限,而不必对用户一一授权。使用角色还可以实现权限的动态管理,比如,随着应用的变化可以增加或者减少角色的权限,这样通过改变角色的权限,就实现了改变多个用户的权限。
角色、用户及权限是一组关系密切的对象,既然角色是一组权限的集合,那么,它只有被授予某个用户才能有意义,可以用如图所示的图形来帮助我们理解角色、用户及权限的关系。

作为Oracle的数据库管理员,在创建和管理用户时,必须理解Oracle的权限与角色的关系。在复杂的大型应用系统中,要求对应用系统功能进行分类,从而形成角色的雏形,再使用CREATE ROLE语句将其创建成为角色;最后根据用户工作的分工,将不同的角色(包括系统预定义的角色)授予各类用户。如果应用系统的规模很小,用户数也不多,则可以直接将应用的权限授予用户,即使是这样,用户也必须对Oracle系统的预定义角色有所了解,因为一个用户至少被授予一个以上的预定义角色时才能使用ORACLE系统资源。
另外,在创建角色时,可以为角色设置应用安全性。角色的安全性通过为角色设置口令进行保护,必须提供正确的口令才允许修改或设置角色。

预定义角色

所谓系统预定义角色是指在数据库安装完成后由系统自动创建的一些常用角色,这些角色已经由系统授予了相应的系统权限,可以由数据库管理员直接使用。一旦将这些角色授予用户以后,用户便具有了角色中所包含的系统权限。下面列出的这几个系统预定义角色是最常被用到的。

  • CONNECT;
  • RESOURCE;
  • DBA;
  • EXP_FULL_DATABASE;
  • IMP_FULL_DATABASE。

    角色CONNECT,RESOURCE及DBA主要用于数据库管理,这3个角色之间相互没有包含关系(有些系统权限可能有重叠)。数据库管理员需要分别授予CONNECT,RESOURCE和DBA角色。对于一般的数据库开发人员,则需要授予CONNECT,RESOURCE角色。
    角色IMP_FULL_DATABASE和EXP_FULL_DATABASE分别用于操作数据库的导入或导出工具,如,操作数据库工具EXPDP,IMPDP,或者系统的EXP,IMP。在使用这些工具进行整个数据库的到导出与导入工作时,需要具备这两个角色。

不同版本的Oracle预定义的角色不一样多,但都可以从DBA_ROLES数据字典中查询到,下面通过该数据字典来看一下Oracle 11g的预定义系统角色有哪些。

----使用select语句查询dba_roles数据字典中的角色信息。SQL> set pagesize 50;SQL> select * from dba_roles;
  • 1
  • 2
  • 3

创建角色与授权

如果系统预定义的角色不符合用户需要,那么,数据库管理员可以创建更多的角色,创建用户自定义角色可以使用CREATE ROLE语句来实现,其语法格式如下:

create role role_name [ not identified | identified by [password] | [exeternally] | [globally]]
  • 1

参数说明如下:

  • role_name:角色名;
  • identified by password:角色口令;
  • identified by exeternally:表示角色名在操作系统下验证;
  • identified globally:表示用户是Oracle安全域中心服务器来验证,此角色由全局用户来使用。
----创建一个名为designer的角色,该角色的口令为123456。SQL> connect system/1qaz2wsx;已连接。SQL> create role designer identified by 123456;
  • 1
  • 2
  • 3
  • 4

一旦角色创建完成,就可以对角色进行授权,给角色授权也是使用GRANT…TO语句来实现的。如果系统管理员具有GRANT_ANY_PRVILEGE权限,就可以对某个角色进行授权。比如,授权CREATE SESSION,CREATE SYNONYM,CREATE VIEW等。

----给designer角色授予create view和create table权限。SQL> grant create view,create table to designer;
  • 1
  • 2

在角色获得了权限之后,就可以把这个有使用价值的角色授予给某个用户了。把角色授予给某个用户仍然使用GRANT…TO语句来实现。

 ----把designer角色授权给用户dongfang,代码及运行结果如下。SQL> grant designer to dongfang;
  • 1
  • 2

管理角色

在学习过管理用户(包括创建、修改、删除等操作)之后,再学习如何管理角色就相对简单多了,因为这二者之间有很多相似之处,这里仅通过一些简单实例来对角色的管理进行说明。
查看角色所包含的权限
查看角色权限通常使用ROLE_SYS_PRIVS数据字典,来看下面的例子。

----查询角色designer被属于的权限有哪些。SQL> select * from role_sys_privs where role = 'DESIGNER';
  • 1
  • 2

修改角色密码
修改角色密码包括取消角色密码和修改角色密码两种情况,可以使用ALTER ROLE语句来实现。

 ----首先取消designer角色的密码,然后再重新给该角色设置一个密码。SQL> alter role designer not identified;角色已丢弃。SQL> alter role designer identified by mrsoft;角色已丢弃。
  • 1
  • 2
  • 3
  • 4
  • 5

设置当前用户要生效的角色
角色的生效是一个什么概念呢?假设用户a有b1,b2,b3三个角色,那么,如果b1未生效,则b1所包含的权限对于a来讲是不拥有的,只有角色生效了,角色内的权限才作用于用户,最大可生效角色数由参数MAX_ENABLED_ROLES设定;用户登录后,Oracle将所有直接赋值给用户的权限和用户默认角色中的权限赋给用户。设置角色生效可使用SET ROLE语句。
创建一个无需密码验证的角色queryer,然后设置该角色生效,接下来再设置带有密码的角色designer也生效。

SQL> create role queryer;角色已创建。SQL> set role queryer;角色集SQL> set role designer identified by mrsoft;角色集
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

说明:如果要设置带有密码的角色生效,则必须在SET ROLE语句后面使用“IDENTIFIED BY”关键字指定角色的密码。
删除角色
删除角色很简单,使用DROP ROLE语句即可实现,来看下面的例子。

----使用drop role语句删除角色queryer。SQL> drop role queryer;角色已删除。
  • 1
  • 2
  • 3

删除角色后,原来拥有该角色的用户将不再拥有该角色,相应的权限也将失去。

角色与权限查询

创建角色和用户以后,给角色和用户授予的权限被记录在Oracle数据字典里,作为Oracle数据库管理员,需要了解角色被授予了哪些权限及用户被授予了哪些权限和角色,从而对这个数据库的所有用户进行全面的管理,如表所示是Oracle 11g用于存放用户、角色及权限的相关数据字典。

----查询HR用户被授予的系统角色。SQL> select granted_role,default_role from dba_role_privs  2  where grantee = 'HR';
  • 1
  • 2
  • 3

在某个模式下,如果用户要确定当前会话中的所有有效角色,可以通过SESSION_ROLE数据字典来查询。

----在scott模式下,查询当前用户的所有有效角色。SQL> connect scott/1qaz2wsx;已连接。SQL> select * from session_roles;
  • 1
  • 2
  • 3
  • 4

资源配置PROFILE

PROFILE简介

PROFILE作为用户配置文件,它是密码限制、资源限制的命名集合。PROFILE文件作为Oracle安全策略的重要组成部分,利用它可以对数据库用户进行基本的资源限制,并且可以对用户的密码进行管理。
在安装数据库时,Oracle会自动建立名为DEFAULT的默认配置文件。如果没有为新创建的用户指定DEFAULT文件,Oracle将自动为它指定DEFAULT配置文件。初始的DEFAULT文件没有进行任何密码和资源限制。使用PROFILE文件时需要注意如下事项。

  • 建立用户时,如果不指定PROFILE选项,Oracle会自动将DEFAULT分配给相应的数据库用户。
  • 建立PROFILE文件时,如果只设置了部分密码和资源限制选项,其他选项会自动使用默认值,即使DEFAULT文件中有相应选项的值。
  • 使用PROFILE管理密码时,密码管理选项总是处于被激活状态,但是如果使用PROFILE管理资源,必须要激活资源限制。
  • 一个用户只能分配一个PROFILE文件。如果要同时管理用户的密码和资源,那么在建立PROFILE时应该同时指定密码和资源选项。

使用PROFILE管理密码

当操作人员要连接到Oracle数据库时,需要提供用户名和密码。对于黑客或某些人而言,他们可能通过猜测或反复实验来破解密码。为了加强密码的安全性,可以使用PROFILE文件管理密码。PROFILE文件提供了一些密码管理选项,他们提供了强大的密码管理功能,从而确保密码的安全。为 了实现密码限制,必须首先建立PROFILE文件。建立PROFILE文件是使用CREATE PROFILE语句完成的, 一般情况下,该语句是由DBA执行的,如果要以其他用户身份建立PROFILE文件,则要求该用户必须具有CREATE PROFILE系统权限。
使用PROFILE文件可以实现如下四种密码管理:账户锁定、密码的过期时间、密码历史和密码的复杂度。
1.账户锁定
账户的锁定策略是指用户在连续输入多少次错误密码后,Oracle会自动锁定用户的账户,并且可以规定账户的锁定时间。Oracle为锁定账户提供了以下两个参数。

  • FAILED_LOGIN_ATEMPTS 该参数限制用户在登录到Oracle数据库时允许失败的次数。一旦某个用户尝试登陆数据库的次数达到该值,则系统将该用户账户锁定。
  • PASSWORD_LOCK_TIME 该参数用于指定账户被锁定的天数。
---- 创建的profile文件,要求设置连续失败次数为5,超过该次数后,账户将被锁定7天,然后使用alter user语句将profile文件(即lock_account)分配给用户dongfang。SQL> create profile lock_account limit  2  failed_login_attempts 5  3  password_lock_time 7;配置文件已创建SQL> alter user dongfang profile lock_account;用户已更改。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

在建立lock_account文件并将该文件分配给用户dongfang后,如果以用户dongfang身份连接到数据库,并且连续连接失败5次后,Oracle将自动锁定该用户账户。此时,即使为用户dongfang提供了正确的密码,也无法连接到数据库。
在建立lock_account文件时,由于指定password_lock_time的参数为7,所以账户锁定天数达到7天后,Oracle会自动解锁账户。
说明:如果建立PROFILE文件时没有提供该参数,将自动使用默认值UNLIMITED,这种情况下,需要DBA手动解锁用户账户。

2.密码的过期时间
密码的过期时间是指强制用户定期修改自己的密码,当密码过期后,Oracle会随时提醒用户修改密码。密码宽限期是指密码到期之后的宽限使用时间。默认情况下,建立用户并为其提供密码之后,密码会一直生效。为了防止其他人员破解用户账户的密码,可以强制普通用户定期改变密码。为了将强制用户定期修改密码,Oracle提供了如下参数。

  • PASSWORD_LIFE_TIME 该参数用于设置用户密码的有效时间,单位为天数。超过这一段时间,用户必须重新设置口令。
  • PASSWORD_GRACE_TIME 该参数用于设置口令失效的“宽限时间”。如果口令到达PASSWORD_LIFE_TIME设置的失效时间,设置宽限时间后,用户仍然可以继续使用一段时间。
----下面创建一个profile文件(即password_lift_time),并设置用户的密码有效期为30天,密码宽限期为3天,然后使用alter user语句将profile文件(即password_lift_time)分配给用户dongfang。SQL> create profile password_lift_time limit  2  password_life_time 30  3  password_grace_time 3;配置文件已创建SQL> alter user dongfang profile password_lift_time;用户已更改。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

若果用户在30天内没有修改密码,那么在第31天、第32天、第33天连接时,仍然会显示类似的警告信息。如果在33天内仍然没有修改密码,那么当第34天连接时,Oracle会强制用户修改密码,否则不允许连接到数据库。
3.密码历史
密码历史是用于控制账户密码的可重复使用次数或可重用时间。使用密码历史参数后,Oracle会将密码修改信息存放到数据字典中。这样,当修改密码时,Oracle会对新、旧密码进行比较,以确保用户不会重用过去已经用过的密码。关于密码历史有如下两个参数。

  • PASSWORD_REUSE_TIME 该参数指定密码可重用的时间,单位为天。

  • PASSWORD_REUSE_MAX 该参数设置口令在能够被重新使用之前,必须改变的次数。
    说明:在使用密码历史选项时,只能使用其中的一个参数,并将另一个参数设置为UNLIMITED。
    4.密码复杂度
    在PROFILE文件中,可以通过指定的函数来强制用户的密码必须具有一定的复杂度。例如,强制用户的密码不能与用户名相同。使用校验函数验证用户密码的复杂度时,只需要将这个函数的名称指定给PROFILE文件中的PASSWORD_VERIFY_FUNCTION参数,Oracle就会自动使用该函数对用户的密码和格式进行验证。
    在Oracle 11g中,验证密码复杂度功能有新的改进。在$ORACLE_HOME/rdbms/admin目录下创建了一个新的密码验证文件UTLPWDMG.SQL,其中不仅提供了先前的验证函数VERIFY_FUNCTION,还提供了一个新建的VERIFY_FUNCTION_11G函数。

使用PROFILE管理资源

在大而复杂的多用户数据库环境中,因为用户众多,所以系统资源可能会成为影响性能的主要瓶颈,为了有效地利用系统资源,应该根据用户所承担任务的不同为其分配合理资源。PROFILE不仅可用于管理用户密码,还可以用于管理用户资源。需要注意,如果是使用PROFILE管理资源,必须将RESOURCE_LIMIT参数设置为TRUE,以激活资源限制。由于该参数是动态参数,所以可以使用ALTER SYSTEM语句进行修改。

----首先使用show命令查看RESOURCE_LIMIT参数的值,然后使用alter system命令修改该参数的值为true,从而激活资源限制。SQL> show parameter resource_limit;NAME                TYPE            VALUE--------------------        -----------         ------resource_limit          boolean         FALSESQL> alter system set resource_limit=true;系统已更改。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

利用PROFILE配置文件,可以对以下系统资源进行限制:

  • CPU时间:为了防止无休止地使用CPU时间,限制用户每次调用是使用的CPU时间以及在一次会话期间所使用的CPU时间。
  • 逻辑读:为了防止过多使用系统的I/O操作,限制每次调用即会话时读取的逻辑数据块数目。
  • 用户的并发会话数。
  • 会话空闲的限制:当一个会话空闲的时间达到了限制值时,当前事务被回滚,会话被终止并且所占用的资源被释放。
  • 会话可持续的时间:如果一个会话的总计连接时间达到了该限制值,当前事务被回滚,会话被终止并释放所占用的资源。
  • 会话所使用的SGA空间限制。

当一个会话或SQL语句占用的资源超过PROFILE文件中的限制时,Oracle将终止并回退当前的事务,然后向用户返回错误的信息,如果受到的限制是会话级的,在提交或回退事务后,用户会话将被终止;而受到调用级限制时,用户会话还能够继续进行,只是当前执行的SQL语句将被终止。下面是PROFILE文件中对各种资源限制的参数。

  • SESSION_PER_USER:用户可以同时连接的会话数量。如果用户的连接数达到该限制,则试图登录时将产生一条错误信息。
  • CPU_PER_SESSION:限制用户再一次数据库会话期间可以使用的CPU时间,单位为百分之一秒。当达到该时间值后,系统就会终止该会话。如果用户还需要执行操作,则必须重建立连接。
  • CUP_PER_CALL:该参数用户限制每条SQL语句所能使用的CPU时间,参数值是一个整数,单位百分之一秒。
  • LOGICAL_READS_PER_SESSION:限制每个会话所能读取的数据块数量,包括从内存中读取的数据块和从磁盘中读取的数据块。
  • CONNECT_TIME:限制每个用户连接到数据库的最长时间,单位分钟,当连接时间超出该设置时,该链接终止。
  • IDLE_TIME:该参数限制每个用户会话连接到数据库的最长时间。超过该空闲时间的会话,系统会终止该会话。

维护PROFILE文件

在Oracle中,PROFILE文件也是一种数据资源。DBA也可以使用相应的语句对其进行管理,包括修改配置文件、删除配置文件按、激活或禁用配置文件。
1.修改PROFILE文件
在创建PROFILE文件之后,还可以使用ALTER PROFILE语句修改其中的资源参数和密码参数,来看下面的例子。

----对password_lift_time文件(即PROFILE文件)的资源限制参数进行修改。SQL> alter profile password_lift_time limit  2  cpu_per_session 20000  3  sessions_per_user 10  4  cpu_per_call 500  5  password_life_time 180  6  failed_login_attempts 10;配置文件已更改
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

说明:对配置文件所做的修改只有在用户开始新的会话时才会生效

2.删除PROFILE文件
使用DROP PROFILE语句可以删除PROFILE文件。如果要删除的配置文件已经被指定给了用户,则必须在DROP PROFILE语句中使用CASCADE关键字,来看下面的例子。

----删除被分配给dongfang这个用户的password_lift_time配置文件。SQL> drop profile password_lift_time cascade;配置文件已删除。
  • 1
  • 2
  • 3

说明:如果为用户指定的配置文件被删除,则Oracle将自动为用户重新指定DEFAULT配置文件

显示PROFILE信息

在PROFILE文件被创建后,其信息被存储在数据字典中。通过查询这些数据字典,可以了解PROFILE文件的信息。
1.显示用户的资源配置信息
建立或修改用户时,可以为用户分配PROFILE文件,如果没有为用户分配PROFILE文件,Oracle会自动将DEFAULT分配给用户。通过查询数据字典视图DBA_USERS,可以显示用户使用的PROFILE文件,下面来看一个例子。

----显示用户的DONGFANG所使用的PROFILE文件。SQL> select profile from dba_users where username='DONGFANG';PROFILE------------------------LOCK_ACCOUNT
  • 1
  • 2
  • 3
  • 4
  • 5

2.显示指定PROFILE文件的资源配置信息
建立或修改PROFILE文件时,Oracle将会PROFILE参数存放在数据字典中。通过查询DBA_PROFILES,可以显示PROFILE的密码限制、资源限制信息,下面来看一个例子。

----显示RESOURCE_LIMIT文件的密码和资源限制信息。SQL> column limit for a20SQL> select resource_name,resource_type,limit  2  from dba_profiles3  where profile = 'LOCK_ACCOUNT';
  • 1
  • 2
  • 3
  • 4
  • 5
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
初学oracle,表的管理以及一些简单的命令
ORA-28001: the password has expired解决方法
Oracle11G密码180天(默认值)过期后的修改方法
Oracle users / 权限 / grant priv
Oracle 密码丢失解决方法
oracle用户被锁和Oracle 11g存在密码过期问题的原因查找和解决方法
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服