书城计算机数据库原理及Oracle应用
31848700000017

第17章 数据库的保护(1)

8.1 数据库的安全性管理

数据库的保护就是要排除和防止各种对数据库的干扰和破坏,确保数据安全、可靠及在数据库遭到破坏后尽快恢复正常。对数据库的保护主要通过安全性控制、完整性控制、并发控制和数据库恢复技术四个方面实现的。本章首先介绍实现这四种保护措施的原理和方法,然后介绍Oracle系统是如何实现这四种保护措施的。

数据库的安全性是指保护数据库以防止不合法的使用所造成的数据泄露、更改和破坏。

安全性问题是所有计算机系统都有的问题,只是在数据库系统中由于大量数据集中存放,而且是多用户共享,使安全性问题更为突出。因此,系统安全保护措施是否有效是数据库系统主要的性能指标之一。

8.1.1 安全性管理的方法和原理

在计算机系统中,一般安全措施是分级设置的。

在用户进入计算机系统时,首先由操作系统一级实施保护,必须对进入操作系统的操作系统用户进行身份鉴定,只有合法的操作系统用户才准许进入操作系统。对进入操作系统的用户,希望操作数据库数据时,DBMS还要进行数据库用户的身份鉴定,只有合法的数据库用户才准许进入数据库系统。然后还需要对数据库用户进行存取权限的控制,检查数据库用户是否拥有存取权限,只允许数据库用户执行权限范围内的合法操作。最后数据存储到数据库中还可以采用加密存储。

安全性控制的一般方法有:用户标识和鉴别、存取权限控制、审计、数据加密和视图等几种。

8.1.1.1 用户标识和鉴别

用户标识和鉴别是系统提供的最外层安全保护措施。其方法是由系统提供让用户标识自己的名字或身份的方法。每次用户要进入系统时,系统对用户身份进行核实,经过鉴定后才提供操作系统和数据库的使用权。

(1)提供用户名和口令

常用的用户标识和鉴别方法是使用用户名和口令。为保密起见,用户在终端上输入的口令不显示在屏幕上。当用户登录操作系统时,系统要求用户提供操作系统的用户名和口令,若正确,则可进入操作系统;若不正确,则不能进入操作系统。当进入操作系统后,使用数据库的工具登录数据库时,数据库系统要求用户提供数据库的用户名和口令,若正确,则登录数据库;若不正确,则拒绝登录数据库。

以上的方法简单易行,但用户名和口令容易被人窃取,因此还可以用更复杂的方法。

(2)系统提供一个随机数

系统提供了一个随机数,用户根据预先约定好的某一过程或者函数进行计算,系统根据用户计算结果是否正确进一步鉴定用户身份。

用户标识和鉴别可以重复多次。

8.1.1.2 存取权限控制

在数据库系统中,安全最重要的一点是确保只授权给有资格的用户访问数据库的权限,令所有未被授权的用户无法接近数据,这主要通过数据库系统的存取控制机制实现的。

存取控制机制主要包括两部分:定义用户权限和检查用户权限。

(1)定义用户权限

用户权限是指不同的用户对不同的数据对象允许执行的操作权限。定义用户权限时必须指定两个内容:一是要存取的数据对象,二是对此对象进行的操作,保证用户只能存取他有权存取的数据。在数据库系统中对存取权限的定义称为“授权”(Authorization),这些授权的定义经过编译后存放在数据库的数据字典中,被称作安全规则。

关系数据库系统中,DBA可以把建立和修改基本表的权限授予用户,用户可利用这种权限来建立和修改基本表、索引、视图等对象。数据对象的创建者自动获得对该数据对象的所有操作权限。

SQL除了数据定义和数据操作功能以外,还提供了数据控制功能,授权和回收就是通过其提供的GRANT和REVOKE语句来实现的。

例8-1 student表的创建者将该表上的查询权限和插入权限授予给用户user1,并允许user1用户又将student表的查询和插入权限授予别人。

SQL>GRANT select,insert

ON student

TO user1

WITH GRANT OPTION

例8-2 student表的创建者将该表上的查询权限和插入权限从用户user1身上回收。

SQL>REVOKE select,insert

ON student

FROM user1

(2)合法权限检查

每当用户发出存取数据库的操作请求时,DBMS查询数据字典,根据事先定义好的存取权限进行合法权限检查。若用户的操作超过了定义的权限,系统拒绝执行此操作。

用户的权限定义和合法权限检查机制一起组成了DBMS的安全子系统。

8.1.1.3 审计

任何系统的安全性措施不可能是完美无缺的,企图盗窃、破坏数据者总是想方设法逃避控制。所以,对敏感的数据、重要的操作,可以通过审计来进行跟踪检查。

审计功能把用户对数据库的所有操作自动记录下来放入审计日志(audit log)中。DBA利用审计日志,就能重现导致数据库现有状况的一系列事件,以找出非法存取数据的人、时间和内容。

审计通常是很费时间和空间的,所以DBMS往往将其作为可选特征,允许DBA根据应用对安全性的要求,灵活地打开或关闭审计功能。审计功能一般用于安全性要求较高的部门。

8.1.1.4 数据加密

