数据库系统概论——第四章 数据库安全性_数据库系统概论数据库安全性,不安全的因素有哪些-程序员宅基地

技术标签: mysql  数据库  sql  

数据库系统概论——第四章 数据库安全性

在这里插入图片描述

数据库安全性:保护数据库以防止不合法使用所造成的数据泄露更改破坏

系统安全保护措施是否有效是数据库系统主要的性能指标之一。

一、数据库安全安全性概论
1. 数据库的不安全因素
(1)非授权用户对数据库的恶意存取和破坏,dbms 提供的安全措施主要包括:用户身份鉴别、存取控制和视图等技术。
(2)数据库中重要或敏感的数据被泄露,dbms系统主要技术有强制存取控制、数据加密存储和加密传输等。
(3)安全环境的脆弱性:数据库的安全性与计算机系统的安全性紧密联系,要建立一套可信计算机系统的概念和标准。

2. 安全标准简介

在这里插入图片描述

在这里插入图片描述

二、数据库安全性控制

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

计算机系统的安全模型:

系统根据用户表示鉴定用户身份,合法用户才准许进入计算机系统。
数据库管理系统还要进行存取控制,只允许用户执行合法操作。
操作系统有自己的保护措施。
数据以密码形式存储在数据库中。

数据库安全性控制的常用方法(重点)
(1)用户标识和鉴定
(2)存取控制
(3)视图
(4)审计
(5)数据加密

  1. 用户身份鉴别(identitication & Authentication)
    系统提供的最外层的安全措施
    用户识别:由用户名和用户标识号组成(用户标识号在系统整个生命周期内唯一)
    用户身份鉴别的方法
    (1)静态口令鉴别:静态口令一般由用户自己设定,这些口令是静态不变的
    (2)动态口令鉴别:口令是动态变化的,每次鉴别时均需使用动态产生的新口令登录数据库管理系统,即采用一次一密的方法。
    (3)生物特征鉴别:通过生物特征进行认证的技术,生物特征如指纹、虹膜和掌纹等
    (4)智能卡鉴别:智能卡是一种不可复制的硬件,内置集成电路的芯片,具有硬件加密功能

  2. 存取控制
    (1)DBMS的存取子系统控制子系统组成
    ①定义用户权限,并将用户权限登记到数据字典中。
    (权限:用户对某一数据对象的操作权利)
    ②合法权限检查:用户发出存取数据库操作请求
    DBMS查找数据字典,进行合法权限检查
    (2)常用的存取控制方法
    ①自主存取控制方式(DAC)
    C2级、用户对不同的数据对象有不同的存取权限、不同的用户对同一对象也有不同的权限、用户还可将其拥有的存取权限转授给其他用户。
    通过sql的grant和revoke语句实现。
    用户权限组成:操作对象,操作类型
    授权:定义存取权限

    1)授权grant


(1) 将对指定操作对象的指定操作权限授予指定的用户。 grant的发出者:DBA,数据库的创建者(owner),拥有该权限的用户
(2)grant的接受者:一个或多个具体的用户,public(即全体用户) with grant
(3)option子句:指定:可以再授予,没有指定:不可以再授予。
(4)不允许循环授权

eg:把查询student表授权给用户U1
//创造一个用户

//授权

eg:把把对Student表和Course表的全部权限授予用户U2和U3
grant all priviliges

eg:把对表SC的查询权限授予所有用户
to public

eg:把查询Student表和修改学生学号的权限授给用户user1。

eg:把对表SC的INSERT权限授予user1用户,并允许他再将此权限授予其他用户。

2)回收(revoke)

授予的权限可以由DBA或其他授予用户用revoke语句收回
在这里插入图片描述

eg:把用户user1修改学生学号的权限收回

在【例4.10】中U6与U7对SC表的INSERT的权限由U5授予
在这里插入图片描述
3)创建数据库模式的权限

(1) DBA在创建用户时实现。
(2) create user 语句格式:
create user 《username》
【with】【DBA|resource|connect】
(3) create user 不是sql标准,在各个系统中是不同的。


在这里插入图片描述

4)数据库角色:被命名的一组与数据库操作相关的权限。

