学习数据库概论第五天

3.7视图

视图是从一个或几个基本表导出的表。它与基本表不同,是一个虚表。数据库中只存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中。一旦基本表中的数据发生变化,从视图中查询出的数据也就随之改变了。

1.定义视图
Create view 视图名([列名,[列名]…])
As 子查询
[with check option];

With check option表示对视图进行update、insert和delete操作时要保证更新、插入或删除的行满足视图定义中的谓词条件。
组成视图的属性列名或者全部省略或者全部指定,没有第三种选择。如果省略了视图的各个属性列名,则隐含该视图由子查询中select子句目标列中的诸字段组成。但下面三种情况下必须明确指定组成视图的所有列名:
(1)某个目标列不是单纯的属性名,而是聚集函数或列表达式;
(2)多表连接时选出了几个同名列作为视图的字段。
(3)需要在视图中为某个列启用新的更适合的名字。
例3.84建立信息系学生的视图。
Create view IS_Student
As
Select Sno,Sname,Sage
From Student
Where Sdept=’IS’;
例3.85 建立信息系学生的视图,并要求进行修改和插入操作时仍需保证该视图只有信息系的学生。
Create view IS_Student
As
Select Sno,Sname,Sage
From Student
Where Sdept=’IS’
With check option;
加上With check option 子句,以后度该视图进行插入,修改,删除操作时,关系数据库管理系统会自动加上Sdept=’IS’条件。
若一个视图是从单个基本表导出的,并且只是去掉了基本表的某些行和列,保留了主码,则称这类视图为行列子集视图。
例3.86 建立信息系选修了1号课程的学生的视图。
Create view IS_S1(Sno,Sname,Grade)
As
Select Student.Sno,Sname,Grade
From Student,SC
Where Sdept=’IS’ and Student.Sno=SC.Sno and SC.Cno=’1’;
例3.87 建立信息系选修了1号课程且成绩在90分以上的学生的视图。
Create view IS_S2
As
Select Sno,Sname,Grade
From IS_S1
Where Grade>=90;
例3.88 定义一个反映学生出生年份的视图。
Create view BT_S(Sno,Sname,Sbirth)
As
Select Sno,Sname,2014-Sage
From Student;
例3.89 将学生的学号及平均成绩定义为一个视图。
Create view S_G(Sno,Gavg)
As
Select Sno,avg(Grade)
From SC
Group by Sno;
例3.90将Student表中所有女生记录定义为一个视图。
Create view F_Student(F_sno,name,sex,age,dept)
As
Select *
From Student
Where Ssex=’女’;
2.删除视图
Drop view 视图名[cascade]

3.查询视图
例3.92 在信息系学生的视图中找出年龄小于20岁的学生。
Select Sno,Sage
From IS_Student
Where Sage<20;
例3.93 查询选修了1号课程的信息系学生。
Select IS_Student.Sno,Sname
From IS_Student,SC
Where IS_Student.Sno=SC.Sno and SC.Cno=’1’;
例3.94 在S_G视图中查询平均成绩在90分以上的学生学号和平均成绩。
Select *
From S_G
Wher Gavg>=90;

4.更新视图
例3.95 将信息系学生视图IS_Student中学号为‘201215122’的学号姓名改为“刘晨”。
Update IS_Student
Set Sname=’刘晨’
Where Sno=’201215122’;
例3.96 向信息系学生视图IS_Student中插入一个新的学生记录,其中学号为‘201215129,’,姓名为‘赵新’,年龄为20岁。
Insert into IS_Student values(‘201215129’,’赵信’,20);
例3.97 删除信息系学生视图IS_Student中学号为‘201215129’的记录。
Delete from Student where Sno=’201215129’ and Sdept=’IS’;
4.视图的作用
(1)视图能够简化用户的操作。
(2)视图使用户能以多种角度看待同一数据。
(3)视图对重构数据库提供了一定程度的逻辑独立性。
尽管数据库的逻辑机构改变了,但应用程序不必修改,因为新建立的视图定义为用户原来的关系,使用户的外模式保持不变,用户的应用程序通过视图仍然能够查找数据。
(4)视图能够对机密数据提供安全保护。
(5)适当利用视图可以更清晰地表达查询。

第四章

4.1数据库安全性概述

