《第05章数据完整性与安全性.ppt》由会员分享,可在线阅读,更多相关《第05章数据完整性与安全性.ppt(35页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第五章第五章 数据完整性与数据完整性与安全性安全性本章要点本章要点v 本章要点 1熟悉数据库的完整性和安全性概念 2熟悉数据库的完整性和安全性机制以及区别 3掌握数据库完整性定义语法 4掌握数据库权限和用户管理的SQL语句引言引言v 数据库安全包含两个方面,一方面是故意的数据泄露、更改和破坏,另一方面是不合语意的、不正确的数据进入数据库破坏数据的一致性和正确性,他们分别属于安全性和完整性两个不同问题。数据库的完整性和安全性是数据库中的核心概念,数据库采用完整性约束不受非法数据的影响,保证数据的一致性,采用数据库的安全性不受非法用户的攻击,保证数据的安全。任务一任务一 实体完整性实体完整性v基础
2、知识v (一)数据库完整性 数据库的完整性是指数据的正确性和相容性,完整性规则是对数据库的某种约束条件,也就是说数据表值必须满足一些约束条件。 关系模型中有三类完整性约束:主键约束完整性、外键约束完整性和用户定义的完整性。其中主键约束完整性和外键约束完整性是关系模型必须满足的完整性约束条件,被称作是关系的两个不变性,应该由关系系统自动支持。用户定义的完整性是应用领域需要遵循的约束条件,体现了具体领域的需求。v 1定义完整性 完整性约束条件也称为完整性规则,是数据库中的数据必须满足的语义约束条件。v 2完整性检查MySQL数据库数据库 数据库管理系统对数据是否满足完整性进行检查,一般在INSER
3、T、UPDATE和DELETE语句执行后检查。v3违约处理 数据库管理系统若发现用户的操作违背了完整性约束条件,就采取一定的动作,如拒绝执行该操作,保证数据的完整性。v(二)主键约束完整性v1主键约束定义 数据库使用主键来唯一标识一行数据,因此主键约束完整性规则包括: (1)主键值不能取空值。 (2)主键值不能重复。v2主键约束定义MySQL数据库数据库 主键约束在创建表时使用PRIMARY KEY定义。对单属性构成的主键 可以定义为列级约束条件,也可以定义为表级约束条件。对多个属性构 成的主键只能定义为表级约束条件。 示例5-1:将student表中的sno属性定义为主键。 create t
4、able student (sno char(9) primary key, name varchar(20), gender char(2), age tinyint, depart varchar(20) );或者: MySQL数据库数据库 create table student (sno char(9), name varchar(20), gender char(2), age tinyint, depart varchar(20), primary key (sno) ); 示例5-2:将数据表sc中的sno , cno定义为主键 create table sc (sno char
5、(9), cno char(4),MySQL数据库数据库 score double, primary key(sno, cno) );v3检查和违约处理 用PRIMARY KEY定义了主键后,每当插入一条记录或者对主键进行更新操作时,数据库管理系统按照实体完整性规则自动进行检查。如果违反了主键约束完整性规则,则拒绝插入或修改从而保证了实体完整性。v4自增字段 建立数据表时,当指定AUTO_INCREMENT列后,用户插入一个明确指定该列值的行,系统会自动指定列值。并采用数据库的自增字段,如此做的好处是使用简单并且灵活。MySQL数据库数据库任务二任务二 外键约束的完整性外键约束的完整性v 基础
6、知识v (一)外键约束完整性v 1概念 外键约束定义了表之间的关系,主要用来维护两个表之间的一致性。当一个表中的一列或者多个列的组合与其他表中的主键定义相同时,就可以将这些列或者列的组合定义为外键,在两个表之间建立外建约束关系,如果表A中的列引用了表B中的列,则表A称作外键表,表B称为主键表。 若两个表之间存在外键的约束关系,则有: (1)当向外键表中插入数据时,如果插入外键列值与之关联的主键表的主键列中没有对应的值,则系统会拒绝向外键表中插入数据。 (2)当删除或更新主键表数据时,如果删除或更新的是主键列值,在与之关联的外键表的外键列中存在对应的值,则系统会拒绝删除或MySQL数据库数据库更
7、新主键表的数据,当外键表设置实施级联更新或删除,则另当别论。v2定义 外键约束完整性在创建表时,使用foreign key指明外键参照哪个表的主键。 示例5-3:选课表中的学号和课程号创建外键约束。 Create table SC (sno char(9) not null, cno char(4) not null, grade smallint, primary key (sno,cno), foreign key (sno) references Student(sno),MySQL数据库数据库 foreign key (cno) references Course(cno) );v(二
8、)检查和违约处理 一个外键约束将两个表中的相应行联系起来。当被参照表进行修改和删除操作时,需要进行数据检查,如果违反外键约束,则不能进行相应操作;当对参照表进行添加和修改操作时,需要进行外键约束检查,如果违反外键约束,则不能进行相应操作。 另外还可以对违反外键约束进行处理策略定义。MySQL数据库数据库 语法: foreign key(外键字段名) references 外表表名(主键字段名) on delete cascade | set null | no action | restrict on update cascade | set null | no action | restri
9、ctMySQL数据库数据库任务三任务三 自定义的完整性自定义的完整性v 基础知识 任何关系数据库系统都应该支持实体完整性和参照完整性。这是关系模型所要求的。除此之外,不同的关系数据库系统根据其应用环境的不同,往往还需要特殊的约束条件。它反映某一具体应用所涉及的数据必须满足的语义要求。 MySQL数据库支持的用户定义约束如表5-2所示。 v (一)非空约束 非空约束指的是字段的值不能为NULL,在MySQL中,非空约束是通过NOTNULL定义的,其基本的语法格式如下所示:MySQL数据库数据库 字段名数据类型NOTNULL; 示例5-4:表sc中的score列不允许取空值。 Create tab
10、le sc (sno char(9), cno char(4) score double not null, primary key(sno, cno) ); 因为定义了主键约束完整性,隐含定义了sno和cno的值不允许取空值。v(二)唯一约束 唯一约束用于保证数据表中字段的唯一性,即表中字段的值不能重复出现。唯一约束是通过UNIQUE定义的,其基本的语法格式如下所示:MySQL数据库数据库 字段名 数据类型 UNIQUE; 示例5-5:定义学生姓名不能为重复 Create table student (sno char(9) primary key, name varchar(20) uni
11、que, gender char(2), age tinyint, depart varchar(20) );v(三)默认约束 默认约束用于给数据表中的字段制定默认值,即当在表中插入一条新记录时,如果没有给这个字段赋值,那么,数据库系统会自动为这个MySQL数据库数据库字段插入默认值。默认值是通过DEFAULT关键字定义的,其基本的语法格式如下所示: 字段名 数据类型 DEFAULT 默认值; 示例5-6:定义部门默认值为计算机 Create table student sno char(9) primary key, Name varchar(20), Gender char(2), Age
12、 tinyint, Depart varchar(20) default 计算机 ;v(四)检查和违约处理MySQL数据库数据库 当往表中插入元组或修改属性的值时,系统检查属性上的约束条件是否被满足,如果不满足则操作被拒绝执行。 注意:MySQL数据不支持check完整性语句,当SQL中具有check时,MySQL数据库忽略它,但不报错。MySQL数据库数据库任务四任务四 用户管理用户管理v 基础知识v (一)数据库安全性 数据安全性的目标是实现如下目标: (1)数据机密性。各用户对数据可以授予不同的存取权限。 (2)数据诚实性。允许数据被授权的用户进行合法存取,拒绝非法存取。 (3) 数据可
13、用性。不能拒绝已授权用户对相应数据的存取。 要实现数据安全性,数据库管理系统必须提供下列支持: (1)安全策略说明 (2)安全策略管理 (3)安全性检查。 数据库的安全性包含两个方面的工作:一是用户确认,二是授权及其验证。MySQL数据库数据库v (二)用户识别 用户识别方法主要有三种: (1)用户的专门知识:如口令、密码等。 (2)用户的特有东西:如徽章、磁卡、钥匙等。需要专门的阅读装置以及与数据库管理系统的接口软件。 (3)用户的个人特征:如声音、指纹、签名等。需要专门设备和识别算法。v (三)授权 授权解决“谁”对“哪些”数据能够进行“什么”操作,即用户都具有哪些权限。 授权方案基本由权
14、限的主体、对象和权限本身三部分组成。主体是所有用户的标识,对象是所有资源列表,权限是资源的存取类型。 权限可以转授。权限转授是指权限可以在用户之间传递。MySQL数据库数据库v (四)存取控制 数据库管理系统采用存取控制主要有两种:自主存取控制和强制存取控制。v 1. 自主存取控制 自主存取控制基于存取权限或特权概念及其实现技术与机制,通过授权来说明哪个用户对哪些数据对象具有什么样的权限。v 2. 强制存取控制 全部实体被分为主体和客体两大类,为主体和客体指派一个敏感度标记,敏感度标记被分成若干级别,例如绝密、机密、可信、公开等。主体的敏感度标记称为许可证级别,客体的敏感度标记称为密级。 强制
15、存取控制通过对比主体的许可证级别和客体的密级,最终确定主体是否能够存取客体,主体对任何客体的存取必须遵循如下规则: MySQL数据库数据库 (1)仅当主体的许可证级别大于或等于客体的密级时,该主体才能读取相应的客体; (2)仅当主体的许可证级别等于客体的密级时,该主体才能写相应的客体。 v(五)数据加密 数据加密是为了防止敏感数据被窃取而泄露给未授权的人,避免有人有意或无意绕过或避开数据库管理系统而窃取数据。 数据加密是把明文转换为不可辨识的秘密形式的技术,解密是加密的逆过程。 加密方法 (1)传统的加密方法:代码加密法、替换加密法、置换加密法等。 (2)改进的传统加密方法:DES方法、三层D
16、ES方法、RC2和RC4方法、数字摘要等方法。MySQL数据库数据库 (3)公钥加密法。v(六)安全性与完整性区别 数据的完整性是为了防止数据库中存在不符合语义的数据,也就是防止数据库中存在不正确的数据。数据的安全性是保护数据库防止恶意的破坏和非法的存取。因此,完整性检查和控制的防范对象是不合语义的、不正确的数据,防止它们进入数据库。安全性控制的防范对象是非法用户和非法操作,防止他们对数据库数据的非法存取。v(七)用户管理v1创建用户 (1)GRANT语句 Grant 权限 on 数据库对象 to 用户名MySQL数据库数据库 identified by 密码 with grant optio
17、n; 示例5-7:创建用户user1,密码为“123”。 grant all privileges on *.* to user1localhost identified by 123 with grant option;v(2)create user命令 Create user 用户名机器名或IP identified by password; 如果省略机器名或IP地址,则默认为是“%”,即可以通过网络上任意电脑远程访问。 例5-8:创建用户user2,密码为“123”。 Create user user2 Identified by 123;MySQL数据库数据库v (3)向user表插入
18、新行 直接用INSERT语句创建相同的账户,然后使用FLUSH PRIVILEGES告诉服务器重载授权表。 示例5-9:创建本地用户user3,密码为123。 insert into user values(localhost,monty,password(123), Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y); 示例5-10:创建远程用户user4,密码为“123”。 insert into user values(%,monty,PASSWORD(some_pass), Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y); 注意:直接用INSERT语句创建相同的账户,必
19、须使用FLUSHMySQL数据库数据库PRIVILEGES命令才能生效。v2删除用户 删除用户语法: Drop user 用户名 , 用户名 . 可以同时删除多个用户。v3修改密码 (1)mysqladmin命令 mysqladmin命令修改密码语法: mysqladmin -u 用户名 -h 主机名 password 密码; (2)set password命令 set password修改密码语法: set passwordMySQL数据库数据库 for 用户名主机 = password(密码);v(3)grant命令 grant命令修改密码语法: grant usage on *.* to
20、 用户名主机 identified by 密码;v(4)更新user表 更新user表修改密码格式: update user set password=密码 where host=主机 and user=用户名; 注意:使用更新user表修改密码,必须使用flush privileges;命令才能生效。MySQL数据库数据库任务五任务五 权限管理权限管理v 基础知识 MySQL有先进但非标准的安全/权限系统。v (一)权限认证 MySQL权限系统通过下面两个阶段进行认证: (1)对连接的用户进行身份认证,合法的用户通过认证,不合法的 用户拒绝连接; (2)对通过认证的合法用户赋予相应的权限,用
21、户可以在这些权限范围内对数据库做相应的操作。 对于身份的认证,MySQL是通过IP地址和用户名联合进行确认的,例如MySQL安装后默认创建的用户rootlocalhost表示用户root只能从本地(localhsot)进行连接才可以通过认证,此用户从其他主机对数据库进行的连接都将被拒绝。v (二)MySQL提供的权限MySQL数据库数据库 账户权限信息被存储在MySQL数据库的user、db、host、tables_priv、columns_priv和procs_priv表中。 GRANT和REVOKE语句所用的涉及权限的名称显示在下表,还有在授权表中每个权限的表列名称和每个权限作用对象。My
22、SQL数据库数据库 MySQL数据库数据库v (三)查看用户权限 查看某个用户权限的SQL语法: Show grants for 用户名主机名或IP地址; 示例:查看本地用户root的权限 show grants for rootlocalhost;v (四)授权 授权是把权限赋予用户的操作,语法如下: Grant 权限(列名), 权限(列名), on 数据库对象 to 用户名 identified by “password” with grant optionMySQL数据库数据库 示例:授予用户user2查询数据表student的权限。 Grant select on chap5.stud
23、ent To user2;v(五)撤销授权 撤销权限是从用户收回权限,语法如下: revoke 权限(列名), 权限(列名), on 数据库对象 from user; 示例:revoke all privileges on *.* from user2; 注意:手动地修改授权表,必须执行mysqladmin flush-privileges或mysqladmin reload命令才能使授权生效。MySQL数据库数据库实验六实验六 数据库安全性实验数据库安全性实验v 实验目的 理解数据库安全性定义与检查 掌握数据库用户的定义和管理 掌握授权和撤销权限v 实验条件 计算机(电脑) Windows
24、7操作系统 MySQL5.6数据库v 实验内容 1. 通过不同方法创建用户user1、user2和user3。 2. 使用grant和revoke实现安全性控制 (1)把对表sc的insert权限授予用户user1,并允许他将此权限再授予其他用户。MySQL数据库数据库 示例4-33:查询年龄大于20并且性别为男的学生。 select * from student where age20 intersect select * from student where gender=男;v(三)差操作 差操作关键字为except,语法如下: select except all | distinctMySQL数据库数据库v (2)把查询student表和修改学生表的权限授给用户user3。v (3)把用户user3修改学生表的权限撤销。MySQL数据库数据库 谢谢追求追求