数据库原理课堂笔记20/5/9
- 除了行列子集,视图最好不要更新
- 将学生的学号及他的平均成绩定义为一个视图,平均成绩视图
- 操作系统哪一块一般不叫内核?文件管理
- 视图删除语句DROP VIEW IS_S1
- 如果在视图V1上建立视图V2,一般不能直接删除V1
- 三类计算机系统安全性问题:技术安全类、管理安全类、政策法律类
1 CREAT VIEW S_G(Sno,Gavg) 2 AS 3 SELECT Sno,AVG(Grade) 4 FROM SC 5 GROUP BY Sno
视图的作用
- 视图能够简化用户的操作
- 视图使用户能以多种角度看待同一数据
- 视图对数据库提供了一定程度的逻辑独立性
- 视图能够对机密数据提供安全保护
内模式:文件
模式:表
外模式:视图
物理独立性
DBMS把我们的操作转换为对 文件 的操作。有时候,文件会变。比如,数据库文件在一个磁盘上。后来越变越大,一个磁盘装不下,再买一块磁盘,恰好,有一张大表。它的文件,变得需要跨越两个磁盘。假如,两个磁盘各一个文件。但是,从用户角度看。这两个文件的内容,都在一张表里,这一点显然不能靠用户去解决,而是要靠DBMS去映射,通过调整DBMS对 文件 到 表的映射方式可以使得数据库文件发生某些变化时用户看到的表形式不变,这称为 物理独立性
当数据库的存储结构改变了(例如选用了另一种存储结构),数据库管理员修改模式/内模式映象,使模式保持不变,从而使应用程序不受影响。保证了数据与程序的物理独立性
数据库管理员修改模式/内模式映象:这一句一般是指,使用DBMS提供的配置功能
数据库里边,物理 就是 数据库文件,这个是数据库的起点
逻辑独立性
当模式改变时,数据库管理员修改有关的外模式/模式映象,使外模式保持不变,应用程序是依据数据的外模式编写的,从而应用程序不必修改,保证了数据与程序的逻辑独立性
表结构有时候可能发生变化,学生关系Student(Sno,Sname,Ssex,Sage,Sdept) ,
“垂直”地分成两个基本表:
SX(Sno,Sname,Sage)
SY(Sno,Ssex,Sdept)
SQL是根据表结构写的,现在要维持程序不变,可以利用视图,
1 CREATE VIEW Student(Sno,Sname,Ssex,Sage,Sdept) 2 AS 3 SELECT SX.Sno,SX.Sname,SY.Ssex,SX.Sage,SY.Sdept 4 FROM SX,SY 5 WHERE SX.Sno=SY.Sno
这样,对于select语句,可以不受到任何影响,但是,对于 数据更新 语句并不能保证。作用范围只限于select语句。
视图注意事项
1 CREATE VIEW F_Student1(stdnum,name,sex,age,dept) 2 AS SELECT * 3 FROM Student 4 WHERE Ssex='女'
不建议这么写,建视图的语句最好不要写 *,原因是 表结构也许会有变化,一旦变了以后,比如,表增加一列,视图列和表的列对不上。
数据库安全问题
安全性提高 也会带来很多麻烦。跟数据库相关的级别D级,我们平时接触到的绝大多数软件都是D级。比如,office
接下来看一个跟数据库关系大的级别C2级。主要特征:自主存取控制、审计等。达到C2级的产品在其名称中往往不突出“安全”(Security)这一特色。比如 Windows Server、Oracle、IBM
B1级:少数Unix系统、少数DBMS属于这一级
B2及以上跟数据库无关。因为没有DBMS符合B2及以上标准的产品。
数据库安全性问题来源:数据共享
数据库安全性解决方案:有条件共享
线左边从应用到OS,都是为了拒绝不合法访问;线右边,表示一切访问都失效的情况下最后一道安全屏障。
用户标识与鉴别:用户名/口令。一般采取动态口令比如 用函数、用短信
存取控制
DBMS的主要手段之一是 存取控制。通俗的说,就是 给用户确定权限,这一点跟前边的 身份认证 联系在一起,通过 身份认证,说明属于某类用户。接下来,DBMS要具体确定 用户权限,即 用户可以做什么,不能做什么。从计算机角度讲,工作有两大块:定义存取权限 、检查存取权限。第一个通常由管理员来做,第二是DBMS的工作。
存储控制根据技术手段又分为两种类型:自主存储控制(Discretionary Access Control ,简称DAC)、强制存取控制(Mandatory Access Control,简称 MAC)。它们分别是C2级、
B1级。
存取权限三个基本要素:数据对象、操作类型、用户(进程)。用户在机器内部的表示实质上通常是一个 用户进程。所以,用户、进程经常是一回事
存取谓词用于 复杂权限 的描述,存取谓词 可以描述 行,使得数据的描述更精确。但是,广义的 存取谓词不止这一点。例如,存取谓词引用系统变量,如终端设备号,系统时钟等,实现与时间地点有关的存取权限 ,这样用户只能在某段时间内,某台终端上存取有关数据
授权指令:grant
把查询Student表权限授给用户U1
1 GRANT SELECT 2 ON TABLE Student 3 TO U1
把对Student表和Course表的全部权限授予用户U2和U3
1 GRANT ALL PRIVILIGES 2 ON TABLE Student, Course 3 TO U2, U3
把对表SC的查询权限授予所有用户(PUBLIC是个关键词,表示 所有用户)
1 GRANT SELECT 2 ON TABLE SC 3 TO PUBLIC
把查询Student表和修改学生学号的权限授给用户U4
1 GRANT UPDATE(Sno), SELECT 2 ON TABLE Student 3 TO U4
把对表SC的INSERT权限授予U5用户,并允许他再将此权限授予其他用户,用户可以 自主 决定是否扩散权限
( WITH GRANT OPTION)
1 GRANT INSERT 2 ON TABLE SC 3 TO U5 4 WITH GRANT OPTION
把用户U4修改学生学号的权限收回
1 REVOKE UPDATE(Sno) 2 ON TABLE Student 3 FROM U4
把用户U5对SC表的INSERT权限收回,它会产生 级联回收 效果,不光U5连同U6(U5分配的权限都会消失)
1 REVOKE INSERT 2 ON TABLE SC 3 FROM U5
角色(MS SQL Server不支持,似乎很多系统都不支持这一句)
GRANT SELECT,UPDATE ON TABLE Student TO R
上边的语句,把 权限 给了角色
GRANT R TO 王平,张明
从角色回收权限
REVOKE SELECT,UPDATE ON TABLE Student FROM R
将角色权限从用户收回
REVOKE R ON TABLE Student FROM 王平