角色是权限的集合
可以为一组具有相同权限的用户创建一个角色
简化授权过程
创建角色:

给角色授权:

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

一个角色的权限:直接授予这个角色的全部权限加上其他角色授予这个角色的全部权限
收回角色权限:

一、自主存取控制的缺点:
可能存在数据的“无意泄露”
原因:这种机制仅仅通过对数据的存取权限来进行安全控制,而数据本身并无安全性标记
解决:对系统控制下的所有主客体实施强制存取控制策略
二、强制存取控制(MAC):
保证更高程度的安全性
用户不能直接感知或进行控制
适用于对数据有严格而固定密级分类的部门
 军事部门
 政府部门

②强制存取控制方式(MAC)
B1级、每一个数据对象被标以一定的密级、每一个用户也被授权某一个级别的许可证、对于任意一个对象,只有具有合法许可证的用户才可以存取。
在强存取控制空,DBMS所管理的全部试题被分为主体和客体两大类:
1)主体:系统中的活动实体,即实际用户或代表用户的各进程
2)客体:系统中的被动实体,受主体操纵,即文件、基本表、索引、视图。
敏感度标记(Label)
对于主体和客体,DBMS为它们每个实例(值)指派一个敏感度标记(Label)
敏感度标记分成若干级别
1)绝密(Top Secret,TS)
2)机密(Secret,S)
3)可信(Confidential,C)
4)公开(Public,P)
TS>=S>=C>=P
许可证级别:主体的敏感度标记
密级:客体的敏感度标记

强制存取控制规则:
1)仅当主体的许可证级别大于或等于客体的密级时,该主体才能取相应的客体
2)仅当主体的许可证级别小于或等于客体的密级时,该主体才能相应的客体

强制存取控制(MAC)是对数据本身进行密级标记,无论数据如何复制,标记与数据是一个不可分的整体,只有符合密级标记要求的用户才可以操纵数据。
实现强制存取控制时要首先实现自主存取控制
原因:较高安全性级别提供的安全保护要包含较低级别的所有保护
自主存取控制强制存取控制共同构成数据库管理系统的安全机制

3)
3. 视图机制
把要保密的数据对无权存取这些数据的用户隐藏起来,对数据提供一定程度的安全保护
间接地实现支持存取谓词的用户权限定义。

  1. 审计(audit)
    什么是审计?
    (1)启用一个专用的审计日志,将用户对数据库的所有操作记录在上面
    (2)审计员利用审计日志,监控数据库中的各种行为,找到非法存取数据的人、时间和内容。
    (3)C2以上的安全级别的DBMS必须具有审计功能。
    审计功能的可选性?
    (1)审计很费时间和空间
    (2)DBA可以根据应用对安全性的要求,灵活地打开或关闭审计功能
    (3)审计功能主要用于安全性要求较高的部门
    审计事件?
    (1)服务器事件:审计数据库服务器发生的事件
    (2)系统权限:对系统拥有的结构或模式对象进行操作的审计,要求该操作的权限是通过系统权限获得的
    (3)语句事件:对SQL语句,如DDL、DML、DQL及DCL语句的审计
    (4)模式对象事件:对特定模式对象上进行的SELECT或DML操作的审计
    审计功能?
    (1)基本功能:提供多种审计查阅方式提供多种审计查阅方式
    (2)多套审计规则:一般在初始化设定
    (3)提供审计分析和报表功能
    (4)审计日志管理功能
    (5)提供查询设计设置以及设计记录信息的专门视图

    审计类型?
    (1)用户级审计:任何用户可设置的审计,主要是用户针对自己创建的数据库表和视图进行审计
    (2)系统级审计:只能由数据库管理员设置,监测成功或失败的登录要求、监测授权和收回操作以及其他数据库级权限下的操作
    在这里插入图片描述
    mysql8上使用审计:
    (1)查看审计配置情况


    (2)永久开启审计

    (3)临时开启审计
    show variables like ‘general_log’; – 查看日志是否开启
    show variables like ‘log_output’; – 看看日志输出类型 table或file
    show variables like ‘general_log_file’; – 看看日志文件保存位置
    set global general_log_file=‘tmp/general.lg’; – 设置日志文件保存位置
    set global general_log=on; – 开启日志功能
    set global log_output=‘table’; – 设置输出类型为 table
    set global log_output=‘file’; – 设置输出类型为file

