数据库安全性
目录
- 4.2 数据库安全性控制
-
- 4.2.1 用户身份鉴别
- 4.2.2 存取控制
- 4.2.3 自主存取控制方法
- 4.2.4 授权:授予与收回
-
- GRANT 授予
- REVOKE 收回
- 4.2.5 数据库角色
-
- 角色的创建
- 给角色授权
- 将一个角色授予其他的角色或用户
- 角色权限的收回
- 4.2.6 强制存取控制方法
- 4.3 视图机制
- 4.4 审计
4.2 数据库安全性控制
4.2.1 用户身份鉴别
- 静态口令鉴别
静态口令一般由用户自己设定,这些口令是静态不变的(比如qq密码)。 - 动态口令鉴别
口令是动态变化的,每次鉴别时均需使用动态产生的新口令登录数据库管理系统,即采用一次一密的方法(比如各种验证码,手机短信还有图片验证)。 - 生物特征鉴别
通过生物特征进行认证的技术,生物特征如人脸、指纹等(比如手机上的指纹识别和人脸识别、自动贩卖机的支付宝扫脸付款) - 智能卡鉴别
智能卡是一种不可复制的硬件,内置集成电路的芯片,具有硬件加密功能(例如:IC银行卡,IC卡是以芯片作为介质的银行卡,与磁条卡相比,芯片卡安全性高,卡内敏感数据难以被复制)
4.2.2 存取控制
存取控制主要包括定义用户权限和合法权限检查两部分。
定义用户权限和合法权限检查机制一起组成了数据库管理系统的存取控制子系统。
C2级的数据库管理系统支持自主存取控制;
B1级的数据库管理系统支持强取存取控制
这两类方法的简单定义是:
(1)在自主存取控制中,用户对不同的数据对象有不同的存取权限,不同的用户对同一对象也有不同的权限,而且用户还可将其拥有的存取权限转授给其他用户,因此自主存取控制非常灵活。
(2)在强制存取控制中,每一个数据对象被标以一定的密级,每一个用户也被授予某一个级别的许可证。对于任意一个对象,只有具有合法许可证的用户才可以存取,因此相对比较严格。
4.2.3 自主存取控制方法
SQL主要通过 GRANT 语句和REVOKE 语句实现自主存取控制。
用户权限是由两个要素组成的:数据库对象和操作类型。
授权:定义存取权限
在关系数据库系统中,存取控制的对象不仅有数据库本身,还有数据库模式。
接下来是实验部分
在此之前,先去创建好接下来要进行操作的用户
(可以在数据库安全性内直接新建也可以用sql语句创建)
4.2.4 授权:授予与收回
SQL中使用GRANT和 REVOKE语句向用户授予或收回对数据的操作权限。
GRANT 授予
GRANT语句的一般格式为:
GRANT <权限>[,<权限>]...
ON <对象类型> <对象名>[,<对象类型> <对象名>]…
--这里对象类型这个东西下文有解释
TO <用户>[,<用户>]...
[WITH GRANT OPTION];
若指定WITH GRANT OPTION子句,则该用户可以将权限再授予其他用户,否则不行。
【例4.1】把查询Student表权限授给用户U1。
GRANT SELECT
ON TABLE Student
TO U1;
error提示:TO附近有语法错误
实际上。。这里是因为T-SQL中不支持上面的写法的,将TABLE去掉后方能正常运行。(这个后面注意提前改掉)
GRANT SELECT
ON Student
TO U1;
右键点击U1,打开属性可以看到
ok
【例4.2】把对Student表和Course表的全部权限授予用户U2和U3。
GRANT ALL PRIVILEGES
ON Student, Course
TO U2, U3;
这个格式错,emm,大胆猜测是这里on后面不能接俩
然后:
GRANT ALL PRIVILEGES
ON Student
TO U2, U3;
--分开分开
GRANT ALL PRIVILEGES
ON Course
TO U2, U3;
阿哈,行吧,不推荐就不推荐,点开属性发现:
这两个用户的权限包括且仅包括:插入、删除、选择、引用(增删改查?),其他权限是没有的。
【例4.3】把对表SC的查询权限授予所有用户。
GRANT SELECT
ON SC
TO PUBLIC;
OK,这里是public的用法
【例4.4】把查询Student表和修改学生学号的权限授给用户U4。
GRANT UPDATE(Sno), SELECT
ON Student
TO U4;
==在对属性列授权时必须明确指出相应属性列名 ==
OK
【例4.5】把对表SC的INSERT权限授予U5用户,并允许他再将此权限授予其他用户。加子句
GRANT INSERT
ON SC
TO U5
WITH GRANT OPTION;
【例4.6】使用登录名U5登录,将对表SC的INSERT权限授予给U6。检验上一题
这里我发现之前创建用户的时候步骤是不对的,没有在数据库新建登录名而是直接新建用户,现在补一下,在数据库系统的安全性中新建登录名称(默认数据库不要改)就好了
登录名必须映射到数据库用户才能连接到数据库。 一个登录名可以作为不同用户映射到不同的数据库,但在每个数据库中只能作为一个用户进行映射
新建登录名,映射到student数据库,然后把上面的再做一遍。
GRANT INSERT
ON SC
TO U6
WITH GRANT OPTION;
okok
【例4.7】使用登录名U6登录,将对表SC的INSERT权限授予给U7。
GRANT INSERT
ON SC
TO U7;
ok,这里没有WITH GRANT OPTION,所以U7没办法把这个权限授予其他用户了。
REVOKE 收回
REVOKE的一般语句为:
REVOKE <权限>[,<权限>]...
ON <对象类型> <对象名>[,<对象类型><对象名>]…
FROM <用户>[,<用户>]...[CASCADE | RESTRICT];
【例4.8】把用户U4修改学生学号的权限收回。
REVOKE UPDATE(Sno)
ON Student
FROM U4;
ok,点开属性可以看到确实收回了,只剩下查询权限了,。
这里呢,我觉得这两个语句的区别就是对于用户的介词,一个是to,向。一个是from,从。
【例4.9】收回所有用户对表SC的查询权。
REVOKE SELECT
ON SC
FROM PUBLIC;
ok,依旧是public的用法
【例4.10】把用户U5对SC表的INSERT权限收回。
REVOKE INSERT
ON SC
FROM U5 CASCADE ;
CASCADE,为什么这里要用这个语句呢?
因为这里U5把这个权限分享给其他用户(U6U7)了,要收回的话需要使用CASCADE(级联收回),否则拒绝执行该语句。
如果U6或U7还从其他用户处获得对SC表的INSERT权限,则他们仍具有此权限,系统只收回直接或间接从U5处获得的权限。
比如U6的该权限还从dbo获得,所以当收回U5授予的权限之后,U6仍然具有对SC表的INSERT权限。
4.2.5 数据库角色
角色(ROLE):被命名的一组与数据库操作相关的权限
角色是权限的集合。可以为一组具有相同权限的用户创建一个角色(所以在修改权限等的操作时对角色ROLE修改即可,不用再去麻烦地对每一个用户修改)
(就是抽象,抽象出来的,比如,学生、老师,对“学生”这个抽象集合体操作,就是对所有学生进行操作)
还是挺好理解的
角色的创建
创建角色的SQL语句格式为:
CREATE ROLE <角色名>
给角色授权
格式
GRANT <权限>[,<权限>]…
ON <对象类型>对象名
TO <角色>[,<角色>]…
将一个角色授予其他的角色或用户
格式
GRANT <角色1>[,<角色2>]…
TO <角色3>[,<用户1>]…
[WITH ADMIN OPTION]
一个角色的权限:直接授予这个角色的全部权限 + 其他角色授予这个角色的全部权限(这和上面例子中用户权限可以叠加起来(来自很多用户授予)是一样的,即这里某个角色的权限可以来自很多角色)
角色权限的收回
REVOKE <权限>[,<权限>]…
ON <对象类型> <对象名>
FROM <角色>[,<角色>]…
用户可以回收角色的权限,从而修改角色拥有的权限
REVOKE执行者是角色创建者和拥有在这个(些)角色上的ADMIN OPTION
**【4.11】通过角色来实现将一组权限授予一个用户
(1)首先创建一个角色 R1
CREATE ROLE R1;
(2)然后使用GRANT语句,使角色R1拥有Student表的 SELECT、UPDATE、INSERT权限
GRANT SELECT, UPDATE, INSERT
ON Student
TO R1;
(3)将这个角色授予王平,张明,赵玲,使他们具有角色R1包含的全部权限。
GRANT R1
TO 王平,张明,赵玲;
语法错误
找一找
ALTER ROLE R1 ADD MEMBER 王平;
ALTER ROLE R1 ADD MEMBER 张明;
ALTER ROLE R1 ADD MEMBER 赵玲;
用这个语句可以完成角色授予用户
(4)可以一次性通过R1来回收王平的这3个权限
REVOKE R1
FROM 王平;
当然,在T-SQL里这也是语法错误
ALTER ROLE R1 DROP MEMBER 王平;
【例4.12】角色的权限修改。
GRANT DELETE
ON Student
TO R1;
使角色R1在原来的基础上增加了Student表的删除权限
【例4.13】
REVOKE SELECT
ON Student
FROM R1;
使R1减少了SELECT权限
4.2.6 强制存取控制方法
4.3 视图机制
把要保密的数据对无权存取这些数据的用户隐藏起来,对数据提供一定程度的安全保护
【例4.14】建立计算机系学生的视图,把对该视图的SELECT权限授于王平,把该视图上的所有操作权限授于张明。
CREATE VIEW CS_Student
AS
SELECT *
FROM Student
WHERE Sdept = 'CS';
--先建立视图
--上面下面分开运行
--视图授权
GRANT SELECT
ON CS_Student
TO 王平;
GRANT ALL PRIVILEGES
ON CS_Student
TO 张明;
4.4 审计
审计日志(Audit Log): 将用户对数据库的所有操作记录在上面(就像记录流水账一样的)
审计员利用审计日志可以监控数据库中的各种行为,找出非法存取数据的人、时间和内容。
审计功能的可选性:审计很费时间和空间、DBA可以打开或关闭审计功能、审计功能主要用于安全性要求较高的部门
AUDIT语句和NOAUDIT语句:
AUDIT语句:设置审计功能
NOAUDIT语句:取消审计功能
【例4.15】对修改SC表结构或修改SC表数据的操作进行审计。
AUDIT ALTER, UPDATE
ON SC;
【例4.16】取消对SC表的一切审计。
NOAUDIT ALTER, UPDATE
ON SC;
???不支持怎么办
百度一下,好吧,感觉审计这东西有点乱七八糟的
百度结果
看不太懂emmm