1.1用户属性
为了防止非授权用户对数据库进行操作,在创建数据库用户时,必须使用安全属性对用户进行限制。用户的安全属性包括以下几个方面:●用户名:在同一数据库中,用户名必须唯一。并且用户名不能与角色名相同。
●用户身份认证:Oracle数据库采用了多种用户身份认证方式,例如数据库身份认证、外部认证、以及全局认证。
●默认表空间:用户创建数据库对象时,如果没有显示地指出该对象存储在哪个表空间,系统会自动将该数据库对象存储在当前用户的默认表空间。
(表空间:Oracle数据库在逻辑上可以划分为一系列的区域,每一个区域称为一个表空间。表空间是Oracle数据库最大的逻辑存储结构,由一系列段构成。Oracle数据库对象就是以段的方式从表空间中获取存储空间的。)●临时表:保存临时数据信息的表。
●表空间配额:表空间配额限制用户在永久空间中可以使用的存储空间的大小。
●概要文件:从会话级和调用级两个层次限制用户对数据库资源的使用,同时设置用户的口令管理策略。
●设置用户的默认角色:通过设置默认角色,可以禁止或激活用户所具有的角色。
●账户状态:创建用户的同时,可以设定用户的初始状态,包括用户口令是否过期以及账户是否锁定等
1.2创建用户
如上图所示,创建用户chen 采用数据库认证,口令为chen ,默认表空间为 users 该表空间配额为10MB ,默认临时表空间为temp ,初始状态不锁定。
如上图所示,创建用户如果不授权,该用户不能做任何操作,即便是连接数据库。只有给用户授予了create session 系统权限后,用户才可以连接数据库。
使用系统管理员登陆,授予用户chen 权限,才能使用户chen连接数据库。如果口令设置为过期状态,即首次连接数据库时需要修改口令。
1.3用户身份认证
◎ 数据库身份认证 将数据库的用户名与口令都保存在数据库内部,且口令以加密方式存储。当用户练级数据库时,需要提供用户名与口令信息,通过数据库认证后才能登陆。
◎ 外部身份认证 用户账户由oracle数据库管理,但口令管理和身份验证由外部服务来完成。
◎全局身份认证 采用oracle数据库的高级安全组件,利用LDAP目录服务器集中管理用户信息。当用户试图建立与数据库的连接时,oracle利用网络中的目录服务器中的信息对用户进行身份认证。
1.4修改用户
alter user user_name [identified][by password][…][account lock|unlock]
1.5删除用户
drop user username [cascade];
1.6 查询用户
select username,account_status … from dba_users;
忘记密码的方法:打开cmd,输入sqlplus /nolog,回车;输入“conn / as sysdba”;输入“alter user sys identified by 新密码”,注意:新密码最好以字母开头,否则可能出现错误Ora-00988。有了这个方法后,只要自己对oracle服务器有管理员权限,不记得密码的时候就可以随意修改密码了。
sqlplus /nolog,conn /as sysdba 之所以能够登录,在于oracle登录时的身份认证方式。 oracle在登录时,有三种身份认证方式:操作系统身份认证、密码文件认证、数据库认证。而conn /as sysdba是属于操作系统认证。 为什么这样说呢?你当前电脑开机时登录的用户,也就是进入操作系统的用户,例如是gooooal,它在你电脑的ora_dba组中。可以在“我的电脑”单击右键,找到“管理”,选择“本地用户和组”,发现有一个组叫“ora_dba”,双击它,看到成员列表中“gooooal”。 也就是在conn /as sysdba,oracle会进行操作系统验证,发现你当前登录的用户就属于ora_dba组,因此才可以登录成功。 你可以把ora_dba组中的“gooooal”用户删除,再conn /as sysdba,就发现进不去了。解决用户sys任意密码可以登录的问题:
1、sys是Oracle的一个很特殊的用户,它只能按sysdba和sysoper身份登入,也就是说只要按以上两种身份登入,都是sys用户,表面上输入的用户名都是无效的。任何其它用户只能按Normal身份登入。
2、sys用户的合法认证有两种方式:一是操作系统认证方式,二是数据库口令认证方式。如果你登入的操作系统是Oracle用户组,那么直接通过操作系统认证连接到数据库,没有必要口令来认证。所以你随便输入一个口令都可以的。
2 资源限定与口令管理
在oracle数据库中,用户对数据库和系统资源使用的限制以及对用户口令的管理是通过概要文件(profile)实现的。概要文件是oracle数据库安全策略的重要组成部分。每个数据库必须具有一个概要文件。概要文件不是一个物理文件,而是存储在sys模式的几个表中的信息的集合。这些表是在创建数据库运行sql.bsq脚本时,调用denv.bsq脚本创建的,包括profile$表、profname表、resource_map表、resource_cost表等。
2.1资源限制的级别
概要文件通过对一系列资源管理参数的设置,从会话级和调用级两个级别对用户使用资源进行限制。会话级资源限制是对用户在一个会话过程中所能使用的资源总量进行限制,而调用级资源限制是对一条SQL语句在执行过程中所能使用的资源总量进行限制。
2.2 资源限制的类型
通过设置通过设置概要文件中的参数值,可以从下列几个方面限制用户对数据库和系统资源的使用。▼ CPU使用时间:在一个会话或一个调用过程中使用CPU的总量。▼ 逻辑读:在一个会话或一个调用过程中读取物理磁盘和逻辑内存数据块的总量▼每个用户的并发会话数,即一个用户最多同时开启会话的数量。▼用户连接数据库的最长时间。▼私有SQL区和PL/SQL区的总量。2.3 启用或停用资源限制与口令管理
ALTER SYSTEM SET resource_limit=TRUE/FALSE;
2.3.1 口令管理参数介绍
Oracle数据库概要文件中用于口令管理的参数包括以下:
FAILED_LOGIN_ATTEMPTS:限制用户在登陆oracle数据库允许失败的次数。
PASSWORD_LOCK_TIME:设定登陆失败后,账户锁定时间。
PASSWORD_LIFE_TIME:设置口令的有效天数。
PASSWORD_GRACE_TIME:用于设定提示口令过期的天数。
PASSWORD_REUSE_TIME:指定一个用户口令被修改后,必须经过多少天才可以重新使用该口令。
PASSWORD_REUSE_MAX:指定一个口令被重新使用前,必须经过多少次修改。
PASSWORD_VERIFY_FUNCTION:设置口令复杂性校验函数。
2.4 创建资源限制的概要文件
(上次不成功的原因,sessions写成了session,还有per写成了pre)
1如图:创建一个名为res_profile的概要文件,要求每个用户最多可以创建2个并发会话,每个会话持续时间最长为60min,会话的最长连续空闲时间为20min,每个会话的私有SQL区为100KB,每个SQL语句占用CPU时间总量不超过10s.
2 将概要文件指定给用户rf
Alter user rf profile res_profile
3 将资源管理激活
ALTER SYSTEM SET RESOURCE_LIMIT=TRUE scope=both;
4如下图,用户rf只能创建2个并发会话,创建第3个时出现错误:超出了限定范围
2.5 创建口令管理的概要文件
SQL>create profile pwd_profile limit
Failed_login_attempts 4 password_lock_time 10;
2.6 将概要文件分配给用户
将该概要文件指定给普通用户rf,用户连续登陆四次失败,锁定账户,10天后自动解锁。
用管理员账号解锁用户rf。
2.7 修改概要文件
例子:SQL>alter profile pwd_profile limit password_life_time 10;
将用户口令设置有效期为10天
例子:SQL>drop profile pwd_profile cascade;删除概要文件。
例子:SQL>select * from dba_profiles order by profile;查询数据库所有概要文件的参数设置。
3权限管理
Oracle数据库使用权限俩控制用户对数据库的访问和用户在数据库中所能执行的操作。用户在数据库中可以执行什么样的操作,以及可以对哪些对象进行操作,完全取决于该用户拥有的权限。
控制Oracle数据库访问的权限类型有两种:系统权限system privilege和对象权限Object privilege(方案对象)。系统权限向用户提供执行某一种或某一类型的数据库操作能力,对象权限对某个特定的数据库对象执行某种操作权限,如对表employees的插入、删除、修改、查询的权限等。
在oracle 数据库中给用户授权可以采用两种方式:1.利用grant命令直接为用户授权。2.现将权限授予角色,然后再将角色授予用户。
3.1 系统权限分类
在Oracle 11g数据库中,有200多种数据库权限,每种系统权限都为用户提供了执行某一些或某一类数据库操作的能力。查询所有系统权限信息的命令如下:
系统权限可以分为两大类:
● 一类是对数据库某一类对象的操作能力,与具体的数据库对象无关,通常带有ANY关键字。例如,CREATE ANY TABLE系统权限允许用户在任何模式中创建表;SELECT ANY TABLE系统权限允许用户查询数据库中任何模式中的表和视图。
● 另一类系统权限是数据库级别的某种操作能力。例如,CREATE SESSION系统权限允许用户登陆数据库:ALTER SYSTEM系统权限允许用户修改数据库参数。
使用系统权限的注意事项:
Select、Insert、Update、Delete都是对象权限,它们只针对用户自己模式下的对象,但如果加了Any关键字,针对的就是数据库中所有模式下的对象了。
如果授予用户系统权限时使用了With Admin Option子句,则被授权的用户还可以将相应的权限授予其他用户。 开发人员一般需要几个系统权限,其中包括Create Table、Create View和Create type系统权限,以创建支持前台应用程序的数据库模式。
查询当前用户所拥有的系统权限如下:
当前登陆用户被授予的系统权限也可以使用如下命令:
查看当前用户所拥有的对象权限:
查看特定用户所拥有的系统权限:
查询特定用户所拥有的对象权限:
如图所示用户rf,只有创建会话和创建概要文件的权限。
3.2 系统权限的授权与回收
只有DBA用户才可以拥有ALTER DATABASE系统权限。
例子:为用户chen授予create table 、create sequence系统权限
用户获得权限后,可以在chen模式下创建表和序列了,例如:
还可以授予用户权限,并且权限具有传递性。 授予权限同时,在用户后面加上 with admin option
数据库管理员可以使用revoke语句回收用户、角色或public用户组获得的系统的权限。例如:
回收用户系统权限时需要注意以下几点:
1 多个管理员授予用户同一个系统权限后,其中一个管理员回收其授予该用户的系统权限,该用户将不再拥有相应的系统权限。
2 为了回收用户系统权限的传递性,必须先回收用户的系统权限,然后再重新授予其相应的系统权限。
3如果一个用户获得的系统权限具有传递性,并且给其他用户授权,那么该用户系统权限被回收后,其他用户的系统权限并不受影响。
3.3 对象权限分类、授权、回收
对象权限是指对某个特定模式对象的操作权限。数据库模式对象所有者拥有该对象的所有对象权限,对象权限的管理实际上是对象所有者对其他用户操作该对象的权限管理。对象权限的授予实用grant语句,例如,查看授予用户对象权限,并查看该权限
此时用户rf就具有对表scott.emp进行查询、插入和更新的权限了,例如:
对象权限的回收,数据库管理员或对象所有者可以使用revoke语句回收用户、角色或public用户组获得的对象权限。
和系统权限类似,在进行对象权限回收时应该注意上面类似的三点。
4 角色管理
为了简化数据库权限的管理,在oracle数据库中引入角色的概念。所谓角色就是一系列相关权限的集合。可以将要授予相同身份用户的所有权限先授予角色,然后再将角色授予用户,这样用户就得到了该角色所具有的所有权限,从而简化了权限的管理。
4.1 角色的特点和优点
特点:角色名称在数据库中必须唯一,不能与用户同名;角色不是模式对象,删除创建角色的用户对角色没有影响;角色可以包含任何系统权限和对象权限;角色可以授予任何数据库用户和其他角色;授予用户的角色可以随时禁用或激活等。
优点:减少权限管理的工作量;有效的使用权限;提高应用安全性。
4.2 角色分类
◆ 预定义角色
Oracle数据库创建时由系统自动创建的一些常用的角色,这些角色已经由系统授予了相应的权限。
查询当前系统中的所有预定义角色:
查询select_catalog_role角色所具有的系统权限。
◆用户自定义角色
Oracle数据库允许用户自定义角色,并对自定义角色进行权限的授予与回收。同时允许角色进行修改、删除、禁用或激活等操作。创建角色使用create role语句。例子如下:
创建的几个角色分别是:一般角色;角色采用数据库认证,激活时需要口令;激活角色时采用操作系统认证、网络认证;激活角色时采用目录服务进行全局认证。
4.3 角色权限的授予与回收
创建一个角色后,如果不给角色授权,那么角色时没有用处的。因此,在创建角色后,需要给角色授权。给角色授权实际上是给角色授予适当的系统权限、对象权限或已有角色。在数据库运行时,可以为角色增加权限,也可以回收其权限。角色权限的授予、回收的过程与用户权限的授予、回收过程类似。
权限授予如下:
一个角色可以被授予另一角色,但不能授予其自身,既不能产生循环授权。
修改是指使用alter role语句修改角色的认证方式
如上图所示,为角色role_emp添加认证口令,取消角色role_manager的认证口令。
角色的禁用与激活
Set role
{角色名[identified by 口令][,角色名[identified by 口令]]…
|all[except 角色名[,角色名]…]|none};
注:
All:将使会话用户所有被授予的角色有效。
None:将禁用会话用户所有被授予的角色。
identified by 口令:启用需要口令的角色时,必须给出口令。
删除口令。如下图,激活角色role_manager.
删除角色,如下图:
4.4 利用角色进行权限管理
1给用户或角色授予角色:如下图,将预定义用户resource,connect 授予角色role_manager,将角色授予用户chen.
2 通过修改角色权限动态修改用户权限
3 从用户或其他角色回收角色
4 设置用户默认角色
当一个角色授予某一个用户后,该角色即成为该用户的默认角色。对于用户而言,用户的默认角色处于激活状态,而非默认角色处于禁用状态。
ALTER USER user DEFAULT ROLE role_list
5 查询角色信息
查询用户chen所具有的角色信息
上图是查看当前用户授予的所有角色信息。
5审计
审计是监视和记录用户对数据库所进行的操作,以供DBA进行统计和分析。利用审计可以完成下列任务:
●保证用户对自己在数据库中的活动负责。
●禁止用户在数据库中从事与自己职责不相符的活动。
●调查数据库中的可疑活动。
●通知审计员一个未授权用户在数据库中的活动。
●监视和收集特定数据库活动的数据。
5.1审计分类
语句审计:对特定的SQL语句进行审计,不指定具体对象。
权限审计:对特定的系统权限使用情况进行审计。
对象审计:对特定的模式对象上执行的特定语句进行审计。
网络审计:对网络协议错误与网络层内部错误进行审计。
5.2 审计环境设置
使用数据库审计功能,数据库管理员需要对数据库初始化参数AUDIT_TRAIL进行设置。AUDIT_TRAIL参数可以取值DB、DB EXTENDED、OS、XML EXTENDED、NONE。
◎DB:默认值,表示启动审计功能,审计信息写入SYS.AUD$数据字典中。
◎DB,EXTENDED:与DB相同,审计信息中还包括SQL语句绑定变量信息。
◎OS:表示启动审计功能,审计信息写入操作系统文件。
◎XML:表示启动审计功能,审计信息写入XML格式的操作系统文件中。
◎XML,EXTENDED:与XML相同,但审计信息还包含SQL语句绑定变量信息。
◎NONE:表示不启动审计信息。
由于初始化参数audit_trail是静态参数,因此需要重新启动数据库,例如:
5.3语句审计
对特定类型的SQL语句进行审计,与具体的对象没有关系。包括下列几种情况:
1可以审计某个用户或所有用户的SQL语句;2可以使会话审计或存取审计;3可以对成功执行的SQL语句进行审计;4可以对没有成功执行的SQL语句进行审计;5可以对SQL语句进行审计,无论该语句是否成功执行。
例如可以通过不同选项组合,形成多种不同的审计:
当用户scott进行create table ,drop table 和truncate table这三种操作时就会产生审计信息,并保存在数据字典SYS.AUD$中
SQL>conn scott/scott;
SQL>create table test_audit(sno number,sname char(20));
查询AUD$
SQL>conn sys/sys as sysdba:
SQL> select returncode,action#,userid,userhost,terminal, from aud$
如果要了解当前数据库对哪些用户进行了语句审计以及审计设置信息,可以通过查询数据字典DBA_STMT_AUDIT_OPTS获得,例如:
5.4 权限审计
对特定的系统权限的使用情况进行审计,例如:
如果要了解当前数据库对哪些用户的系统权限进行了审计以及审计设置信息,可以通过查询数据字典DBA_PRIV_AUDIT_OPTS获得,例如:
取消对某个系统权限的审计,改audit命令为noaudit即可:
5.5 对象审计
是指对特定模式对象的操作进行审计,与用户没有关系。例如:
如果要了解当前数据库对哪些模式对象进行了审计以及审计设置信息,可以通过查询数据字典DBA_OBJ_AUDIT_OPTS获得,例如:




