Oracle用户管理是数据库管理员的必备技能,只有数据库管理员才具有创建、修改、删除用户的权限。对用户的管理主要涉及用户权限的管理,根据每个用户的需求不同,分配给每个用户的权限也不一样,如果数据库管理员对于Oracle用户权限分配的合理,会大大提高数据库的安全性,如果对权限的分配不合理,可能给数据库带来安全隐患。Oracle用户管理的主要内容包括:
1、进行Oracle用户的创建、修改、删除。
2、Oracle权限管理:对用户或角色进行授权和撤销授权。
3、Oracle角色管理:对用户设定特定的角色、创建角色并授予角色特定权限、对特定角色进行修改、删除。
4、介绍Oracle概要文件(PROFILE),对特定用户设置特定的概要文件,配置用户对系统资源的访问限制和口令管理。
一、创建用户
Oracle用户创建是Oracle数据库管理员才具有的权限,同理利用具有DBA权限的用户,如SYS、SYSTEM用户具有创建用户的权限。利用create user关键字命令进行用户的创建,具体的语法如下:
- create user username
- identified by "password"
- [default tablespace ts_name]
- [temporary tablespace tempname|tempgroupname]
- [quota n size|unlimited on ts_name]
- [profile DEFAULT/profilename]
- [account lock|unlock]
- [password expire];
语法解析:
1、username:指定创建用户的名字。
2、identified by "password":指定用户的密码为password。
3、default tablespace ts_name:指定用户存储的表空间为TS_NAME。
4、temporary tablespace tempname|tempgroupname:指定用户的临时表空间为tempname,当存在临时表空间组的时候,指定用户的临时表空间组为tempgroupname。
5、quota n size|unlimited on ts_name:指定用户使用表空间的最大值为n,unlimited则表示对表空间使用不限制。
6、profile DEFAULT/profilename:表示指定用户的概要文件。
7、account lock|unlock :指定用户的锁定状态,lock:锁定状态,unlock:解锁状态。
8、password expire:设置当前用户的密码为过期状态,使用户不能登录,要登录必须得重新修改密码。
案例1、利用上面创建用户的命令创建一个teacher用户,代码如下:
- create user teacher--用户名
- identified by "123456"--密码
- default tablespace USERS--表空间名
- temporary tablespace temp --临时表空间名
- quota unlimited on USERS--表空间无限制
- profile DEFAULT --数据文件(默认数据文件)
- account unlock-- 账户是否解锁(lock:锁定、unlock解锁)
通过代码创建好teacher用户,我们可以通过数据字典dba_users查看创建情况,如下图:
二、修改删除用户
Oracle用户创建好后,有时候会随着业务系统的改变,需要对用户的一些信息进行修改,那Oracle数据库是利用关键 字alter user对用户信息进行修改
1、Oracle修改用户的语法结构:
- alter user username
- identified by "password"
- [default tablespace ts_name]
- [temporary tablespace tempname|tempgroupname]
- [quota n size|unlimited on ts_name]
- [profile DEFAULT/profilename]
- [account lock|unlock]
- [password expire];
语法解析:
通过上面修改用户的语法会发现和Oracle创建用户语法相似,这里就不一一解释了,可以参考Oracle创建用户的语法。
案例1、修改用户teacher的密码,代码如下:
- alter user teacher
- identified by "234567";
案例2、通过修改teacher用户的临时表空间,把临时表空间指向临时表空间组tempgroup,代码如下:
- alter user teacher
- temporary tablespace tempgroup;
然后通过查询数据字典dba_users查看下结果:
2、oracle删除用户
数据库经常会存在某些废弃的用户,这个时候可以通过drop user关键字对用户进行删除操作。Oracle删除用户时会一并把该用户下的所有对象进行删除,因此再进行删除操作时,应当谨慎考虑。
Oracle删除用户的语法结构:
- drop user username cascade;
语法解析:
Oracle删除用户的操作很简单,就是通过drop user 关键字和用户名即可删除,这里由于笔者的用户还有用,所以这里就不演示结果了,读者可以自行测试。
三、权限授权管理
Oracle的权限主要有系统权限和对象权限两种。系统权限主要是连接权限(session)、user权限等,系统权限主要是对数据库具有系统级的操作。对象权限,指的是对数据库对象具有特定操作的权限。
Oracle授予权限的对象可以是用户,也可以是角色。授予权限的操作包括授予系统权限或对象权限给用户(或角色)。
我们在进行授予权限时候,要注意,系统权限的授予必须具有DBA权限的用户进行授权。如:sys、system用户。对象权限的授予,可以使用对象所有者的用户进行授权,或者使用具有DBA用户的进行授权。
1、授予系统权限
授予系统权限的语法结构:
- grant system_privilege|all privileges to user|role
- [with admin option]
语法解析:
1、grant system_privilege|all privileges :指定授予什么权限。system_privilege:授予的权限名称,all privileges:指授予所有系统权限。
2、user|role:授予权限给用户还是角色。
3、[with admin option]:指的是当前被授权的用户具有授权给其它用户系统权限的权利。
例1、给用户teacher授予系统的create session权限,代码如下:
- grant create session to TEACHER;
通过查询数据字典dba_sys_privs可以查询一下TEACHER的系统权限。
2、授予对象权限
授予对象权限的语法结构如下:
- grant obj_privilege|all
- on obj_name to user|role
- [with grant option]
语法解析:
1、grant obj_privilege|all:给指定用户授予对象权限,all:指的是授予全部对象权限。
2、on obj_name to user|role:指的是把对象obj_name的权限授予给用户user或者角色role。
3、with grant option:指定是当前被授权的用户具有授权给其它用户该对象权限的权利。这里with grant option对应对象的授权是级联,而对于上面系统权限的with admin option的授权不是级联的,回收该用户的权限,不会把授予给别人的权限收回,而级联授权的就会把对应的权限都收回。
例2、把student用户下的学生信息表(stuinfo)授权给teacher用户,代码如下:
- grant select on student.stuinfo to teacher with grant option;
然后通过查询数据字典dba_tab_privs查看下teacher用户具有的对象权限:
注意:给用户授权时,要注意自己是不能为自己授权的,要么利用第三方具有该对象授权权限的用户进行授权,或者利用具有DBA权限的用户授权。
四、撤销权限
Oracle撤销权限的概念就是对用户或角色的权限的回收,也就是对用户删除某个系统权限或者删除某个对象的操作权限。
1、Oracle撤销系统权限
Oracle撤销系统权限只有具有DBA权限的用户才能进行撤销(revoke)操作。撤销系统权限的语法如下:
- revoke system_privilege from user|role;
语法解析:
1、system_privilege:指的是撤销的系统权限的名称,撤销系统权限时,必须是该用户具有了该系统权限,假如不存在系统权限是不能进行撤销的。
2、user|role:指的是撤销权限的对象是用户还是角色。
例1、利用revoke命令撤销用户teacher的create session权限,代码如下:
- revoke create session from teacher;
然后通过数据字典dba_sys_privs可以查询一下TEACHER的系统权限,发现create session已经不存在了。
2、Oracle撤销对象权限
Oracle撤销对象权限也是利用revoke命令进行的,语法结构如下:
- revoke obj_privilege|all
- on object
- from user|role;
语法解析:
1、obj_privilege|all:指的是对应的数据库对象的操作权限,all表示把所有的操作权限都撤销。
例2、利用revoke命令撤销用户teacher对学生信息表(stuinfo)的delete(删除)的操作权限,代码如下:
- revoke delete on student.stuinfo from teacher ;
然后,通过数据字典dba_tab_privs查询一下stuinfo的操作权限,发现已经删除,只剩下查询权限。
注意:在进行撤销权限时,系统权限的撤销和对象权限的撤销是不一样的,通过上一章Oracle权限授权管理中知道,系统权限的授权不是级联的,对象权限的授权是级联的。在撤销权限时也是一样的,在撤销对象权限时,那么该用户授予给其它用户的对象权限也要跟着收回。而撤销系统权限就不会收回其它用户的权限。
五、Oracle角色
Oracle角色其实就是一组权限的集合,比如我们经常用的DBA、connect、resource等角色,都是Oracle系统为我们定义好的一些常用的角色,一般利用这些角色就可以控制好不同需求用户的权限。
Oracle中角色可以授予给多个用户,并且一个用户可以设置多个角色。因此,Oracle数据库也提供了自定义角色的功能,方便不同用户的权限授予。例如,可以自定义个一个角色,可以查询、更新特定几个关联表的权限。那么以后但凡有用户想用到这些表的操作权限时,可以直接给该用户设置定义好的角色。
1、Oracle创建角色
Oracle创建角色分为两个步骤:创建角色、给角色授权:
A、创建角色的语法结构:
- create role role_name ;
B、授予角色权限的语法结构:
授予角色权限的语法结构和授予用户权限的语法结构一样,只是授予对象是角色而不是对象而已,具体语法如下:
- --授予系统权限
- grant system_privilege|all privileges to role_name
- [with admin option]
- --授予对象权限
- grant obj_privilege|all
- on obj_name to role_name
- [with grant option]
例1、利用上面创建角色的语法结构,创建一个具有操作学生信息表(stuinfo)和班级表(class)权限的角色student_role,具体代码如下:
- --创建角色 student_role
- create role student_role;
- --给student_role授于操作stuinfo、class的操作权限
- grant all on student.stuinfo to student_role;
- grant all on student.class to student_role;
然后,通过数据字典role_tab_privs(角色对应的对象操作权限)、role_sys_privs(角色对应的系统权限)查询对应的权限,如下,可以发现student_role已经具有了表stuinfo和表class的所有操作权限。
2、设置角色
角色创建好后,并不是直接生效,而是要把角色设置给对应的用户后才能生效的。具体语法如下:
- grant role_name to user;
例2、把角色student_role授权给teacher用户,使得teacher用户可以直接操作stuinfo表和class表的权限。代码如下:
- grant student_role to teacher;
然后,可以通过数据字典dba_role_privs查看下,用户teacher设定好的角色。发现已经存在student_role角色,如下:
六、概要文件profile
在我们创建用户时,都会为用户指定一个概要文件。概要文件主要是设置用户限制使用数据库资源(主要CPU资源)和Oracle口令参数管理的信息。经常利用Oracle概要文件对数据库用户进行口令管理、指定口令有效期、用户连接时间以及最大空闲等待时间等。
在Oracle系统中,在不给用户指定特定的概要文件时,系统会自动使用默认的概要文件DEFAULT。Oracle系统管理员可以利用不同的概要文件对不同的用户组设置不同的限制权限,可以起到合理分配系统的目的。
1、Oracle创建概要文件
Oracle创建概要文件的语法结构:
- create profile pro_name
- limit
- [数据库资源参数|口令参数]
语法解析:
1、create profile:Oracle创建概要文件的关键字,指定概要文件的名字为pro_name。
2、limit [数据库资源参数|口令参数]:指定要限制的参数信息。
数据库资源参数(KERNEL),常用的有:
1、CPU_PER_SESSION:限制会话使用的CPU时间,单位是百分之一秒。
2、SESSIONS_PER_USER:限制用户所允许建立的最大并发会话数。
3、CONNECT_TIME: 限制每个会话能连接到数据库的最长时间, 超过这个时间会话将自动断开,单位是分钟。
4、IDLE_TIME:限制每个会话所允许的最长连续空闲时间,超过这个时间会话将自动断开,单位是分钟。
5、LOGICAL_READS_PER_SESSION:限制每个会话所能读取的数据块数目。
6、PRIVATE_SGA:每个会话分配的私有SGA 区大小(以字节为单位)。
7、CPU_PER_CALL:用于指定每条SQL 语句可占用的最大CPU时间,单位是百分之一秒。
8、LOGICAL_READS_PER_CALL:用于指定每条SQL 语句最多所能读取的数据块数目。
口令参数(PASSWORD),常用的有:
1、FAILED_LOGIN_ATTEMPTS: 该参数指定允许的输入错误口令的次数, 超过该次数后用户帐户被自动锁定。
2、PASSWORD_LOCK_TIME:用于指定指定账户被锁定的天数,单位为天。
3、PASSWORD_LIFE_TIME: 指定口令的有效期,单位为天。 如果在达到有效期前用户还没有更换口令,它的口令将失效。这个时候必须重新设置新密码才能登陆。
4、PASSWORD_GRACE_TIME:用于指定口令失效的宽限期,单位为天
5、PASSWORD_REUSE_TIME: 指定能够重复使用一个口令前必须经过的时间,单位为天
6、PASSWORD_REUSE_MAX: 用于指定在重复使用口令之前必须对口令进行修改的次数。 PASSWORD_REUSE_TIME 和PASSWORD_REUSE_MAX两个参数只能设置一个,另一个必须为UNLIMITED。
案例1、创建一个概要文件pro_teacher,限制用户登陆时,错误口令允许错误的次数为5次,并且限制会话的最长空闲时间为20分钟,代码如下:
- create profile pro_teacher
- limit
- FAILED_LOGIN_ATTEMPTS 5
- IDLE_TIME 20;
然后,可以通过数据字典DBA_PROFILES对创建好的概要文件进行查询,如下图:
数据字典DBA_PROFILES的resource_name字段代表的就是要限制的资源名称,在我们创建概要文件时,只设定了IDLE_TIME和FAILED_LOGIN_ATTEMPTS两个选项,其它限制选项不做限定时,就会默认使用系统的DEFAULT概要文件的配置信息(DEFAULT概要文件是系统创建时自动创建的,对大部分信息是不做限制的,读者可以自行查询数据字典查看配置信息)。
下一步,可以为teacher用户指定创建好的概要文件,代码如下:
- alter user teacher
- profile pro_teacher;
2、Oracle修改概要文件
Oracle概要文件经常会随着系统业务需求的变化,有时候需要对其进行修改,主要是通过关键字ALTER PROFILE进行修改。和创建概要文件的语法一致,只需要对需要修改的限制资源进行重新设定即可。
案例2、把pro_teacher概要文件,增加一个口令有效期为365天的限制信息,修改代码如下:
- alter profile pro_teacher
- limit
- PASSWORD_LIFE_TIME 365;
然后,再查看一下数据字典DBA_PROFILES中pro_teacher的信息,发现信息已经变化。
总结:
Oracle概要文件主要是做数据库资源和口令资源限制的配置,数据库管理员经常利用概要文件来批量管理不同用户的访问权限,从而达到合理分配数据库资源的目的。
转载本站内容时,请务必注明来自W3xue,违者必究。