第4章 数据库的安全性

文章目录

  • ❖第一节 计算机安全性概论(第五版取消了)
  • ❖第二节 数据库安全性控制
      • ❖数据库安全性控制概述
      • ❖用户标识与鉴别
        • SQL Server 2008安全验证模式
          • ❖身份验证阶段(看你身份,第一层)
          • ❖权限验证阶段(看你权限,第二层)
        • SQL Server 2008身份验证
          • ⬧ Windows身份验证
          • ⬧ SQL Server身份验证
        • 创建登录名
          • 创建SQL Server 2008数据库用户
      • ❖存取控制(用户授权)
        • ⬧ 自主存取控制方法
        • ⬧ 授权 - GRANT
        • ⬧ 回收 - REVOKE
        • 小结:SQL灵活的授权机制
        • 创建数据库模式的权限
        • ⬧ 数据库角色(重点)
      • ❖强制存取控制方法
        • MAC与DAC
  • ❖第三节 视图机制
  • ❖第四节 审计(了解)
  • ❖第五节 数据加密(了解)
  • ❖第六节 统计数据库安全性(了解)
  • SQL 注入(了解)

❖掌握
	⬧ 身份验证、存取控制、角色管理
❖了解
	⬧ 安全标准、强制存取控制、审计、数据加密
❖重点
	⬧ 存取控制、角色管理
❖难点
	⬧ 角色管理

❖第一节 计算机安全性概论(第五版取消了)

❖第二节 数据库安全性控制

❖数据库安全性控制概述

❖非法使用数据库的情况

⬧ 编写合法程序绕过DBMS及其授权机制
⬧ 直接或编写应用程序执行非授权操作
⬧ 通过多次合法查询数据库从中推导出一些保密数据
⬧ 破坏安全性的行为可能是无意的,故意的,恶意的

第4章 数据库的安全性_第1张图片
第一层,知道你是谁
第二层,看你有没有权限
第三层,数据必须需要相应算法
第四层,事后追踪

❖用户标识与鉴别

是系统提供的最外层安全保护措施

⬧ 用户标识和鉴定 (用户名,密码,指纹识别......)
⬧ 存取控制
⬧ 视图
⬧ 审计
⬧ 密码存储

SQL Server 2008安全验证模式

需要经过两个安全性阶段,身份验证和权限认证阶段
❖身份验证阶段(看你身份,第一层)

⬧ 用户在SQL SERVER2008上获得任何数据库访问权限之前,必须首先登录到SQL SERVER2008并且是合法的,否则服务器将拒绝用户登录

❖权限验证阶段(看你权限,第二层)

⬧ 身份验证阶段只能验证用户是否具有连接到SQL SERVER2008的权限,通过身份验证后,需要验证用户是否具有访问服务器数据的权限,为此需要为每个数据库建立用户,并将账户映射到登录账户,并为用户分配对象的访问权限

SQL Server 2008身份验证

❖SQL Server 2008提供了两种确认用户对数据库引擎服务的验证模式
⬧ Windows身份验证

Windows验证模式允许SQL Server可以使用Windows的用户名和口令。在这种模式下,用户只需要通过Windows的验证,就可以连接到SQL Server,登录SQL Server时就不再需要输入帐户和密码了。

⬧ SQL Server身份验证

SQL Server身份验证模式要求用户在连接SQL Server时必须提供登录名和登录密码,与Windows的登录帐号无关。SQL Server自身执行认证处理。 利用这种方式可以很方便地从网络上访问sql server服务器

位置:数据库右键安全属性,数据库打开用户页表。

创建登录名

CREATE LOGIN <登录名>
[ {
	WITH PASSWORD = ‘’ [HASHED][MUSTCHANGE] //密码是什么
	,DEFAULT_DATABASE = <数据库> //数据库是什么
	} |
	{
		FROM
			WINDOWS  //windos身份
				[WITH DEFAULT_DATABASE = <数据库>]
			|CERTIFICATE <证书名>
			|ASYMMETRIC KEY <不对称密钥名>
	}
] 
[1] 创建一个sql server验证模式的登录名

