Oracle数据库的安全保护流程可以分为3个步骤。首先,用户向数据库提供身份识别信息,即提供一个数据库账号。接下来用户还需要证明他们所给出的身份识别信息是有效的,这是通过输入密码来实现的,用户输入的密码经过数据库的核对确认用户提供的密码是否正确。最后,假设密码是正确的,那么数据库认为身份识别信息是可信赖的。此时,数据库将会在基于身份识别信息的基础上确定用户所拥有的权限,及用户可以对数据库执行什么操作。因此,为了确保数据库的安全,首要的问题就是对用户进行管理。
每个连接到数据库的用户所具有的权限是不同的。Oracle 提供了一些特权用户,比如 sysdba 或者 sysoper,这些用户主要是用于执行数据库的维护操作,如启动、关闭、建立数据库,以及执行备份和恢复等操作。
SYSDBA和SYSOPER的区别在于:sysdba 不仅具有sysoper 的所有权限,而且还可以建立数据库,执行不完全恢复。
Oracle 提供了默认的特权用户SYS,当以特权用户身份登录数据库时,必须带有 as sysdba 或 as sysoper 选项。
用户与模式的关系
与用户密切关联的另一个概念就是模式,模式也称作方案(Schema)。模式实际上是用户所拥有的数据库对象的集合。在Oracle 数据库中,对象是以用户来组织的,用户与模式是一 一 对应的关系,并且两者名称相同。
每个用户都会有自己的一个模式,用户所有的对象都属于这个模式。
访问数据库对象时,注意事项:
a、 在同一个模式中不能存在同名的对象,但是不同模式中的对象名称则可以相同。
b、用户可以直接访问本模式中所有对象,但如果要访问其他模式对象,则必须具有该对象的响应访问权限。例:A用户可以直接查看模式下面的emp表,但是如果用户B想要查看A模式下的emp表,则必须在emp表上具有select 的权限。
c、当用户访问其他模式对象时,必须附加模式名作为前缀。
创建与管理用户
Oracle的身份验证:
1 密码验证
当一个使用密码验证机制的用户试图连接到数据库时,数据库会核实用户名是否是一个有效的数据库账户,并且提供与该用户在数据库中存储的密码相匹配的密码。
由于用户信息和密码都存储在数据库内部,所以使用密码验证用户也称为数据库验证用户。
2 外部验证
外部验证是指当用户试图连接到数据库时,数据库会核实用户名是否是一个有效的数据库账户,并且确认该用户已经完成了操作系统级别的身份验证。
注意:外部验证用户并不在数据库中存储一个验证密码。
3 全局验证
全局验证是指用户不在数据库中存储验证密码,而是通过一种高级安全选项所提供的身份验证服务来进行的。
创建用户语句:
create user user_name identified by pass_word
修改用户语句:
alter user user_name identified by pass_word
删除用户语句:
drop user user_name [cascade]
用户权限管理
根据系统管理方式的不同,在Oracle数据库中将权限分为两大类:系统权限和对象权限。
系统权限是在系统级对数据库进行存取和使用的机制,比如,用户是否能够连接到数据库系统(SESSION权限),执行系统级的DDL语句(如CREAT、ALTER、和DROP)等。
对象权限是指某一个用户对其他用户的表、视图、序列、存储过程、函数、包等的操作权限。不同类型的对象具有不同的对象权限,对于某些模式对象,比如簇、索引、触发器、数据库链接等没有相应的实体权限,这些权限由系统权限进行管理。
权限设计原则
- 按照最小分配原则;
- 禁止grant dba to user;
- 数据库用户要分为管理、应用、维护、备份四类用户;
- 不允许使用sys和system建立数据库应用对象;
授权操作使用GRANT命令,其语法格式如下:
grant sys_privi | role to user | role | public [with admin option]
一般用户若被授予过高的权限就可能给Oracle系统带来安全隐患。作为Oracle系统的管理员,应该能够查询当前Oracle系统各个用户的权限,并且能够使用REVOKE命令撤销用户的某些不要的系统权限,REVOKE命令的语法格式如下:
revoke sys_privi | role from user | role | public
角色管理
角色是一个独立的数据库实体,它包括一组权限。也就是说,角色是包括一个或者多个权限的集合,它并不被哪个用户所拥有。角色可以被授予任何用户,也可以从用户中将角色收回。
使用角色可以简化权限的管理,可以仅用一条语句就能从用户那里授予或回收权限,而不必对用户一一授权。使用角色还可以实现权限的动态管理,比如,随着应用的变化可以增加或者减少角色的权限,这样通过改变角色的权限,就实现了改变多个用户的权限。
预定义角色
所谓系统预定义角色是指在数据库安装完成后由系统自动创建的一些常用角色,这些的角色已经由系统授予了相应的系统权限,可以由数据库管理员直接使用。一旦将这些角色授予用户以后,用户便具有了角色中所包含的系统权限。
下面列出的这几个系统预定义角色是最常被用到的。
(1)CONNECT;
(2)RESOURCE;
(3)DBA;
(4)EXP_FULL_DATABASE;
(5)IMP_FULL_DATABASE。
创建角色与授权
如果系统预定义的角色不符合用户需要,那么,数据库管理员可以创建更多的角色,创建用户自定义角色可以使用CREATE ROLE语句来实现,其语法格式如下:
create role role_name [ not identified | identified by [password] | [exeternally] | [globally]]