5. 数据加密
防止数据库中数据在存储和传输中失密的有效手段
(1)加密的基本思想
根据一定的算法将原始数据—明文(Plain text)变换为不可直接识别的格式­—**密文(Cipher text
(2)加密方法
1)存储加密
①透明存储加密:内核级加密保护方式,对用户完全透明将数据在写到磁盘时对数据进行加密,授权用户读取数据时再对其进行解密数据库的应用程序不需要做任何修改,只需在创建表语句中说明需加密的字段即可。
内核级加密方法: 性能较好,安全完备性较高
②非透明存储加密,通过多个加密函数实现

2)传输加密
①链路加密:在链路层进行加密,传输信息由报头和报文两部分组成,报文和报头均加密。
②端到端加密:在发送端加密,接收端解密;只加密报文不加密报头;所需密码设备数量相对较少,容易被非法监听者发现并从中获取敏感信息

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  1. 其他安全性保护
    (1)推理控制:
    处理强制存取控制未解决的问题,避免用户利用能够访问的数据推知更高密级的数据,常用方法:基于函数依赖的推理控制、基于敏感关联的推理控制。
    (2)隐蔽信道:
    处理强制存取控制未解决的问题
    (3)数据隐私保护:
    描述个人控制其不愿他人知道或他人不便知道的个人数据的能力;范围很广:数据收集、数据存储、数据处理和数据发布等各个阶段
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zj20165149/article/details/104018700

智能推荐

vscode上配置Arduino遇到Select the main sketch file问题_为什么arduino保存的`.ino`文件必须位于相同名称的文件夹中才能打开?-程序员宅基地

文章浏览阅读899次。在arduino上保存一个ino文件,必须将它放在一个同名文件夹中,就算你不放,下次用arduino打开还是会生成一个这样的文件夹。在vscode中,每次upload,都让我选一个sketch,而且选项只有ino文件,也不懂是什么意思。而且,选了一个之后就不能再运行其他的ino文件了。最终,我在https://github.com/czgtest/vscode-arduino中,发现:也就是说,vscode下运行每个ino的文件都要一个在一个专有的文件夹下,带着专有的arduino.json文件运行。_为什么arduino保存的`.ino`文件必须位于相同名称的文件夹中才能打开?

开源短剧播放小程序,带完整搭建教程_短剧小程序 开源-程序员宅基地

文章浏览阅读728次。大家好啊,罗峰又老给大家分享好用的小程序了。大家都喜欢看短剧吧,相比传统网剧冗长的剧情,微短剧最大的看点,是时长短、高浓缩,顺应了当下用户娱乐时间碎片化趋势。其故事题材多为赘婿、霸道总裁、穿越、重生等看似夸张、无厘头,但却非常“上头”的虚构内容。_短剧小程序 开源

如何让健康成为生活的重要组成部分?这份指南教你享受健康生活!_健康应用程序如何成为现代人生活的重要组成部分-程序员宅基地

文章浏览阅读177次。如何有效果地保持终生健康:全网最全面实用易懂的健康指南,内含具体贴心细节不容错过_健康应用程序如何成为现代人生活的重要组成部分

LA 2038 Strategic game 树形DP ._la 2038战略游戏-程序员宅基地

文章浏览阅读243次。题目地址:http://vjudge.net/problem/UVALive-2038 以前做过类似的题 就是,无根转有根 然后普通的DP d[u][i] 表示u节点的父亲有没有被选中,i==1表示被选中,反之没有 为什么弄u的父节点呢,因为 如果弄u的节点信息,那么当u没被选中,子结点至少有一个要被选中,那么只能枚举被选中的那个,无法递推,有后效性#include

leaflet基本使用_leaflet中文文档-程序员宅基地

