数据库安全性:保护数据库以防止不合法使用所造成的数据泄露、更改或破坏
系统安全保护措施是否有效是数据库系统主要的性能指标之一。
一、数据库安全安全性概论
1. 数据库的不安全因素
(1)非授权用户对数据库的恶意存取和破坏,dbms 提供的安全措施主要包括:用户身份鉴别、存取控制和视图等技术。
(2)数据库中重要或敏感的数据被泄露,dbms系统主要技术有强制存取控制、数据加密存储和加密传输等。
(3)安全环境的脆弱性:数据库的安全性与计算机系统的安全性紧密联系,要建立一套可信计算机系统的概念和标准。
2. 安全标准简介
二、数据库安全性控制
计算机系统中,安全措施是一级一级层层设置
计算机系统的安全模型:
系统根据用户表示鉴定用户身份,合法用户才准许进入计算机系统。
数据库管理系统还要进行存取控制,只允许用户执行合法操作。
操作系统有自己的保护措施。
数据以密码形式存储在数据库中。
数据库安全性控制的常用方法(重点)
(1)用户标识和鉴定
(2)存取控制
(3)视图
(4)审计
(5)数据加密
用户身份鉴别(identitication & Authentication)
系统提供的最外层的安全措施
用户识别:由用户名和用户标识号组成(用户标识号在系统整个生命周期内唯一)
用户身份鉴别的方法
(1)静态口令鉴别:静态口令一般由用户自己设定,这些口令是静态不变的
(2)动态口令鉴别:口令是动态变化的,每次鉴别时均需使用动态产生的新口令登录数据库管理系统,即采用一次一密的方法。
(3)生物特征鉴别:通过生物特征进行认证的技术,生物特征如指纹、虹膜和掌纹等
(4)智能卡鉴别:智能卡是一种不可复制的硬件,内置集成电路的芯片,具有硬件加密功能
存取控制
(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. 视图机制
把要保密的数据对无权存取这些数据的用户隐藏起来,对数据提供一定程度的安全保护
间接地实现支持存取谓词的用户权限定义。
5. 数据加密
防止数据库中数据在存储和传输中失密的有效手段
(1)加密的基本思想
根据一定的算法将原始数据—明文(Plain text)变换为不可直接识别的格式—**密文(Cipher text
(2)加密方法
1)存储加密
①透明存储加密:内核级加密保护方式,对用户完全透明将数据在写到磁盘时对数据进行加密,授权用户读取数据时再对其进行解密数据库的应用程序不需要做任何修改,只需在创建表语句中说明需加密的字段即可。
内核级加密方法: 性能较好,安全完备性较高
②非透明存储加密,通过多个加密函数实现
2)传输加密
①链路加密:在链路层进行加密,传输信息由报头和报文两部分组成,报文和报头均加密。
②端到端加密:在发送端加密,接收端解密;只加密报文不加密报头;所需密码设备数量相对较少,容易被非法监听者发现并从中获取敏感信息
文章浏览阅读899次。在arduino上保存一个ino文件,必须将它放在一个同名文件夹中,就算你不放,下次用arduino打开还是会生成一个这样的文件夹。在vscode中,每次upload,都让我选一个sketch,而且选项只有ino文件,也不懂是什么意思。而且,选了一个之后就不能再运行其他的ino文件了。最终,我在https://github.com/czgtest/vscode-arduino中,发现:也就是说,vscode下运行每个ino的文件都要一个在一个专有的文件夹下,带着专有的arduino.json文件运行。_为什么arduino保存的`.ino`文件必须位于相同名称的文件夹中才能打开?
文章浏览阅读728次。大家好啊,罗峰又老给大家分享好用的小程序了。大家都喜欢看短剧吧,相比传统网剧冗长的剧情,微短剧最大的看点,是时长短、高浓缩,顺应了当下用户娱乐时间碎片化趋势。其故事题材多为赘婿、霸道总裁、穿越、重生等看似夸张、无厘头,但却非常“上头”的虚构内容。_短剧小程序 开源
文章浏览阅读177次。如何有效果地保持终生健康:全网最全面实用易懂的健康指南,内含具体贴心细节不容错过_健康应用程序如何成为现代人生活的重要组成部分
文章浏览阅读243次。题目地址:http://vjudge.net/problem/UVALive-2038 以前做过类似的题 就是,无根转有根 然后普通的DP d[u][i] 表示u节点的父亲有没有被选中,i==1表示被选中,反之没有 为什么弄u的父节点呢,因为 如果弄u的节点信息,那么当u没被选中,子结点至少有一个要被选中,那么只能枚举被选中的那个,无法递推,有后效性#include
文章浏览阅读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中文文档
文章浏览阅读611次。VS2019无法新建网站,怎么办?_visual studio无法新建空白网站
文章浏览阅读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语句和循环
文章浏览阅读6.2w次,点赞38次,收藏179次。在写之前我们先来了解一下什么是Scrapy?Scrapy是用纯Python实现一个为了爬取网站数据、提取结构性数据而编写的应用框架,用途非常广泛框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页内容以及各种图片,非常之方便Scrapy 使用了 Twisted['twɪstɪd](其主要对手是Tornado)异步网络框架来处理网络通讯,可以加快我们的下载速度,不..._怎么安装scrapy无pip
文章浏览阅读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脚本
文章浏览阅读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
文章浏览阅读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
文章浏览阅读177次。插入大量数据到MySQL数据库可以使用以下步骤:准备数据:你需要一个数据文件,包含需要插入的所有数据。每行都是一条记录,字段之间使用适当的分隔符分开。创建数据库:如果没有相应的数据库,请先创建一个。创建表:创建一个表来存储数据。导入数据:使用MySQL的"LOAD DATA INFILE"命令导入数据。该命令可以从文件中快速加载大量数据到MySQL表中。以下是使用bash脚本..._linux sql插入大量数据