1、第第5 5章章 数据库管理数据库管理第第5章章 数据库管理数据库管理5.1 学习目标学习目标5.2 视图视图5.3 索引索引5.4 安全性安全性5.5 完整性完整性5.6 系统表系统表5.7 小结小结5.1 学习目标学习目标v学完本章后,读者应具备以下能力:理解视图的概念和作用。能建立视图,会使用视图实现数据的逻辑独立性。理解索引的概念和作用。掌握建立索引的一般规则,能利用索引改善查询性能。理解数据库的操作权限,掌握授权的方法。理解角色的概念,能利用角色简化权限管理。理解参照完整性的概念以及对SQL语句的影响。基本掌握用户定义完整性约束的方法。第第5章章 数据库管理数据库管理5.1 学习目标学
2、习目标5.2 视图视图5.3 索引索引5.4 安全性安全性5.5 完整性完整性5.6 系统表系统表5.7 小结小结5.2 视图视图v视图视图是从一个或多个表中导出的表,用户可以像对表一样对它进行查询,在SELECT语句中可以出现表的地方都可以出现视图。v视图是一个虚表虚表,在数据库中只存储视图的定义(一个SELECT语句)而不存放视图的数据,这些数据仍存放在导出视图的基本表中,直到用户使用视图时才去执行视图的定义,求出数据。5.2 视图(续)视图(续)5.2.1 建立视图建立视图 5.2.2 删除视图 5.2.3 查询视图 5.2.4 更新视图 5.2.5 视图的作用5.2.1 建立视图建立视
3、图vSQL语言用CREATE VIEW命令建立视图,其一般格式为:CREATE VIEW (,)AS WITH CHECK OPTION;v组成视图的列名可以全部省略或者全部指定。5.2.1 建立视图(续)建立视图(续)v下列三种情况下必须明确指定组成视图的所有列名:某个目标列不是单纯的列名,而是聚集函数或列表达式。多表连接时选出了几个同名列作为视图的列。需要在视图中为某个列启用更合适的名字。v子查询可以是任意复杂的SELECT语句,但通常不允许含有ORDER BY子句和DISTINCT短语。vWITH CHECK OPTION表示,对视图进行UPDATE和INSERT操作时,要保证更新后的元
4、组和新插入的元组满足视图定义中子查询的WHERE子句中的条件表达式。5.2.1 建立视图(续)建立视图(续)例例5.1 建立计算机学院学生的视图。CREATE VIEW Student_CS AS SELECT*FROM Student WHERE Sdept=计算机学院 例5.1在表Student上建立了视图Student_CS,但是没有明确指出视图Student_CS的列名,则构成视图的列与SELECT子句相同。即Student_CS有Sno、Sname、Sgender、Sage和Sdept共5个列,这5个列分别对应Student的Sno、Sname、Sgender、Sage和Sdept列
5、。CREATE VIEW语句的执行结果是在DBMS的数据字典中保存了视图名和SELECT语句。5.2.1 建立视图建立视图(续续)例例5.2 建立英语课(1156)成绩单的视图。CREATE VIEW English_Grade(Sno,Sname,Grade)ASSELECT Student.Sno,Sname,GradeFROM Student JOIN SC ON Student.Sno=SC.Sno AND SC.Cno=1156例2在表Student和SC上建立了视图English_Grade。它有3个列:Sno、Sname和Grade,分别对应表Student的Sno列、Sname
6、列和表SC的Grade列。因为SELECT语句中包含了Student表与SC表的同名列Sno,所以必须在视图名后面明确说明视图的各个列名。5.2.1 建立视图(续)建立视图(续)例例5.3 定义一个反映学生出生年份的视图。CREATE VIEW BT_S(Sno,Sname,Sbirthday)ASSELECT Sno,Sname,datepart(getdate(),year)SageFROM Student由于Student表的Sage列存放了学生的年龄,没有存放其出生年份,例5.3定义的视图由学号、学生姓名和学生出生年份三个列组成。getdate()返回系统日期,datepart函数求出
7、日期中的年份。由于SELECT子句中出现了表达式,则必须指明视图的列名。视图不仅可以建立在一个或多个表上,也可以建立在一个或多个已定义好的视图上,或建立在表与视图上。5.2.1 建立视图(续)建立视图(续)例例5.4 建立英语课的成绩在80分以上的学生的视图。CREATE VIEW English_Grade_80ASSELECT Sno,Sname,GradeFROM English_GradeWHERE Grade=80已经定义过的视图可以和表一样使用。例5.4中的FROM子句中出现了在例5.2定义过的视图English_Grade,因此,视图English_Grade_80是建立在视图E
8、nglish_Grade之上。5.2 视图视图 5.2.1 建立视图 5.2.2 删除视图删除视图 5.2.3 查询视图 5.2.4 更新视图 5.2.5 视图的作用5.2.2 删除视图删除视图v当不再需要一个视图时,可以删除它,语句格式为:DROP VIEW 例例5.5 删除视图Student_CS。DROP VIEW Student_CSDROP VIEW语句执行后,DBMS从数据字典中删除视图Student_CS和定义它的SELECT语句。例例5.6 删除视图English_Grade。DROP VIEW English_Grade5.2 视图视图 5.2.1 建立视图 5.2.2 删除
9、视图 5.2.3 查询视图查询视图 5.2.4 更新视图 5.2.5 视图的作用5.2.3 查询视图查询视图v定义视图以后,就可以像对表一样对视图进行查询。例例5.7 查找计算机学院年龄小于19岁的学生的姓名。视图Student_CS包含有计算机学院全体学生的信息,可以直接对视图进行查询。SELECT SnameFROM Student_CSWHERE Sage 19 5.2.3 查询视图(续)查询视图(续)v 对视图进行查询时,DBMS要进行视图消解工作,把对视图的查询转换为对基本表基本表(定义视图时涉及的表)的查询,即把对视图查询的一个SQL语句,转换为对基本表查询的SQL语句。v 视图消
10、解的基本过程分为个步骤:从数据字典中取出定义视图的子查询(SELECT语句)。用子查询的FROM子句替换要执行的SELECT的FROM子句。根据定义视图时,视图的列和基本表的列的对应关系,映射要执行的SELECT子句的列到基本表的列。将定义视图的子查询的WHERE子句的条件表达式合并到要执行的SELECT语句的WHERE子句中,逻辑关系是与关系。5.2.3 查询视图(续)查询视图(续)SELECT Sno,SageFROM Student_CSWHERE Sage 19 SELECT*FROM StudentWHERE Sdept=计算机学院SELECT Student.Sno,Student
11、.SageFROM StudentWHERE Sage=80这时,DBMS无法像前面例5.7那样得到一个等价的SELECT语句。DBMS采用第二种视图消解方法。先执行定义视图S_G的SELECT语句,得到了一个结果,把它作为一个临时表tmp_S_G,然后将上面的查询语句改写为:SELECT*FROM tmp_S_GWHERE Gavg=80同样可以得到正确结果。因此,我们可以把视图当作表一样进行查询,而不必关心DBMS如何进行处理。5.2 视图视图 5.2.1 建立视图 5.2.2 删除视图 5.2.3 查询视图 5.2.4 更新视图更新视图 5.2.5 视图的作用5.2.4 更新视图更新视图
12、v更新视图是指向视图中插入(INSERT)、删除(DELETE)和更新(UPDATE)数据。v对视图的更新操作也要通过视图消解转换为对表的更新操作。v不是所有的视图都是可更新的,因为有些视图的更新不能唯一有意义地转换成对相应表的更新。5.2.4 更新视图(续)更新视图(续)例如,例5.8定义的视图S_G是由“学号”和“平均成绩”两个属性列组成的,其中“平均成绩”一项是由Student表中对元组分组后计算平均值得来的。如果我们想把视图S_G中学号为2007012的学生的平均成绩改成90分,SQL语句如下:UPDATE S_GSET Gavg=90WHERE Sno=2007012但这个对视图的更
13、新是无法转换成对表SC的更新的,因为系统无法修改各科成绩,以使平均成绩成为90。所以S_G视图是不可更新的。5.2.4 更新视图(续)更新视图(续)v 行列子集视图行列子集视图 若一个视图是从单个表导出的,并且只是去掉了表的某些行和某些列,但保留了主码,则这类视图称为行列子集视图。v 应该指出的是,不可更新的视图与不允许更新的视图是两个不同的概念。前者指理论上已证明其是不可更新的视图。后者指实际系统中不支持其更新,但它本身有可能是可更新的视图。v 对于行列子集视图的更新,DBMS也要进行视图消解,把对视图的更新转换为对基本表的更新。5.2.4 更新视图(续)更新视图(续)例例.9 将计算机学院
14、的学生马翔的姓名改为马飞翔。UPDATE Student_CSSET Sname=马飞翔WHERE Sname=马翔DBMS进行视图消解后,得到下面的语句:UPDATE StudentSET Sname=马飞翔WHERE Sname=马翔 AND Sdept=计算机学院 5.2.4 更新视图(续)更新视图(续)例例5.10 计算机学院增加一个新生,学号为2007015,姓名为赵新,年龄为20岁。INSERTINTO Student_CS(Sno,Sname,Sage)VALUES(2007015,赵新,20)转换后的更新语句为:INSERTINTO Student(Sno,Sname,Sage
15、)VALUES(2007015,赵新,20)5.2.4 更新视图(续)更新视图(续)例例5.11 删除计算机学院学生赵新,学号是2007015。DELETEFROM Student_CSWHERE Sno=2007015转换为对表的删除操作:DELETEFROM StudentWHERE Sno=2007015 AND Sdept=计算机学院5.2.4 更新视图(续)更新视图(续)v要防止用户通过视图对数据库进行增删改时有意或无意地对不属于视图范围内(不满足子查询的过滤条件)的基本表数据进行操作,则在视图定义时要加上WITH CHECK OPTION子句。WITH CHECK OPTION短语
16、相当于在视图上施加了一个元组级约束条件,更新前后的元组必须满足定义视图的子查询的过滤条件。若操纵的元组不满足条件,则拒绝执行该操作。5.2.4 更新视图(续)更新视图(续)例例5.12 建立计算机学院学生的视图,要求进行更新操作前后的元组要保证满足视图的过滤条件(即Sdept列上的值是计算机学院)。CREATE VIEW Student_CSASSELECT*FROM StudentWHERE Sdept=计算机学院WITH CHECK OPTION由于在定义Student_CS视图时加上了WITH CHECK OPTION子句,所以以后对该视图进行插入、修改时,DBMS会自动检查插入的元组和
17、修改后的元组在Sdept列上的值是否等于计算机学院。例如,DBMS会拒绝执行下面的对视图进行修改的SQL语句。INSERTINTO Student_CS(Sno,Sname,Sage)VALUES(2007015,赵新,20)-新插入的元组在Sdept的值不等于计算机学院 UPDATE Student_CSSET Sdept=环境学院 -试图将Sdept的值由计算机学院更改为环境学院WHERE Sno=20070125.2 视图视图 5.2.1 建立视图 5.2.2 删除视图 5.2.3 查询视图 5.2.4 更新视图 5.2.5 视图的作用视图的作用5.2.5 视图的作用视图的作用v视图能够
18、简化用户的操作视图能够简化用户的操作v视图可以减少冗余数据视图可以减少冗余数据v视图对重构数据库提供了一定程度的逻辑独立性视图对重构数据库提供了一定程度的逻辑独立性v视图能够对机密数据提供安全保护视图能够对机密数据提供安全保护5.2.5 视图的作用(续)视图的作用(续)例如,将学生关系拆分为SX和SY两个关系:Student(Sno,Sname,Ssex,Sage,Sdept)SX(Sno,Sname,Sage)SY(Sno,Ssex,Sdept)这时,表Student为SX表和SY表自然连接的结果。如果建立一个视图Student:CREATE VIEW Student(Sno,Sname,S
19、sex,Sage,Sdept)ASSELECT SX.Sno,SX.Sname,SY.Ssex,SX.Sage,SY.SdeptFROM SX,SYWHERE SX.Sno=SY.Sno;尽管数据库的逻辑结构改变了,但应用程序并不必修改。当然,应用程序中修改数据的语句可能仍会因表结构的改变而改变。第第5章章 数据库管理数据库管理5.1 学习目标学习目标5.2 视图视图5.3 索引索引5.4 安全性安全性5.5 完整性完整性5.6 系统表系统表5.7 小结小结5.3 索引索引1.1 学习目标1.2 数据库系统的定义1.3 数据库系统的特点 123图5.2 图书目录和图书的关系5.3 索引(续)索
20、引(续)5.3.1 索引的基本概念索引的基本概念 5.3.2 索引的建立和维护索引的建立和维护5.3.1 索引的基本概念索引的基本概念v索引的定义索引的定义 索引是一个独立的、物理的数据库结构,基于表的一列或多列而建立,按照列值从小到大或从大到小排序,提供了一个新存取路径。20070122007014200711320072562007278SnoSnameSgenderSageSdept2007012马翔男19计算机学院2007113刘大方男18管理学院2007256史玉明女19管理学院2007278龚兵男19管理学院2007014张晓敏女18计算机学院图5.3 建立在表Student的列S
21、no上的索引5.3.1 索引的基本概念(续)索引的基本概念(续)图5.3的左面给出了在表Student中学号列上建立的索引,索引项的值按照从小到大的次序排序。表本身提供了一个存取路径,即顺序访问,按照元组存放的先后顺序逐个访问每个元组,2007012、2007113、2007256索引提供了另外一个存取路径,顺序访问索引,读出一条索引后,再根据指针读取表中的元组。按照索引提供的访问路径,访问元组的次序为2007012、2007014、2007113SnoSnameSgenderSageSdept2007012马翔男19计算机学院2007113刘大方男18管理学院2007256史玉明女19管理学
22、院2007278龚兵男19管理学院2007014张晓敏女18计算机学院0140121132562781130145.3.1 索引的基本概念(续)索引的基本概念(续)图5.4 树形式的索引图5.3中以线性表(数组)的形式表示索引。实际上,在数据库中,索引往往被组织成一棵B+树。在B+树中,所有的码都出现在B+树的叶子节点中,并按照码值从小到大的顺序组织成了一个链表。非叶子节点由n个码和n+1个指针组成,码和指针的排列次序为P0,K1,P1,K2,Pn,Kn,K1K2Kn,P0,P1,Pn指向了n+1个节点,指针Pi-1指向节点中的每个码的值都小于等于Ki。B+树的具体内容请读者参阅“数据结构”或
23、“数据库原理”的相关书籍。图5.3的索引被组织成一个2阶B+树的形式如图5.4(为了节省空间,节点中的码只给出了后3位)。B+树索引提供了另外一个存取路径,可以快速地定位表中的某个元组。例如,要读取元组2007014,首先在根节点中查找,然后根据指针P0,找到最左面的叶子节点,最后,根据叶子节点的指针,读取所需要的元组。B+树是一棵平衡树,从根节点到任何一个叶子节点的路径长度相同。因此,假设B+树的深度为L,读取表中任何一个元组需要读B+树中的L个节点。5.3.1 索引的基本概念(续)索引的基本概念(续)v索引的分类索引的分类 按照表中建立索引的那一列(或列组合)中的数据是否各不相同,可以将索
24、引分为唯一索引(UNIQUE)和非唯一索引(NOT UNIQUE)。按照索引的结构,可以将其划分为两大类,聚簇索引(Clustered Index)和非聚簇索引(Nonclustered index)。聚簇索引要求将表中的元组与索引键值以同样的物理顺序存储,非聚簇索引则无此要求。聚簇索引能提高某些类型的查询效率。每个表最多只能有一个聚簇索引。5.3.1 索引的基本概念(续)索引的基本概念(续)SnoSnameSgenderSageSdept2007012 马翔男19计算机学院2007113 刘大方 男18管理学院2007256 史玉明 女19管理学院2007278 龚兵男19管理学院20070
25、14 张晓敏 女18计算机学院student计算机学院管理学院图5.5 非唯一索引5.3.1 索引的基本概念(续)索引的基本概念(续)v建立索引的原则建立索引的原则 值得建立索引:记录有一定规模,而查询只局限于少数记录。索引用得上:索引列在WHERE子句中频繁使用。通常,下列情况需要在表中的某一列或某些列上建立索引:经常用作查询条件的列。需要频繁地按范围搜索的列。连接中频繁使用的列。在ORDER BY子句中经常使用的列。主关键字或外关键字的列。值是唯一的列(如IDENTITY)。先装数据,后建立索引。5.3.1 索引的基本概念(续)索引的基本概念(续)5.3 索引索引 5.3.1 索引的基本概
26、念索引的基本概念 5.3.2 索引的建立和维护索引的建立和维护5.3.2 索引的建立和维护索引的建立和维护v建立索引建立索引 格式格式 CREATE UNIQUE CLUSTERED|NONCLUSTERED INDEX ON(,);是要建索引的表的名字。索引可以建立在表的一列或多列上,各列名之间用逗号分隔 每个后面还可以用指定索引值的排列次序,可选ASC(升序)或DESC(降序),默认值为ASC。UNIQUE表明此索引的每一个索引值只对应唯一的数据记录。CLUSTERED表示要建立的索引是聚簇索引。NONCLUSTERED意味着建立非聚簇索引。例如,执行下面的CREATE INDEX语句:C
27、REATE CLUSTERED INDEX Stusname ON Student(Sname)将在Student表Sname列上建立一个聚簇索引,而且Student表中的记录将按照Sno值的升序存放。5.3.1 索引的建立和维护(续)索引的建立和维护(续)例例5.13 为学生-课程数据库中的Student、Couse、SC三个表建立索引。其中Student表按学号升序建唯一索引,Course表按课程号降序建唯一索引,SC表按学号升序和课程号降序建唯一索引。CREATE UNIQUE INDEX Stusno ON Student(Sno)CREATE UNIQUE INDEX Coucno
28、ON Course(Cno DESC)CREATE UNIQUE INDEX SCno ON SC(Sno ASC,Cno DESC)5.3.1 索引的建立和维护(续)索引的建立和维护(续)v删除索引删除索引 格式格式 DROP INDEX 例例5.14删除Student表的Stusname索引。DROP INDEX Student.Stusno删除索引时,系统从数据字典中删去有关该索引的描述,同时从数据区删除索引的数据。5.3.1 索引的建立和维护(续)索引的建立和维护(续)第第5章章 数据库管理数据库管理5.1 学习目标学习目标5.2 视图视图5.3 索引索引5.4 安全性安全性5.5 完
29、整性完整性5.6 系统表系统表5.7 小结小结5.4 安全性安全性v数据库中存放了一个组织的全部数据,许多日常工作都要依赖于数据库系统,如果数据库的数据安全出现了问题,会影响到组织的正常运行。5.4 安全性安全性 5.4.1 登录名与用户 5.4.2 权限 5.4.3 授权 5.4.4 收回权限 5.4.5 角色 5.4.6 一个实例 5.4.7 权限审核5.4.1 登录名与用户登录名与用户v增加登录名增加登录名 格式一格式一sp_addlogin loginame=login ,passwd=password ,defdb=database ,deflanguage=language ,si
30、d=sid ,encryptopt=encryption_option 登录名用户名图5.6 使用SQL Server的登录过程 参数 loginame=login:登录的名称。passwd=password:登录密码。defdb=database:登录的默认数据库。deflanguage=language:用户登录到 SQL Server 时系统指派的默认语言。sid=sid:安全标识号(SID)。encryptopt=encryption_option:指定当密码存储在系统表中时,密码是否要加密。功能:存储过程sp_addlogin添加SQL Server登录名。权限:只有 sysadmi
31、n 和 securityadmin 固定服务器角色的成员才可以执行 sp_addlogin。5.4.1 登录名与用户(续)登录名与用户(续)例例5.15 增加登录名st1、st2、st3、st4、U5、U6和U7,密码使用默认设置值NULL,默认数据库为S_C_SC。以sa登录进SQL Server,使用查询分析器,执行下面的语句:sp_addlogin loginame=st1,defdb=S_C_SCGOsp_addlogin loginame=st2,defdb=S_C_SCGOsp_addlogin loginame=st3,defdb=S_C_SCGOsp_addlogin logi
32、name=st4,defdb=S_C_SCGOsp_addlogin loginame=U5,defdb=S_C_SCGOsp_addlogin loginame=U6,defdb=S_C_SCGOsp_addlogin loginame=U7,defdb=S_C_SCGO5.4.1 登录名与用户(续)登录名与用户(续)格式二:sp_grantlogin loginame=login 参数:loginame=login表示要添加的 Windows NT 用户或组的名称。Windows NT 组和用户必须用 Windows NT 域名限定,格式为域用户,例如 LondonJoeb。功能:使 Wi
33、ndows NT 用户或组账户得以使用 Windows 身份验证连接到 SQL Server。权限:仅 sysadmin 或 securityadmin 固定服务器角色的成员可以执行 sp_grantlogin。5.4.1 登录名与用户(续)登录名与用户(续)例例5.16 将计算机机lsnmobile的Windows本地用户lsn增加为登录名。sp_grantlogin lsnmobilelsnGO5.4.1 登录名与用户(续)登录名与用户(续)v删除登录名删除登录名 格式一:sp_droplogin loginame=login 参数:loginame=login表示将被删除的登录。logi
34、n 必须已经存在于 SQL Server 中。功能:删除 SQL Server 登录,以阻止使用该登录名访问 SQL Server。权限:只有 sysadmin 和 securityadmin 固定服务器角色的成员才能执行 sp_droplogin。5.4.1 登录名与用户(续)登录名与用户(续)格式二:sp_revokelogin loginame=login 参数:loginame=login:是 Windows NT 用户或组的名称。功能:从 SQL Server 中删除用 sp_grantlogin 或 sp_denylogin 创建的 Windows NT 用户或组的登录项。权限:只
35、有 sysadmin 和 securityadmin 固定服务器角色的成员才能执行 sp_revokelogin。5.4.1 登录名与用户(续)登录名与用户(续)例例5.17 删除登录名U5。sp_droplogin U5GO5.4.1 登录名与用户(续)登录名与用户(续)v增加数据库用户 格式:sp_grantdbaccess loginame=login ,name_in_db=name_in_db OUTPUT 参数:loginame=login:SQL Server中的登录名。name_in_db=name_in_db OUTPUT:数据库中用户的名称5.4.1 登录名与用户(续)登录
36、名与用户(续)功能:为 SQL Server登录或 Windows NT 用户或组在当前数据库中添加一个用户安全账户,并使其能够被授予在数据库中执行活动的权限。权限:只有 sysadmin 固定服务器角色、db_accessadmin 和 db_owner 固定数据库角色的成员才能执行 sp_grantdbaccess。5.4.1 登录名与用户(续)登录名与用户(续)例例5.18 使登录名st1、st2、st3、st4、u5、u6和u7分别成为数据库S_C_SC的用户U1、U2、U3、U4、U5、U6和U7。USE S_C_SCGOsp_grantdbaccess st1,U1GOsp_gra
37、ntdbaccess st2,U2GOsp_grantdbaccess st3,U3GOsp_grantdbaccess st4,U4GOsp_grantdbaccess u5,U5GO sp_grantdbaccess u6,U6GO sp_grantdbaccess u7,U7GO 5.4.1 登录名与用户(续)登录名与用户(续)v删除数据库用户删除数据库用户 格式:sp_revokedbaccess name_in_db=name 参数:name_in_db=name:是要删除的账户名。功能:从当前数据库中删除安全账户。权限:只有 sysadmin 固定服务器角色成员及 db_acces
38、sadmin 和 db_owner 固定数据库角色成员才能执行 sp_revokedbaccess。例例5.19 删除数据库S_C_SC的用户U5。sp_revokedbaccess U5GO5.4.1 登录名与用户(续)登录名与用户(续)5.4 安全性安全性 5.4.1 登录名与用户 5.4.2 权限 5.4.3 授权 5.4.4 收回权限 5.4.5 角色 5.4.6 一个实例 5.4.7 权限审核5.4.2 权限权限Select,Insert,Update,Delete,AllSelect,Insert,Update,Delete,Alter,Index,All数据库表视图列Connec
39、t,CreateUpdate图5.6 数据库对象的层次和权限5.4.2 权限(续)权限(续).数据库数据库 成为数据库管理系统的用户后,还要获得对数据库的Connect权限,才能连接到数据库,使用数据库。Create权限说明用户可以在数据库中使用CREATE语句创建视图、表等数据库对象。数据库的创建者自动拥有对数据库的全部权限。5.4.2 权限(续)权限(续)2.表表 按照对表的操作类型划分,有6类权限。如果某用户对一个表拥有Select、Insert、Delete、Update权限,则表示 该用户可以在SELECT、INSERT、DELETE、UPDATE语句中引用该表,即可以对表执行选择、
40、插入、删除和修改操作。Alter权限表示可以用ALTER语句改变表的模式以及施加在表上的各种约束。拥有Index权限意味着能用CREATE INDEX语句在表上建立索引。All是All Privileges的缩写,即拥有对表的所有6种权限。表的建立者或者表的所有者拥有对表所有的操作权利。3.视图视图 视图的4种权限的含义同表,视图的创建者自动拥有全部权限。4.列列 列的权限是对表权限的进一步细化。一般地讲,拥有对表的Update权限也就拥有了对表中所有列的Update权限,但是,在分配对表的Update权限时,也可以排除对某些列的Update权限。5.4.2 权限(续)权限(续)5.4 安全性
41、安全性 5.4.1 登录名与用户 5.4.2 权限 5.4.3 授权 5.4.4 收回权限 5.4.5 角色 5.4.6 一个实例 5.4.7 权限审核5.4.3 授权授权vSQL语言用GRANT语句向用户授予操作权限,GRANT语句的一般格式为:GRANT,ON TO,WITH GRANT OPTION;vGRANT语句在数据库管理系统的数据字典里记录下哪个用户拥有哪些(个)数据库对象的何种权限。例例5.20把查询Student表的权限授给用户U1。GRANT SELECT ON StudentTO U1请思考,谁有权限执行这个语句呢?例例5.21把对Student表和Course表的全部操
42、作权限授予用户U2和U3。GRANT ALL PRIVILEGES ON Student TO U2,U3GOGRANT ALL PRIVILEGES ON Course TO U2,U3GO5.4.3 授权(续)授权(续)例例5.22把对表SC的查询权限授予所有用户。GRANT SELECT ON SC TO PUBLIC注意:PUBLIC代表所有的用户,这些用户既可以是目前数据库管理系统中已经有的用户,也可以是目前没有,以后才增加的用户。例例5.23把查询Student表和修改学生学号的权限授给用户U4。GRANT UPDATE(Sno),SELECTON StudentTO U4请注意,
43、U4只能更改列Sno的值,而不能修改表Student的其他列。如果允许U4修改表Student的全部列,则应该执行下面的语句:GRANT UPDATE,SELECTON StudentTO U45.4.3 授权授权(续续)例例5.24把对表SC的INSERT权限授予U5用户,并允许将此权限再授予其他用户。GRANT INSERTON SC TO U5 WITH GRANT OPTIONWITH GRANT OPTION表明,U5不仅拥有了对表SC的INSERT权限,还可以传播此权限。例如U5可以将此权限授予U6:GRANT INSERT ON SC TO U6 WITH GRANT OPTIO
44、N同样,U6还可以将此权限授予U7:GRANT INSERT ON SC TO U7因为U6未给U7传播的权限,U7不能再传播此权限。5.4.3 授权授权(续续)5.4 安全性安全性 5.4.1 登录名与用户 5.4.2 权限 5.4.3 授权 5.4.4 收回权限 5.4.5 角色 5.4.6 一个实例 5.4.7 权限审核5.4.4 收回权限收回权限v授予的权限可以由授予者用REVOKE语句收回。REVOKE语句的一般格式为:REVOKE ,ON FROM ,;例例5.25把用户U4修改学生学号的权限收回。REVOKE UPDATE(Sno)ON StudentFROM U4例例5.26收
45、回所有用户对表SC的查询权限。REVOKE SELECTON SC FROM PUBLIC例例5.27把用户U5对SC表的INSERT权限收回。REVOKE INSERTON SC FROM U5 CASCADE5.4.4 收回权限收回权限5.4 安全性安全性 5.4.1 登录名与用户 5.4.2 权限 5.4.3 授权 5.4.4 收回权限 5.4.5 角色 5.4.6 一个实例 5.4.7 权限审核5.4.5 角色角色v角色角色是一个DBMS的用户的集合,该集合中的用户要操作相同的数据库对象,需要拥有相同的权限。I角 色1角 色2U1U2U3U4U5T1T1T2T2T3USAS图5.7 角
46、色及其授权1.角色管理角色管理(1)增加/删除角色例例5.28在数据库中增加角色Managers,删除角色Sales。sp_addrole ManagersGOsp_droprole SalesGO5.4.5 角色角色(续续)(2)给角色指派/撤销成员例例5.29使数据库用户John成为角色Sales的成员,从数据库角色Manager中删除成员Jeff。sp_addrolemember Sales,JohnGOsp_droprolemember Managers,JeffGO例例5.30特别地,一个角色也可以作为另一个角色的成员,让角色Managers成为角色Sales的成员。sp_dropr
47、olemember Sales,ManagersGOManagers成为Sales的成员则意味着Managers的成员属于Managers和Sales两个角色。5.4.5 角色角色(续续)2.固定角色固定角色(1)服务器角色 Sysadmin:能够在SQL Server内作任何事情。Serveradmin:能够修改SQL Server的设置和停止SQL Server。Setupadmin:可以管理链接服务器和启动过程。Securityadmin:管理服务器用户。Processadmin:可以管理在 SQL Server 中运行的进程。Dbcreator:能够创建、修改和删除数据库。Diskad
48、min:能够管理磁盘文件。Bulkadmin:可以执行BULK INSERT语句。5.4.5 角色角色(续续)(2)数据库角色 Db_Owner:在数据库中有全部权限。Db_accessadmin:管理数据库用户。Db_datareader:可以读取数据库内任何用户表中的所有数据。Db_datawriter:可以更改数据库内任何用户表中的所有数据。Db_ddladmin:可以发出所有的DDL,但不能发出GRANT、REVOKE语句。Db_backupoperator:具有备份数据库的限利。5.4.5 角色角色(续续)Db_securityadmin可以管理角色和角色成员资格;用GRANT、RE
49、VOKE语句将任何数据对象的全部权限授予任何数据库用户。Db_denydatareader不能读取数据库内任何用户表中的任何数据 Db_denydatawriter 不能更改数据库内任何用户表中的任何数据。例例5.31 使用户DBManager拥有创建数据库的权限。只要将DBmanager增加到服务器固定角色Dbcreator,用户Dbmanager就拥有了创建数据库的权限。sp_addsrvrolemember DBmanager,Dbcreator GO例例5.32 使用户Manager拥有管理数据库的常用权限。-建立数据库用户Manager(登录名也是Manager),由该用户管理数据库
50、的用户管理和权限管理5.4.5 角色角色(续续)sp_grantdbaccess Manager,ManagerGOsp_addrolemember Db_accessadmin,Manager-管理数据库用户GO-可以发出所有的DDL,但不能发出GRANT、REVOKE语句sp_addrolemember Db_ddladmin,ManagerGOsp_addrolemember Db_securityadmin,Manager-可以管理角色和角色成员资格;-用GRANT、REVOKE语句将任何数据对象的全部权限授予任何数据库用户。GOsp_addrolemember Db_backupop