又开始新的一章,主要讲的是数据安全性。
数据库安全性
数据库的安全性是指保护数据库以防止不合法使用所造成的数据泄露、更改或破坏。
数据共享->安全性
非法使用数据库的情况
1、编写合法程序绕过DBMS及其授权机制
2、直接(或编写应用程序)执行非授权操作
3、通过多次合法查询数据库从中推导出一些保密数据
简单入侵检测 审计
SQL层:推理控制、强制访问控制、自主访问控制
用户身份鉴别
静态口令鉴别—由用户自己设定,静态不变的 字典攻击
动态口令鉴别—(验证码)动态变化,一次一密
生物特征鉴别—生物特征进行认证(人脸、指纹等)
智能卡鉴别—智能卡是一种不可复制的硬件,内置集成电路的芯片,具有硬件加密功能
存取控制
定义用户权限—DBMS提供适当的语言来定义用户权限,放在数据字典中,称做安全规则或授权规则
合法权限检查—用户发出数据库操作请求,DBMS查找数据字典,进行合法权限检查
自主存取控制(DAC)
1、不同数据对象(数据库、表、表中一行)有不同的存取权限
2、不同的用户对同一对象也有不同的权限
3、用户还可以将其拥有的存取权限转授给其他用户
强制存储控制(MAC)
1、每个数据对象被标以一定的密级
2、每个用户也被授予某一个级别的许可证
3、对于任意一个对象,具有合法许可证的用户才可以存取
自主存取控制方法
通过SQL的GRANT(授予)语句和REVOKE(收回)语句实现
GRANT
GRANT <权限>[,<权限>]...
ON <对象类型><对象名>[,<对象类型><对象名>]...
TO<用户>[,<用户>]...
[WITH GRANT OPTION]; 指定:可以再授予;没有指定:不能传播
注意:
1、主码在此之外使用了就不能改,没有使用就可以改。
2、不允许循环授权
在完成所有操作之前要先创建用户。
如果再按照之前顺序新建一个用户的话,会报错:
Microsoft SQL Server Management Studio
用户 “U2” 的 创建 失败。
该登录已用另一个用户名开立帐户。
解决办法:因为该登录名已经被另一个用户开账户了,所以要修改登陆名,则换一个匹配对象。
例4.1
把查询Student表的权限授给用户U1。
GRANT SELECT
ON TABLE Student
TO U1;
错误:关键字 ‘TO’ 附近有语法错误。应该去掉TABLE关键词。
正解:
GRANT SELECT
ON Student
TO U1;
在此之后我们可以检查,点开用户U1,可以看见
例4.2
把对Student表和Course表的全部操作权限授予用户U2和U3。
GRANT ALL PRIVILEGES