数据库的安全性是指保护数据库以防止不合法使用所造成的系统泄露、更改或破坏。
1.数据库的不安全因素
(1)非授权用户对数据库的恶意存取和破坏
数据库管理系统提供的安全措施主要包括用户身份鉴别、存取控制和视图等技术。
(2)数据库中重要或敏感的数据被泄露
数据库管理系统提供的主要技术有强制存取控制、数据加密存储和加密传输等。此外,在安全性要求较高的部门提供审计功能,通过分析审计日志,可以对潜在的威胁提前采取措施加以防范,对非授权用户的入侵行为及信息破坏情况能够进行跟踪,防止对数据库安全责任的否认。
(3)安全环境的脆弱性

4.2数据库安全性控制

与数据库有关的安全性主要包括用户身份鉴别、多层存取控制、审计、视图和数据加密等安全技术。
存取控制流程:首先,数据库管理系统对提出SQL访问请求的数据库进行身份鉴别,防止不可信用户使用系统,然后,在SQL处理层进行自主存取控制和强制存取控制,进一步还可以推理控制。为监控恶意访问,可根据具体安全需求配置审计规则,对用户访问行为和系统关键操作进行审计。通过设置简单入侵检测规则,对异常用户行为进行检测和处理。在数据存取层,数据库管理系统不仅存放用户数据,还存储与安全有关的标记和信息(称为安全数据),提供存储加密功能。
1.用户身份鉴别
用户身份鉴别是数据库管理系统提供的最外层安全保护措施。每个用户在系统中都有一个用户标识。每个用户标识由用户名和用户标识号(UID)两部分组成。UID在系统的整个生命周期内是唯一的。系统内部记录着所有合法用户的标识,系统鉴别是指由系统提供一定的方式让用户标识自己名字和身份。每次用户要求进入系统,由系统进行核对,通过鉴定后才提供使用数据库管理系统的权限。
用户身份鉴别方法:
1.静态口令鉴别
一般由用户自己设定,鉴别时只要按要求输入正确的口令,系统将允许用户使用数据库管理系统。这些口令静态不变,安全性较低。
2.动态口令鉴别
口令动态变化,每次鉴别时均使用动态产生的新口令登陆数据库管理系统,即采用一次一密的方法。常用方式如短信密码和动态令牌方式。
3.生物特征鉴别
通过生物特征进行认证的技术。
4.智能卡鉴别
智能卡是一种不可复制的硬件,内置集成电路的芯片,具有硬件加密功能。智能卡由用户随身携带,登陆数据库管理系统时用户将智能卡插入专用的读卡器进行身份验证。实际应用中一般采用个人身份识别码(PIN)和智能卡相结合的方式。
2.存取控制
存取控制机制主要包括定义用户权限和合法权限检查两部分。
(1)定义用户权限,并将用户权限登记到数据字典中。
数据库管理系统必须提供适当的语言来定义用户权限,这些定义经过编译后存储在数据字典中,被称做安全规则或授权规则。
(2)合法权限检查
每当用户发出存取数据库的操作请求后,数据库管理系统查找数据库字典,根据安全规则进行合法权限检查,若用户的操作请求超过了定义的权限,系统将拒接执行此操作。
定义用户权限和合法权限检查机制一其起组成了数据库管理系统的存取控制子系统。
C2级的数据库管理系统支持自主存取控制,B1级的数据库管理系统支持强制存取控制。
(1)在自主存取控制方法中,用户对不同的数据库对象有不同的存取权限,不同的用户对同一对象也有不同的权限,而且用户还可将其拥有的存取权限转授给其他用户。
(2)在强制存取控制方法中,每一个数据库对象被标以一定的密级,每一个用户也被授予一个级别的许可证。对于任意一个对象,只有具有合法许可证的用户才可以存取。
3.自主存取控制方法
用户权限是由两个要素组成的:数据库对象和操作类型。定义存取权限称为授权。
在非关系系统中,用户只能对数据进行操作,存取控制的数据库对象也仅限于数据本身。
在关系数据库系统中,存取控制的对象不仅有数据本身(基本表中的数据、属性列上的数据),还有数据库模式(包括数据库、基本表、视图和索引的创建等)。
4.授权:授权与收回
(1)Grant
Grant 权限,[权限]…
On 对象类型 对象名[,对象类型 对象名]…
To 用户 [,用户…]
[With grant option];
其语义为:将对指定操作对象的指定操作权限授予指定的用户。发出该grant语句的可以是数据库管理员,也可以是该数据库对象创建者,还可以是已经拥有该权限得用户。接受权限的用户可以是一个或多个具体用户,也可以是public,即全体用户。
如果指定with grant option子句,则获得某种权限得用户还可以把这种权限再授予其他用户。如果没有授予指定with grant option子句,则获得某种权限得用户只能使用该权限,不能传播该权限。
例4.1 把查询Student表的权限授给用户U1。
Grant select
On table Student
To U1;
例4.2 把对Student表和Course表的全部操作权限授予用户U2和U3。
Grant all privileges
On table Student,Course
To U2,U3;
例4.3 把对表SC的查询权限授予所有用户。
Grant select
On table SC
To public;
例4.4 把查询Student表和修改学生学号的权限授予用户U4.
Grant select,update(Sno)
On table Student
To U4;
例4.5 把对表SC的insert权限授予U5用户,并允许将此权限再授予其他用户。
Grant insert
On table SC
To U5
With grant option;
(2)Revoke
Revoke权限,[权限,…]
On 对象类型 对象名,[对象类型 对象名,…]
From 用户,[用户,…] [cascade|restrict];
例4.8 把用户U4修改学生学号的权限收回。
Revoke update(Sno)
on table Student
From U4;
例4.9收回所有用户对表SC的查询权限。
Revoke select
On table SC
From public;
例4.10 把用户U5对SC表的insert权限收回。
Revoke insert
On table SC
From U5;

