欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

第4章 数据库的安全性

程序员文章站 2022-05-09 09:02:59
...

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

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

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

❖数据库安全性控制概述

❖非法使用数据库的情况

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

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

❖用户标识与鉴别

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

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

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章 数据库的安全性

⬧ 授权 - GRANT

第4章 数据库的安全性

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章 数据库的安全性

⬧ 数据库角色(重点)

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

第4章 数据库的安全性

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

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章 数据库的安全性

❖强制存取控制方法

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

❖强制存取控制(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章 数据库的安全性

❖第三节 视图机制

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

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

第4章 数据库的安全性

第4章 数据库的安全性

❖第四节 审计(了解)

❖什么是审计

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

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

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

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

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

❖数据加密

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

❖加密的基本思想

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

❖加密方法

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

❖DBMS中的数据加密

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

SQL 注入(了解)

达到书法侵入的目的
第4章 数据库的安全性

相关标签: 数据库原理