文章浏览阅读3.5k次,点赞3次,收藏10次。官网(英文):https://iclient.supermap.io/examples/leaflet/examples.html#iServer。高德官网的名词解释:https://lbs.amap.com/api/javascript-api/guide/abc/components。项目地址 gitee:https://gitee.com/philippines-kisses-snow/leaflet-map。(1)直接添加,官网当中是直接建立一个标记,并添加到地图(不推荐,不好管理)_leaflet中文文档

解决在VS2019中创建不了网站_visual studio无法新建空白网站-程序员宅基地

文章浏览阅读611次。VS2019无法新建网站,怎么办?_visual studio无法新建空白网站

随便推点

慕课哈工大C语言程序设计精髓(第5周练兵区)_判断一个整型数据有几位v2.0 从键盘输入一个整型数据(int型),用switch语句和循环-程序员宅基地

文章浏览阅读2.3k次,点赞2次,收藏8次。1判断一个整型数据有几位v2.0(4分)从键盘输入一个整型数据(int型),编写程序判断该整数共有几位,并输出包含各个数字的个数。例如,从键盘输入整数16644,该整数共有5位,其中有1个1,2个6,2个4。程序运行结果示例1:Please enter the number:1222612226: 5 bits1: 12: 36: 1程序运行结果示例2:Please ent..._判断一个整型数据有几位v2.0 从键盘输入一个整型数据(int型),用switch语句和循环

Scrapy 安装介绍以及基本操作_怎么安装scrapy无pip-程序员宅基地

文章浏览阅读6.2w次,点赞38次,收藏179次。在写之前我们先来了解一下什么是Scrapy?Scrapy是用纯Python实现一个为了爬取网站数据、提取结构性数据而编写的应用框架,用途非常广泛框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页内容以及各种图片,非常之方便Scrapy 使用了 Twisted['twɪstɪd](其主要对手是Tornado)异步网络框架来处理网络通讯,可以加快我们的下载速度,不..._怎么安装scrapy无pip

Linux下九个实用脚本_linux脚本-程序员宅基地

文章浏览阅读1.9k次,点赞3次,收藏6次。root@ansible ~]# watch -n 1 sh sd.sh 加上watch -n 1 来判断网卡实时流量。if [ "$RT" -gt 250 ] 限定次数250 超过就屏蔽。echo "网站$URL坏掉,请及时处理"echo "网站高危$URL"echo "磁盘已经沾满不能存储数据!echo "$name 创建成功"echo "$name 创建成功"echo "等待磁盘IO响应使用率: $LL"不过要退出 watch 才会使IP屏蔽。_linux脚本

【Bug解决】ImportError: C extension: No module named ‘pandas._libs.tslibs.base‘ not built._importerror: c extension: none not built. if you w-程序员宅基地

文章浏览阅读4.3k次,点赞6次,收藏11次。问题描述笔者用Pyinstaller打包成exe文件,在其他电脑端运行时出现如下问题ImportError: C extension: No module named 'pandas._libs.tslibs.base' not built. If you want to import pandas from the source directory, you may need to run 'python setup.py build_ext --force' to build the C exten_importerror: c extension: none not built. if you want to import pandas from

tf.tile,tf.gather,t f.concat,t f .expand_dims,tf.add_n, tf.stack,tf.sparse_to_dense_tf add_n concat-程序员宅基地

文章浏览阅读345次。temp = tf.range(0,10)*10 + tf.constant(1,shape=[10])temp2 = tf.gather(temp,[1,5,9])with tf.Session() as sess: print (sess.run(temp)) print (sess.run(temp2))输出结果[ 1 11 21 31 41 51 61 ..._tf add_n concat

用linux脚本插入10w级的数据数据库为mysql-程序员宅基地

文章浏览阅读177次。插入大量数据到MySQL数据库可以使用以下步骤:准备数据:你需要一个数据文件,包含需要插入的所有数据。每行都是一条记录,字段之间使用适当的分隔符分开。创建数据库:如果没有相应的数据库,请先创建一个。创建表:创建一个表来存储数据。导入数据:使用MySQL的"LOAD DATA INFILE"命令导入数据。该命令可以从文件中快速加载大量数据到MySQL表中。以下是使用bash脚本..._linux sql插入大量数据