用户对自己建立的基本表和视图拥有全部的操作权限,并且可以用grant语句把其中某些权限授予其他用户。
用户可以“自主”地决定将数据的存取权限授予何人、决定是否也将“授权”的权限授予别人。因此称这样的存取控制是自主存取控制。
(3)创建数据库模式的权限
Grant和revoke语句向用户授予或收回对数据的操作权限。对创建数据库模式一类的数据库对象的授权则由数据库管理员在创建用户时实现。
Create user 用户名 [with] [dba|resource|connect]
对create user语句说明如下:
》只有系统的超级用户才有权创建一个新的数据库用户
》新创建的数据库用户有三种权限:connect、resource和dba
》Create user命令中如果没有指定创建的新用户的权限,默认该用户拥有connect权限。拥有connect权限的用户不能创建新用户,不能创建模式,也不能创建基本表,只能登陆数据库。由数据库管理员或其他用户授予他应有的权限,根据获得得授权情况他可以对数据库对象进行权限范围内的操作。
》拥有resource权限得用户能创建基本表和视图,成为所创建对象的属主,但不能创建模式,不能创建新的用户。数据库对象的属主可以使用grant语句把该对象上的存取权限授予其他用户。
》用有dba权限得用户是系统中的超级用户,尅创建新的用户、创建模式、创建基本表和视图等,dba拥有对所有数据库对象的存取权限,还可以把这些权限授予一般用户。
5.数据库角色
数据库角色是被命名的一组与数据库操作相关的权限,角色是权限的集合。可以为具有相同权限的用户创建一个角色,使用角色来管理数据库权限可以简化授权的过程。
(1)角色的创建
Create role 角色名
刚刚创建的角色是空的,没有任何内容。可以用grant为角色授权。
(2)给角色授权
Grant 权限[,权限,…]
On 对象类型 对象名
To 角色[,角色…];
(3)将一个角色授予其他的角色或用户
Grant 角色[,角色,…]
To 角色,[角色,…]
[with admin option]
如果指定了with admin option子句,则获得某种权限的角色或用户还可以把这种权限再授予其他角色。
(4)角色权限的收回
Revoke 权限,[权限,…]
On 对象类型 对象名
From 角色[,角色,…];

6.强制存取控制方法
自主存取控制能够通过授权机制有效的控制对敏感数据的存取。这种机制仅仅通过对数据的存取权限来进行安全控制,而数据本身并无安全性表标记。要解决这个问题,就需要对系统控制下的所有主客体实施强制存取控制策略。
在强制存取控制中,数据库管理系统所管理的全部实体被分为主体和客体两大类。
主体是系统中的活动实体,既包含数据库管理系统所管理的实际用户,也包括代表用户的各进程。客体是系统中的被动实体,是受主体操纵的,包括文件、基本表、索引、视图等。对于主体和客体,数据库管理系统为它们每个实例指派一个敏感度标记。
敏感度标记被分为若干级别,例如绝密、机密、可信、公开等。密级的次序TS>=S>=C>=P.主体的敏感度标记称为许可证级别,客体的敏感度标记称为密级。强制存取控制机制就是通过对比主体的敏感度标记和客体的敏感度标记,最终确定主体是否能够存取客体。
当某一用户(或某一主体)以标记label注册入系统时,系统要求他对任何客体的存取必须遵循如下规则:
(1)仅当主体的许可证级别大于或等于客体的密级时,该主体才能读取相应的客体。
(2)仅当主体的许可证级别小于或等于客体的密级时,该主体才能写相应的客体。
如果违反(2)就有可能把数据的密级从高留向低,造成数据的泄漏。
强制存取控制是对数据本身进行密级标记,无论数据如何复制,标记与数据是一个不可分的整体,只有符合密级标记要求的用户才可以操纵数据,从而提供了更高级别的安全性。
系统首先进行自主存取控制检查,对通过自主存取控制检查的允许存取的数据库对象再由系统自动进行强制存取控制检查,只有用过强制存取控制检查的数据库对象方可存取。