另一种安全性方法是使用加密。把数据用密码形式存储在磁盘上,这样企图通过不正常途径,例如不通过DBMS,而是通过自己编写的程序来存取数据者,只能看到一些无法辨认的二进制数。用户要检索数据时,首先要提供密码钥匙,由系统进行译码。

不少数据库产品均提供了这种数据加密的功能。但数据加密和解密操作比较费时,又占大量的系统资源,所以一般DBMS将数据加密功能作为一个可选特征,可根据用户的要求对数据实行加密或不加密存储。

8.1.1.5 视图机制

可以为不同的用户定义不同的视图,把数据对象限制在一定的范围内。可以通过视图将要保密的数据对无权存取这些数据的用户隐藏起来,这样自动地提供了对数据的安全保护。

例8-3 有基本表student、course和sc,其中student表包含了学生的基本信息,包括:学号、姓名、性别、年龄等信息。course表包含了课程的基本信息,包括:课程号、课程名称、学分、任课教师的名字等信息。sc表包含了每个同学的选课记录,包括:学号、课程号、成绩等信息。在这三张表的基础上建立一个视图sgrade,该视图包含学生的姓名、课程名及该课程的成绩。

SQL>CREATE VIEW sgrade

AS SELECT sname,name,grade

FROM student s,course c,sc

WHERE s.snosc.sno and c.cnosc.cno;

将SGRADE视图的查询权限授予user1用户。

SQL>GRANT select

ON sgrade

TO user1;

此时user1用户可以查询sgrade视图,即可以查询三张表中的学生姓名、课程名称、成绩数据。但除了这三个数据外,其他信息user1都无权查询,也看不到。

SELECT*FROM sgrade;

从上述例子可以看到,通过视图隐藏用户无权访问的数据加强安全性,隐藏表之间的联结操作简化用户操作。

8.1.2 Oracle系统的安全措施

Oracle系统的安全措施就是上述保证系统安全性的几种方法的具体体现。但是Oracle系统中的用户可以进行账号锁定和口令过期等设置。权限又分系统权限和对象权限,分别有不同的管理方法,另外引入角色简化权限的管理。审计又可以分为数据库审计和应用审计等。

8.1.2.1 用户的管理

对Oracle进行访问的用户必须是Oracle中建立的一个有效的用户。当安装和建立Oracle数据库时,系统自动建立SYS和SYSTEM用户,其中SYS用户拥有数据字典。在数据库中一个用户可以拥有的对象有表、视图、索引、约束条件、序列生成器、同义词、存储过程、函数、包、数据库触发器、数据库链路、快照等。

1.建立新用户

使用CREATE USER命令可以建立用户,建立后在数据字典中记录了该用户的信息。在建立用户时应该为其指定一个口令,该口令加密后存储在数据库数据字典中。当用户与数据库建立连接时,Oracle验证用户提供的口令与存储在数据字典中的口令是否一致。

建立用户的语法如下:

CREATE USER 用户名

IDENTIFIED BY 口令

[DEFAULT TABLESPACE 表空间名]

[TEMPORARY TABLESPACE 表空间名]

[PASSWORD EXPIRE]

[ACCOUNT{LOCK|UNLOCK}]

其中:只有口令必须指定,其他几项都是可选的。

BY口令用于指定该用户存储在数据字典中的口令,口令不区分大小写。

DEFAULT|TEMPORARY TABLESPACE用于为用户指定默认的表空间和临时表空间。假如没有指定默认表空间,则将SYSTEM表空间作为该用户的默认表空间。假如没有指定临时表空间,则将TEMP表空间作为该用户的临时表空间。

PASSWORD EXPIRE表示刚建立用户的口令已到期。当用户使用SQL*Plus第一次登录到数据库时,强制用户重置口令。

ACCOUNT LOCK|UNLOCK用于显式地锁住用户账号,或不锁住用户账号。当一个账号被锁定并且用户试图连接到数据库时,会显示错误信息。没有指定ACCOUNT从句时,默认是不锁住用户账号。

例8-4 建立一个JOHN用户。该用户的口令没有到期,账号也没有被锁住。

SQL>CREATE USER JOHN

IDENTIFIED BY TIGER

DEFAULT TABLESPACE USERS

TEMPORARY TABLESPACE TEMP

当建立用户后,必须给用户授权,用户才能连接到数据库,并对数据库中的对象进行操作。只有拥有CREATE SESSION权限的用户才能连接到数据库。可用下列语句给JOHN用户授权。关于给用户授予和回收权限的语法在后面讨论。

SQL>GRANT CREATE SESSION TO JOHN

2.修改用户

建立用户时指定的所有特性都可以使用ALTER USER命令加以修改。使用此命令可以修改用户的默认表空间、临时表空间、修改用户的口令和口令期限、可以锁住或解锁用户账号等。修改用户的语法如下:

ALTER USER 用户名

IDENTIFIED BY 口令

[DEFAULT TABLESPACE 表空间名]

[TEMPORARY TABLESPACE 表空间名]

[PASSWORD EXPIRE]

[ACCOUNT{LOCK|UNLOCK}]

注意:该命令中任何没有修改的选项仍然保留原来的值。