CREATE LOGIN 张三 WITH PASSWORD = ‘abc123!’   
这时候只能登录,进不去数据库,需要在响应数据库创建用户。

[2] 创建一个windows验证模式的登录名

CREATE LOGIN [win2k3\ Administrator]
FROM WINDOWS
鼠标放到系统身份登录的数据库上可以看到用户名
创建SQL Server 2008数据库用户
一般时候一个登录对应一个用户,但是用户决定权限。

❖用户,也就是使用SQL SERVER的人,每个用来登录数据库的帐户都是一个用户。通过用户这个对象,可以设置数据库的使用权限。同一个数据库可以拥有多个用户,同一个用户也可以同时访问多个数据库。

CREATE USER <用户名>
[ {{FOR | FROM}
	LOGIN <登录名>
	| CERTFICATE <证书名>
	| ASYMMETERIC KEY <密钥名>
	}
	[WITHOUT LOGIN]
	[WITH DEFAULT_SCHEMA = <架构名>]
]
[3] 创建具有默认架构的数据库用户
CREATE USER 张三 FOR LOGIN 张三
WITH DEFAULT_SCHEMA = student;

创建用户(一定记得转换当前数据库)
create user u1 for login p1;

❖存取控制(用户授权)

❖存取控制机制组成(定义规则)
	⬧ 定义用户权限
	⬧ 合法权限检查
❖用户权限定义和合法权检查机制一起组成了DBMS的安全子系统(权限检查)

❖常用存取控制方法
	⬧ 自主存取控制(Discretionary Access Control ,简称DAC)
		➢C2级
		➢灵活
	⬧ 强制存取控制(Mandatory Access Control,简称 MAC)(了解)
		➢B1级
		➢严格

⬧ 自主存取控制方法

❖通过 SQLGRANT 语句和 REVOKE 语句实现
❖用户权限组成
	⬧ 数据对象
	⬧ 操作类型
❖定义用户存取权限:定义用户可以在哪些数据库对象上进行哪些类型的操作
❖定义存取权限称为授权

第4章 数据库的安全性_第2张图片

⬧ 授权 - GRANT

第4章 数据库的安全性_第3张图片

DD数据库字典。

❖GRANT语句的一般格式:

GRANT <权限>[,<权限>]...    授予的权限
[ON <对象类型> <对象名>]    数据库名
TO <用户>[,<用户>]...       用户名
[WITH GRANT OPTION]; //是否可将权限转授其他人

❖语义:将对指定操作对象的指定操作权限授予指定的用户

❖发出GRANT
	⬧ DBA(管理员)
	⬧ 数据库对象创建者(即属主Owner)
	⬧ 拥有该权限的用户   //[WITH GRANT OPTION]
	
❖接受权限的用户
	⬧ 一个或多个具体用户
	⬧ PUBLIC(全体用户)
	
❖WITH GRANT OPTION子句
	⬧ 指定:可以再授予
	⬧ 没有指定:不能传播
	⬧ 不允许循环授权(回到起点)
[4] 把查询Student表权限授给用户U1。
GRANT SELECT 
ON TABLE Student
TO U1;

[5] 把对Student表和Course表的全部权限授予用户U2和U3。
GRANT ALL PRIVILEGES 
ON TABLE Student, Course--(标准数据库写法),SQL Server不能同时授予两个表的权限
TO U2, U3;

[6] 把对表SC的查询权限授予所有用户。
GRANT SELECT
ON TABLE SC
TO PUBLIC[7] 把查询Student表和修改学生学号的权限授给用户U4 。
GRANT UPDATE(Sno), SELECT 
ON TABLE Student
TO U4

[8] 把对表SC的INSERT权限授予U5用户,并允许他再将此权限授予其他用户 。
GRANT INSERT 
ON TABLE SC
TO U5
WITH GRANT OPTION;
执行例8后,U5不仅拥有了对表SC的INSERT权限,还可以传播此权限:

[9]GRANT INSERT 
ON TABLE SC
TO U6
WITH GRANT OPTION;
同样,U6还可以将此权限授予U7:

