博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第13讲:数据库安全性
阅读量:5735 次
发布时间:2019-06-18

本文共 2157 字,大约阅读时间需要 7 分钟。

大纲:

  1. 数据库安全性的概念及分类
  2. SQL语言实现自主安全性

 

一、前言

1. 数据库安全性是数据库的一种特性(免受非法或非授权用户的使用、泄露、破坏),其由DBMS保证实现

 

2. 数据库系统的安全级别涉及多个方面,如网络控制、操作系统控制、DBMS控制等,我们只在DBMS上进行控制

 

二、数据库安全性概述

1. DBMS的安全机制可包括自主安全性机制、强制安全性机制、数据加密存储机制等

    ①自主安全性机制:通过授权机制(让权限在用户之间传递,使用户自主管理数据库安全性)来实现

    ②强制安全性机制:对数据和用户进行分类,不同类用户能看到不同类别的数据

 

2. 数据库自主安全性机制

  • DBMS专门提供一个DBA账户,DBA利用该账户的特权可以进行用户账户的创建以及权限授予和撤消、安全级别控制调整等
  • 用户在使用数据库前必须从DBA处获得一个账户,并由DBA授予该账户一定的权限,该账户的用户依据其所拥有的权限对数据库进行操作,同时,该账户的用户也可将其所拥有的权利转授给其他的用户,由此实现权限在用户之间的传播和控制

 

3. DBMS如何实现数据库自主安全性

  1. DBA定义安全性控制规则(安全性访问规则)
  2. 当用户请求访问数据时,DBMS将依据安全性控制规则来检查是否符合规则,进而决定是否允许访问

 

三、安全性访问规则的表达

1. 安全性访问规则的一般形式:(S,O,t,P),即用户S在满足条件P时,以权利t来访问对象O

  • S:请求主体,即用户或用户组
  • O:访问的对象,即要访问的数据库、表、元组、属性等
  • t:访问权利,包括创建、增、删、改、查等
  • P:谓词,即拥有权利需要满足的条件

 

四、自主安全性的两种实现方式

1. 存储矩阵

    ①只包含S、O、t,不能表达P

 

2. 视图

    ①包含S、O、t、P,因为视图可将数据访问对象与谓词结合起来

    ②可以限制用户访问和操作关系中的哪些数据,如定义不同的视图给不同的用户来使用

 

五、利用SQL语言实现自主安全性

1. SQL中的用户分级

    ①超级用户:DBA

    ②账户级别:程序员

    ③关系级别:普通用户

 

2. SQL中的权利分级

    ①1级(读):select

    ②2级(更新):insert、update、delete

    ③3级(创建):create、alter、drop

注:级别高的权利自动包含级别低的权利,一般将级别3的权利称为账户级别的权利,而将级别1和2的权利称为关系级别的权利。

 

3. 授权命令

grant {

all privileges | privilege [, privilege ... ]} on [table] 表名 | 视图名

to {

public | user-id [, user-id ... ]} [with grant option];

    ①privilege可以是select、insert、update、delete

    ②user-id是某一个由DBA创建的用户账号,而public则是所有有效用户

    ③with grant option选项表示允许被授权者传播这些权利

    ④授予的权利必须是授权者已拥有的权利

【示例】现有一关系Employee(P#, Pname, Page, Psex, Psalary, D#, HEAD),并创建了4个视图EmpV1、EmpV2、EmpV3、EmpV4,现假定高级领导为Emp0001,部门领导为Emp0021,员工管理员为Emp2001,收发员为Emp5001(均为UserId, 也即员工的P#):

  • createEmpV1asselect*fromEmployee;
  • createEmpV2asselectPname,D#fromEmployee;
  • createEmpV3asselect*fromEmployeewhereP#=UserId;
  • createEmpV4asselect*fromEmployeewhereHead=UserId;
  • grant all priviledges on Employee to Emp2001;  // 授予Emp2001“所有权利”去访问Employee表
  • grant select on EmpV2 to Emp5001 ;                // 授予Emp5001“select”权利去访问视图EmpV2
  • grant select on EmpV3 to public;                       // 授予public“select”权利去访问视图EmpV3
  • grant select on EmpV4 to Emp0021;                 // 授予Emp0021“select”权利去访问视图EmpV4
  • 上面4条grant语句就是授权(grant)机制与视图结合而实现自主安全性的典例

 

4. 收回授权命令

revoke {

all privileges | privilege [, privilege ... ]} on [table] 表名 | 视图名 from {
public | user-id [, user-id ... ]};

  • 示例:revoke select on Employee from UserB;

 

转载于:https://www.cnblogs.com/xzxl/p/10753960.html

你可能感兴趣的文章
Spring之旅第八站:Spring MVC Spittr舞台的搭建、基本的控制器、请求的输入、表单验证、测试(重点)...
查看>>
数据结构与算法——常用排序算法及其Java实现
查看>>
你所不知的Webpack-多种配置方法
查看>>
React.js 集成 Kotlin Spring Boot 开发 Web 应用实例详解
查看>>
《图解HTTP》学习笔记(四):返回结果的HTTP状态码
查看>>
swift 主题库
查看>>
翻译连载 | 附录 B: 谦虚的 Monad-《JavaScript轻量级函数式编程》 |《你不知道的JS》姊妹篇...
查看>>
Spring 学习笔记(一)Spring核心容器
查看>>
webpack+typescript+threejs+vscode开发
查看>>
python读excel写入mysql小工具
查看>>
Node模块--text-table
查看>>
如何学习区块链
查看>>
搜索问题的办法
查看>>
微信分销系统商城营销5大重点
查看>>
求职准备 - 收藏集 - 掘金
查看>>
【Java】类的循环初始化是否会引起死锁?
查看>>
htm5新特性(转)
查看>>
前端面试之Css篇
查看>>
Linux-Centos启动流程
查看>>
php 设计模式
查看>>