西华师范大学计算机学院

上传人:t****d 文档编号:242979822 上传时间:2024-09-13 格式:PPT 页数:52 大小:73KB
返回 下载 相关 举报
西华师范大学计算机学院_第1页
第1页 / 共52页
西华师范大学计算机学院_第2页
第2页 / 共52页
西华师范大学计算机学院_第3页
第3页 / 共52页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,第三章 关系数据库标准语言SQL,(续2),1,第三章 关系数据库标准语言SQL,3.1,SQL概述,3.2,数据定义,3.3,查询,3.4,数据更新,3.5,视图,3.6,数据控制,3.7,嵌入式SQL,3.8 小结,2,3.6 数据控制,概述,3.6.1 授权,3.6.2 收回权限,小结,3,概述,数据控制亦称为数据保护,包括数据的:,安全性控制,完整性控制,并发控制,恢复,4,SQL语言的数据控制功能,SQL语言提供了数据控制功能,能够在一定程度上保证数据库中数据的安全性、完整性,并提供了一定的并发控制及恢复能力。,5,1. 完整性,数据库系统必须保证数据库中的数据是完整的。在更新数据库时,关系中不能出现不符合完整性要求的元组,这样才能给用户提供正确、有效的信息。实现这一目的的最直接方法,是要求用户在编写数据库应用程序时,对每个插入、删除、修改操作,都加入必要的完整性检查代码。,6,实体完整性和主码,在SQL中,实体完整性是通过主码(Primary Key)来实现的。一旦某个属性或属性组被定义为主码,该主码的每个属性就不能为空值,并且在关系中不能出现主码值完全相同的两个元组。主码可在定义关系的CREATE TABLE语句中使用PRIMARY KEY关键字加以定义。有两种定义主码的方法,一种是在,属性后增加关键字,,另一种是在属性表中加入,额外的定义主码的子句,:,PRIMARY KEY(主码属性名表),7,例 在employee表中说明eno为主码,有两种方法:,1)使eno为主码,CREATE TABLE employee,(eno char(4) PRIMARY KEY,name varchar(8),sex char(2),age integer,dno char(2);,8,2)单独说明主码,CREATE TABLE employee,(eno char(4),name varchar(8),sex char(2),age integer,dno char(2),PRIMARY KEY(eno);,9,如果关系的主码只含有单个属性,上面的两种方法都可以使用。如果主码由两个或两个以上属性组成,只能使用第2)种方法。如itememp表的主码由ino和eno组成,则只能采用第2)种方法,PRIMARY KEY子句应说明成:,PRIMARY KEY(ino,eno),10,SQL中,并没有强制规定必须为每个关系指定主码,但为每个关系指定主码通常更好一些。除了主码,SQL中使用关键字UNIQUE,说明该属性(或属性组)的值不能重复出现。但说明为UNIQUE的属性可以定义为空值,与主码又有所不同。并且一个表中只能有一个主码,但可以有多个“UNIQUE”说明。,例 说明employee表中职工不能重名,有两种方法:,(1)在name属性后面加上UNIQUE说明:,name varchar(8) UNIQUE,,(2)在属性列表后使用UNIQUE说明:,UNIQUE(name),11,外部码约束的说明,说明外部码的方法有两种:,(1)在该属性的说明(属性名、类型)后直接加上关键字REFERENCES,后跟对应表的主码说明。格式为,REFERENCES (),其中表名为参照关系名,属性名为参照关系的主码。,(2)在CREATE TABLE语句的属性清单后,加上外部码的说明子句,格式为,FOREIGN KEY REFERENCES (),其中,属性名表中的属性可以多于一个,但必须前后对应。,12,例 说明employee表中dno为外部码,参照关系为department。两种方法分别如下:,1),CREATE TABLE employee,(eno char(4) PRIMARY KEY,name verchar(8),sex char(2),age integer,dno char(2) REFERENCES department(dno);,13,2),CREATE TABLE employee,(eno char(4) PRIMARY KEY,name varchar(8),sex char(2),age integer,dno char(2),FOREIGN KEY dno REFERENCES department(dno);,注意,在说明dno为employee的外部码时,department关系中的dno必须已被说明为主码。,14,用户自定义完整性约束,用户自定义完整性约束取决于应用环境的需要,因此不同数据库应用系统的自定义完整性要求是千差万别的,有些较简单,有些则较复杂。SQL中提供了非空约束、对属性的CHECK约束、对元组的CHECK约束、触发器等来实现用户的各种完整性要求。,15,一、基于属性的CHECK约束,使用CHECK(检查)子句可保证属性值满足某些前提条件。CHECK子句的一般格式为,CHECK ,属性的CHECK约束既可跟在属性的定义后,也可在定义语句中另增一子句加以说明。,16,例:规定employee表中属性age的值不能小于18、大于65。只需将age属性说明为如下的形式:,age integer CHECK(age=18 AND age=18 AND age=65),CHECK还可以模拟枚举类型,例如,可在CREATE TABLE语句中用以下子句说明属性sex的取值只能取“男”或“女”:,Sex char(2) CHECK(sex IN(男,女),17,例如,CREATE TABLE publishers,( pub_id char(4) NOT NULL,CHECK,(,pub_id IN (1389, 0736, 0877, 1622, 1756) OR pub_id LIKE 990-90-9,),pub_name varchar(40) NULL,city varchar(20) NULL,state char(2) NULL,country varchar(30) NULL DEFAULT(USA) ),18,二、基于元组的约束,对表内元组说明约束时,在CREATE TABLE语句中的属性表、主码、外部码的说明之后加上CHECK子句。每当对元组进行插入或修改操作时,都要对CHECK子句的条件表达式求值,如果条件为假,违背了约束,系统将拒绝该插入或修改操作。,19,例: 工资表salary的定义:,CREATE TABLE salary,(Eno char(4) PRIMARY KEY,Basepay decimal(7,2),,Service decimal(7,2),,Price decimal(7,2),,Rest decimal(7,2),,Insure decimal(7,2),,Fund decimal(7,2),,CHECK(Insure+FundBasepay);,20,约束的更新,约束与数据库中的表、视图等一样,可以进行增加、删除和修改的更新操作。为了修改和删除约束,需要在定义约束时对约束进行命名,在约束前加上关键字CONSTRAINT和该约束的名称。,21,例如说明employee表中的主码和外部码时,分别命名为PK-employee和FK-employee:,Eno char(4) CONSTRAINT PK-employee PRIMARY KEY,,dno char(4) CONSTRAINT FK-employee FOREIGN KEY,REFERENCES department(dno),上例中的约束可以在定义时命名:,CONSTRAINT RightSalary,CHECK(Insure+FundBasepay),22,例 删除employee表中的外部码约束FK-employee:,ALTER TABLE employee DROP CONSTRAINT FK-employee;,例: 修改对Salary的约束RightSalary中的表达式为:,Insure+FundRest。,由于SQL不能直接修改约束,可通过以下两步完成对约束的修改:,(1)删除原约束:ALTER TABLE Salary DROP CONSTRAINT RightSalary;,(2)增加同名约束:ALTER TABLE Salary ADD CONSTRAINT RightSalary CHECK(Insure+Fund普通用户,基本表或视图的属主拥有对该表或视图的一切操作权限,接受权限的用户:,一个或多个具体用户,PUBLIC(全体用户),35,(4) WITH GRANT OPTION子句,指定了WITH GRANT OPTION子句:,获得某种权限的用户还可以把这种权限,再授予,别的用户。,没有指定WITH GRANT OPTION子句:,获得某种权限的用户只能使用该权限,,不能传播,该权限,36,例题,例1 把查询Student表权限授给用户U1,GRANT SELECT,ON TABLE Student,TO,U1,;,37,例题(续),例2 把对Student表和Course表的全部权限授予用户U2和U3,GRANT,ALL PRIVILIGES,ON TABLE Student, Course,TO U2, U3;,例4,38,例题(续),例3 把对表SC的查询权限授予所有用户,GRANT SELECT,ON TABLE SC,TO,PUBLIC,;,39,例题(续),例4 把查询Student表和修改学生学号的权限授给用户U4,GRANT,UPDATE(Sno),SELECT,ON TABLE Student,TO U4;,40,例题(续),例5 把对表SC的INSERT权限授予U5用户,并允许他再将此权限授予其他用户,GRANT INSERT,ON TABLE SC,TO U5,WITH GRANT OPTION,;,41,传播权限,执行例5后,U5不仅拥有了对表SC的INSERT权限,,还可以传播此权限,:,GRANT INSERT ON TABLE SC,TO U6,WITH GRANT OPTION,;,同样,U6还可以将此权限授予U7:,GRANT INSERT ON TABLE SC,TO U7,;,但U7不能再传播此权限。,U5- U6- U7,42,例题(续),例6 DBA把在数据库S_C中建立表的权限授予用户U8,GRANT,CREATETAB,ON,DATABASE,S_C,TO U8;,43,例题,下面的语句将把对Northwind数据库中customers表的查询权限赋予用户test:,use northwind,grant select,on customers,to test,可以用以下语句查询表的存取权限,exec sp_helprotect customers,44,3.6 数据控制,概述,3.6.1 授权,3.6.2 收回权限,小结,45,SQL收回权限的功能,REVOKE语句的一般格式为:,REVOKE ,.,ON ,FROM ,.;,功能:从指定,用户,那里收回对指定,对象,的指定,权限,46,例题,例7 把用户U4修改学生学号的权限收回,REVOKE UPDATE(Sno),ON TABLE Student,FROM U4;,47,例题(续),例8 收回所有用户对表SC的查询权限,REVOKE SELECT,ON TABLE SC,FROM,PUBLIC,;,48,例题(续),例9 把用户U5对SC表的INSERT权限收回,REVOKE INSERT,ON TABLE SC,FROM U5;,49,例题,下面的语句将收回用户test对Northwind数据库中customers表的查询权限:,use northwind,revoke select,on customers,to test,50,权限的级联回收,系统将收回直接或间接从U5处获得的对SC,表的INSERT权限:,-U5- U6- U7,收回U5、U6、U7获得的对SC表的INSERT,权限:,-U5- U6- U7,51,小结:,SQL灵活的授权机制,DBA拥有对数据库中所有对象的所有权限,并可以根据应用的需要将不同的权限授予不同的用户。,用户对自己建立的基本表和视图拥有全部的操作权限,并且可以用GRANT语句把其中某些权限授予其他用户。,被授权的用户如果有“继续授权”的许可,还可以把获得的权限再授予其他用户。,所有授予出去的权力在必要时又都可以用REVOKE语句收回。,52,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!