[10]GRANT INSERT ON TABLE SC
TO U7;
但U7不能再传播此权限


第八周第一次课,数据库的安全性



-- 创建登录
create login p1 with password = '1';
create login p2 with password = '1';
create login p3 with password = '1';
create login p4 with password = '1';
create login p5 with password = '1';
-- 创建用户(一定记得转换当前数据库)
create user u1 for login p1;
create user u2 for login p2;
create user u3 for login p3;
create user u4 for login p4;
create user u5 for login p5;
-- 存取控制

-- 查询student表的权限授权给u1(user)
grant select 
on student 
to u1;--(标准)sql的时候 student前加table

-- student与course全部权限给 u2,u3
grant all privileges 
on student--,course,              SQL Server不能同时授予两个表的权限,但是标准语法是可以的。
to u2,u3 

-- sc表的查询权限给所有用户
grant select 
on sc
to public


--查询student表和修改学号的权限给用户u4
grant select,update(sno)
on student
to u4;

--sc表insert权限给U5并且允许转授,插就是插,不能查
grant insert
on sc
to u5
with grant option 

⬧ 回收 - REVOKE

只能回收自己授出的权限,

❖REVOKE语句的一般格式为:

REVOKE <权限>[,<权限>]...
[ON <对象类型> <对象名>]
FROM <用户>[,<用户>]...;

❖授予的权限可以由DBA或其他授权者用REVOKE语句收回

表名前的 table 关键字是标准语法。,sql中不需要。

[11] 把用户U4修改学生学号的权限收回。
REVOKE UPDATE(Sno) 
ON TABLE Student
FROM U4;

[12] 收回所有用户对表SC的查询权限。
REVOKE SELECT 
ON TABLE SC
FROM PUBLIC;

将用户U5的INSERT权限收回的时候必须级联(CASCADE)收回,把它授予的都收回。
⬧ 系统只收回直接或间接从U5处获得的权限

[13] 把用户U5对SC表的INSERT权限收回。
REVOKE INSERT 
ON TABLE SC
FROM U5
CASCADE;

小结:SQL灵活的授权机制

❖DBA:拥有所有对象的所有权限
	⬧ 不同的权限授予不同的用户
❖用户:拥有自己建立的对象的全部的操作权限
	⬧ GRANT:授予其他用户
❖被授权的用户
	⬧ “继续授权”许可:再授予
❖所有授予出去的权力在必要时又都可用REVOKE语句收回

创建数据库模式的权限

❖对数据库模式的授权由DBA在创建用户时实现
❖CREATE USER语句格式

第4章 数据库的安全性_第4张图片

⬧ 数据库角色(重点)

❖数据库角色:被命名的一组与数据库操作相关的权限
	⬧ 角色是权限的集合
	⬧ 可以为一组具有相同权限的用户创建一个角色
	⬧ 简化授权的过程
❖角色的创建
	⬧ CREATE ROLE <角色名>
❖角色的授权
	GRANT <权限>[,<权限>]…
	ON <对象类型>对象名
	TO <角色>[,<角色>]

第4章 数据库的安全性_第5张图片

❖将一个角色授予其他的角色或用户

GRANT <角色1>[,<角色2>]…
TO <角色3>[,<用户1>]…
[WITH ADMIN OPTION]

❖角色权限的收回

REVOKE <权限>[,<权限>]…
ON <对象类型> <对象名>
FROM <角色>[,<角色>]…

例14] 通过角色来实现将一组权限授予一个用户。

1. 首先创建一个角色 R1
CREATE ROLE R1;

2. 然后使用GRANT语句,授权

GRANT SELET, UPDATE,INSERT 
ON TABLE Student
TO R1;

		3. 角色授权用户
		GRANT R1
		TO 王平、张明,赵玲;
		
		4. 可以一次性通过R1来回收王平的这3个权限
		REVOKE R1
		FROM 王平;

		上面的 3 4 操作Sql Server不适用。下面是改正的3 4 
		
3. 角色授权用户
exec sp_addrolemember r1,u1;//用户u1加入到角色R1中

