❖掌握
⬧ 身份验证、存取控制、角色管理
❖了解
⬧ 安全标准、强制存取控制、审计、数据加密
❖重点
⬧ 存取控制、角色管理
❖难点
⬧ 角色管理
❖非法使用数据库的情况
⬧ 编写合法程序绕过DBMS及其授权机制
⬧ 直接或编写应用程序执行非授权操作
⬧ 通过多次合法查询数据库从中推导出一些保密数据
⬧ 破坏安全性的行为可能是无意的,故意的,恶意的
第一层,知道你是谁
第二层,看你有没有权限
第三层,数据必须需要相应算法
第四层,事后追踪
是系统提供的最外层安全保护措施
⬧ 用户标识和鉴定 (用户名,密码,指纹识别......)
⬧ 存取控制
⬧ 视图
⬧ 审计
⬧ 密码存储
需要经过两个安全性阶段,身份验证和权限认证阶段
⬧ 用户在SQL SERVER2008上获得任何数据库访问权限之前,必须首先登录到SQL SERVER2008并且是合法的,否则服务器将拒绝用户登录
⬧ 身份验证阶段只能验证用户是否具有连接到SQL SERVER2008的权限,通过身份验证后,需要验证用户是否具有访问服务器数据的权限,为此需要为每个数据库建立用户,并将账户映射到登录账户,并为用户分配对象的访问权限
❖SQL Server 2008提供了两种确认用户对数据库引擎服务的验证模式
Windows验证模式允许SQL Server可以使用Windows的用户名和口令。在这种模式下,用户只需要通过Windows的验证,就可以连接到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的人,每个用来登录数据库的帐户都是一个用户。通过用户这个对象,可以设置数据库的使用权限。同一个数据库可以拥有多个用户,同一个用户也可以同时访问多个数据库。
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级
➢严格
❖通过 SQL 的 GRANT 语句和 REVOKE 语句实现
❖用户权限组成
⬧ 数据对象
⬧ 操作类型
❖定义用户存取权限:定义用户可以在哪些数据库对象上进行哪些类型的操作
❖定义存取权限称为授权
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 <权限>[,<权限>]...
[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;
❖DBA:拥有所有对象的所有权限
⬧ 不同的权限授予不同的用户
❖用户:拥有自己建立的对象的全部的操作权限
⬧ GRANT:授予其他用户
❖被授权的用户
⬧ “继续授权”许可:再授予
❖所有授予出去的权力在必要时又都可用REVOKE语句收回
❖对数据库模式的授权由DBA在创建用户时实现
❖CREATE USER语句格式
❖数据库角色:被命名的一组与数据库操作相关的权限
⬧ 角色是权限的集合
⬧ 可以为一组具有相同权限的用户创建一个角色
⬧ 简化授权的过程
❖角色的创建
⬧ CREATE ROLE <角色名>
❖角色的授权
GRANT <权限>[,<权限>]…
ON <对象类型>对象名
TO <角色>[,<角色>]
❖将一个角色授予其他的角色或用户
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;
❖可能存在数据的“无意泄露”
❖原因:这种机制仅仅通过对数据的存取权限来进行安全控制,而数据本身并无安全性标记
❖解决:对系统控制下的所有主客体实施强制存取控制策略
❖强制存取控制(MAC)
⬧ 保证更高程度的安全性
⬧ 用户不能直接感知或进行控制
⬧ 适用于对数据有严格而固定密级分类的部门
⬧ 军事部门
⬧ 政府部门
❖主体与客体
⬧ 在MAC中,DBMS所管理的全部实体被分为主体和客体两大类
主体:所有能访问数据库的
客体:数据
❖主体是系统中的活动实体
⬧ DBMS所管理的实际用户
⬧ 代表用户的各进程
❖客体是系统中的被动实体,是受主体操纵的
⬧ 文件
⬧ 基表
⬧ 索引
⬧ 视图
❖敏感度标记(Label)
⬧对于主体和客体,DBMS为它们每个实例(值)指派一个敏感度标记(Label)
⬧ 敏感度标记分成若干级别
➢ 绝密(Top Secret)
➢ 机密(Secret)
➢ 可信(Confidential)
➢ 公开(Public)
❖主体的敏感度标记称为许可证级别(Clearance Level)
❖客体的敏感度标记称为密级(Classification Level)
❖MAC机制就是通过对比主体的Label和客体的Label,最终确定主体是否能够存取客体
❖强制存取控制规则
⬧ 当某一用户(或某一主体)以标记label注册入系统时,
系统要求他对任何客体的存取必须遵循下面两条规则:
(1)仅当主体的许可证级别大于或等于客体的密级时,该主体才能读取相应的客体;
(2)仅当主体的许可证级别等于客体的密级时,该主体才能写相应的客体。
❖修正规则
⬧ 主体的许可证级别 <=客体的密级 → 主体能写客体
❖规则的共同点
⬧ 禁止了拥有高许可证级别的主体更新低密级的数据对象
❖DAC与MAC共同构成DBMS的安全机制
❖实现MAC时要首先实现DAC
⬧ 原因:较高安全性级别提供的安全保护要包含较低级别的所有保护
❖DAC + MAC安全检查示意图
视图机制把要保密的数据对无权存取这些数据的用户隐藏起来,对数据提供一定程度的安全保护
⬧ 视图机制更主要的功能在于提供数据独立性,其安全保护功能太不精细
往往远不能达到应用系统的要求。
⬧ 间接实现了支持存取谓词的用户权限定义
❖什么是审计
⬧ 审计日志(Audit Log)
将用户对数据库的所有操作记录在上面
⬧ DBA利用审计日志
找出非法存取数据的人、时间和内容
⬧ C2以上安全级别的DBMS必须具有
❖AUDIT语句:设置审计功能
❖NOAUDIT语句:取消审计功能
[例13] 对修改SC表结构或修改SC表数据的操作进行审计。
AUDIT ALTER,UPDATE ON SC;
[例14] 取消对SC表的一切审计。
NOAUDIT ALTER,UPDATE ON SC;
❖数据加密
⬧ 防止数据库中数据在存储和传输中失密的有效手段
❖加密的基本思想
⬧ 根据一定的算法将原始数据变换为不可直接识别的格式术语为密文,
❖加密方法
⬧ 替换方法
⬧ 置换方法
⬧ 混合方法
❖DBMS中的数据加密