数据库的安全性

❖第一节 计算机安全性概论(了解)
❖第二节 数据库安全性控制
❖第三节 视图机制
❖第四节 审计
❖第五节 数据加密
❖第六节 统计数据库安全性

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

重点:存取控制、角色管理

黑客和程序会攻击防火墙会篡改数据或者盗取数据,也要比避免合法的用户对数据库进行破坏

安全控制

计算机系统安全措施是一级一级层层设置的

1.系统根据用户标识鉴别用户身份,合法用户才可以进入计算机系统

做项目的时候,远程登录服务器上的SQL Server,用自己的计算机来访问DBS,合法用户;

2.数据库管理系统还要进行存取控制,只允许用户执行合法操作;

3.操作系统有自己的保护措施。

4.数据以密码形式储存在数据库中。

审计不会提前预防,操作已经完成了,事后的检查。简单的入侵检测;

君子务本,本立而道生

用户身份鉴别

最外层的安全保护措施

❖用户身份鉴别 (Identification & Authentication)
⬧ 系统提供的最外层安全保护措施
⬧ 用户标识:由用户名和用户标识号组成(用户标识号在系统整个生命周期内唯一)
❖用户身份鉴别的方法
⬧ 1.静态口令鉴别:静态口令一般由用户自己设定,这些口令是静态不变的 安全性相对差一些;

⬧ 2.动态口令鉴别:口令是动态变化的,每次鉴别时均需使用动态产生的新口令登录 --类似于验证码
数据库管理系统,即采用一次一密的方法:

⬧ 3.生物特征鉴别:通过生物特征进行认证的技术,生物特征如指纹、虹膜和掌纹等 --安全性较高,技术要求高

⬧ 4.智能卡鉴别:智能卡是一种不可复制的硬件,内置集成电路的芯片,具有硬件加
密功能

SQL Server 安全验证模式

重点讲Windows身份验证 (仅课堂)和SQL Server身份验证**(开发常用)

创建登录名

CREATE LOGIN <登录名>
[ {
WITH PASSWORD = ‘’ [HASHED][MUSTCHANGE]
,DEFAULT_DATABASE = <数据库>
} |
{
FROM
WINDOWS --随着操作系同的验证SQL进行了登录
[WITH DEFAULT_DATABASE = <数据库>]
|CERTIFICATE <证书名>
|ASYMMETRIC KEY <不对称密钥名>
}
]
-- ❖[例1] 创建一个sql server验证模式的登录名

CREATE LOGIN Zhangsan
WITH PASSWORD = ‘abc123!’

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

CREATE LOGIN Zhangsan
WITH PASSWORD = ‘abc123!’
CREATE LOGIN [win2k3\ Administrator] --不能随便写的
FROM WINDOWS --固定语法

安全性里面有个文件夹 --登录名 --里面的sa是超级管理员

--创建一个sql server验证模式登录名
create login p1
with password='p1';

左上角对象资源管理器连接 点击数据库引擎 然后用p1登录 然后再p1下新建查询

创建以windows为验证方式

create login [DESKTOP-MINA9MJ\Administrator]
from windows;

创建用户

CREATE USER <用户名>

[
{
{FOR | FROM}
LOGIN <登录名>
| CERTFICATE <证书名>
| ASYMMETERIC KEY <密钥名>
}


[WITHOUT LOGIN]
[WITH DEFAULT_SCHEMA = <架构名>] --可以简写或省略
]
--创建用户
create user u1 for login p1
--创建用户
create user u2 for login p2
--创建用户
create user u3 for login p3
--创建用户
create user u4 for login p4

存取控制组成

定义用户的权限

合法权限的检查

4.2.3 自主存取控制方法

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

create drop alter修改 select insert delete update

4.2.4 授权:授予与回收

❖1.GRANT
❖语义:将对指定操作对象的指定操作权限授予指定的用户
❖GRANT语句的一般格式:
GRANT <权限>[,<权限>]...
ON <对象类型> <对象名>[,<对象类型> <对象名>]…
TO <用户>[,<用户>]...
[WITH GRANT OPTION];

指定GRANT OPTION子句,则获得某种权限的用户还可以把这种权限再授予其他用户;

❖发出GRANT:
⬧ 数据库管理员
⬧ 数据库对象创建者(即属主Owner)
⬧ 拥有该权限的用户
❖按受权限的用户
⬧ 一个或多个具体用户
⬧ PUBLIC(即全体用户)


--[例4.1] 把查询Student表权限授给用户U1

GRANT SELECT
ON Student
TO U1;
--给u1用户授予查询student表的权限
grant select
on Studnet
to u2
select * from sc;
--插入就没有权限了
insert into student
values('201900018','vic',35,'女','IS');