4. 角色收回
exec sp_addrolemember r1,u1;




角色的位置
第4章 数据库的安全性_第6张图片

❖强制存取控制方法

❖可能存在数据的“无意泄露”
❖原因:这种机制仅仅通过对数据的存取权限来进行安全控制,而数据本身并无安全性标记
❖解决:对系统控制下的所有主客体实施强制存取控制策略

❖强制存取控制(MAC)
	⬧ 保证更高程度的安全性
	⬧ 用户不能直接感知或进行控制
	⬧ 适用于对数据有严格而固定密级分类的部门
	⬧ 军事部门
	⬧ 政府部门
❖主体与客体
	⬧ 在MAC中,DBMS所管理的全部实体被分为主体和客体两大类
	主体:所有能访问数据库的
	客体:数据
❖主体是系统中的活动实体
	⬧ DBMS所管理的实际用户
	⬧ 代表用户的各进程
❖客体是系统中的被动实体,是受主体操纵的
	⬧ 文件
	⬧ 基表
	⬧ 索引
	⬧ 视图
❖敏感度标记(Label)
	⬧对于主体和客体,DBMS为它们每个实例(值)指派一个敏感度标记(Label)
⬧ 敏感度标记分成若干级别
	➢ 绝密(Top Secret)
	➢ 机密(Secret)
	➢ 可信(Confidential)
	➢ 公开(Public)
❖主体的敏感度标记称为许可证级别(Clearance Level)
❖客体的敏感度标记称为密级(Classification Level)
❖MAC机制就是通过对比主体的Label和客体的Label,最终确定主体是否能够存取客体


❖强制存取控制规则
⬧ 当某一用户(或某一主体)以标记label注册入系统时,
   系统要求他对任何客体的存取必须遵循下面两条规则:
	(1)仅当主体的许可证级别大于或等于客体的密级时,该主体才能读取相应的客体;
	(2)仅当主体的许可证级别等于客体的密级时,该主体才能写相应的客体。
❖修正规则
	⬧ 主体的许可证级别 <=客体的密级 → 主体能写客体
❖规则的共同点
	⬧ 禁止了拥有高许可证级别的主体更新低密级的数据对象

MAC与DAC

❖DAC与MAC共同构成DBMS的安全机制
❖实现MAC时要首先实现DAC
⬧ 原因:较高安全性级别提供的安全保护要包含较低级别的所有保护
❖DAC + MAC安全检查示意图
第4章 数据库的安全性_第7张图片

❖第三节 视图机制

视图机制把要保密的数据对无权存取这些数据的用户隐藏起来,对数据提供一定程度的安全保护

⬧ 视图机制更主要的功能在于提供数据独立性,其安全保护功能太不精细
   往往远不能达到应用系统的要求。
⬧ 间接实现了支持存取谓词的用户权限定义

第4章 数据库的安全性_第8张图片

第4章 数据库的安全性_第9张图片

❖第四节 审计(了解)

❖什么是审计

⬧ 审计日志(Audit Log)
	将用户对数据库的所有操作记录在上面
⬧ DBA利用审计日志
	找出非法存取数据的人、时间和内容
⬧ C2以上安全级别的DBMS必须具有

❖AUDIT语句:设置审计功能
❖NOAUDIT语句:取消审计功能

[13] 对修改SC表结构或修改SC表数据的操作进行审计。
AUDIT ALTERUPDATE ON SC;

[14] 取消对SC表的一切审计。
NOAUDIT ALTERUPDATE ON SC;

❖第五节 数据加密(了解)

❖数据加密

⬧ 防止数据库中数据在存储和传输中失密的有效手段

❖加密的基本思想

⬧ 根据一定的算法将原始数据变换为不可直接识别的格式术语为密文,

❖加密方法

⬧ 替换方法
⬧ 置换方法
⬧ 混合方法

❖DBMS中的数据加密

❖第六节 统计数据库安全性(了解)

SQL 注入(了解)

达到书法侵入的目的
第4章 数据库的安全性_第10张图片

你可能感兴趣的:(数据库原理)