4.3视图机制

还可以为不同的用户定义不同的视图,把数据对象限制在一定的范围内。通过视图机制把要保密的数据对无权存取的用户隐藏起来,从而自动对数据提供一定程度的安全保护。

4.4审计

审计功能把用户对数据库的所有操作自动记录下来放入审计日志中。审计员可以利用审计日志监控数据库中的各种行为,重现导致数据库现有状况的一系列事件,找出非法存取数据的人、时间和内容等。
1.审计事件
服务器事件:审计数据库服务器发生的事件,包含数据库服务器的启动、停止、数据库服务器配置文件的重新加载。
系统权限:对系统拥有的结构或模式对象进行操作的审计,要求该操作的权限是通过系统权限获得得。
语句事件:对SQL语句,如DDL、DML、DQL及DCL语句的审计。
模式对象事件:对特定模式对象上进行的select或DML操作的审计。模式对象包括表、视图、存储过程、函数等。模式对象不包括依附于表的索引、约束、触发器、分区表等。
2.审计功能
审计功能主要包括以下几方面内容:
(1)基本功能,提供多种审计查阅方式基本的、可选的、有限的,等等
(2)提供多套审计规则,审计规则一般在数据库初始化时设定,以方便审计员管理。
(3)提供审计分析和报表功能。
(4)审计日志管理功能。
(5)系统提供查询审计设置及审计记录信息的专门视图。
3.audit语句和notaudit语句
审计一般可以分为用户级审计和系统级审计。用户级审计是任何用户可设置的审计,主要是用户针对自己创建的数据库表或视图进行审计,记录所有用户对这些表或视图的一切成功和不成功的访问要求以及各种类型的SQL操作。
系统级审计只能由数据库管理员设置,用以监测或失败的登陆要求、监测授权和收回操作以及其他数据库级权限下的操作。
例4.15 对修改SC表结构或修改SC表数据的操作进行审计。
Audit alter,update
On SC;
例4.16 取消对SC表的一切审计
Noaudit alter,update
On SC;
审计设置以及审计日志一般都存储在数据字典中。必须把审计开关打开(即把系统参数audit_trail设为true),才可以在系统表SYS_AUDITTRAIL中查看审计信息。
数据库安全审计系统提供一种事后检查的安全机制。

4.5数据加密

数据加密是防止数据库数据在存储和传输中失密的有效手段。
加密的基本思想是根据一定的算法将原始数据—明文变换为不可直接识别的格式—密文,从而使得不知道解密算法的人无法获知数据的内容。
数据加密主要包括存储加密和传输加密。
1.存储加密
一般提供透明和非透明两种存储加密方式。透明存储加密是内核级加密保护方式,对用户完全透明。非透明存储加密则是通过多个加密函数实现的。
透明存储加密是数据在写到磁盘时对数据进行加密,授权用户读取数据时再对其进行解密。由于数据加密对用户透明,数据库的应用程序不需要做出任何修改,只需在创建表语句中说明需加密的字段即可。
2.传输加密
常用的传输加密方式如链路加密和端到端加密。其中,链路加密对传输数据在链路层进行加密,它的传输信息由报头和报文两部分组成,前者是路由选择信息,而后者是传送的数据信息。这种方式对报文和报头均加密。相对地,端到端加密对传输数据在发送端加密,接收端解密。它只加密报文,不加密报头。与链路加密相比,它只在发送端和接收端需要密码设备,而中间节点不需要密码设备。

4.6其他安全性保护

推理控制处理的是强制存取控制未解决的问题。数据库推理控制机制用来避免用户利用其能够访问的数据推知更高密级的数据。
隐蔽信道处理内容也是强制存取控制未解决的问题。
数据隐私是控制不愿被他人知道或他人不便知道的个人数据的能力。

发布了38 篇原创文章 · 获赞 38 · 访问量 2736

猜你喜欢

转载自blog.csdn.net/l13kddd/article/details/104581363