精华内容
下载资源
问答
  • 数据库-数据库安全性
    千次阅读 多人点赞
    2019-09-02 23:46:10

    这篇博客内容有些琐碎繁杂,我整理的时候有很多上课时老师没有讲的,但我自己在看的时候看了看,感觉有必要再整理一下,跟考试等无关,就是多了解下关于数据库的,所以后面的理论性东西很多,大家看的时候根据目录看下有没有需要的,这篇实在有点多,我都写炸了 ( ’ - ’ *)


    目录

    数据库安全性

    1、数据库安全性概述

    1)、数据库的不完全因素

    2)、安全标准简介

    2、数据库安全性控制

    1)、用户身份鉴别

    2)、存取控制

    3)、自主存取控制方法

    4)、授权:授予与收回

    5)、数据库角色

    6)、强制存取控制方法

    3、视图机制

    4、审计

    5、数据加密

    6、其他安全性保护

     


    数据库安全性

    数据库的特点之一是由数据库管理系统提供统一的数据保护功能来保证数据的安全可靠和正确有效。数据库的数据保护主要包括数据的安全性和完整性,这里主要介绍数据库的安全性。

    1、数据库安全性概述

    数据库的安全性是指保护数据库以防止不合法使用所造成的数据泄露、更改或破坏。安全性问题不是数据库系统所独有的,所有计算机系统都存在不安全因素,只是在数据库系统中由于大量数据集中存放,而且为众多最终用户直接共享,从而使安全性问题更加突出。系统安全保护措施是否有效是数据库系统的主要技术指标之一。

    1)、数据库的不完全因素

    对数据库安全性产生威胁的因素主要有以下几方面:

    1、非授权用户对数据库的恶意存取和破坏

    一些黑客和犯罪分子在用户存取数据库时猎取用户名和用户口令,然后假冒合法用户偷取、修改甚至破坏用户数据。数据库管理系统提供的安全措施主要包括用户身份鉴别、存取控制和视图等技术。

    2、数据库中重要或敏感的数据被泄露

    为防止数据泄露,数据库管理系统提供的主要技术有强制存取控制、数据加密存储和加密传输等。此外,在安全性要求较高的部门提供审计功能,通过分析审计日志,可以对潜在的威胁提前采取措施加以防范,对非授权用户的入侵行为及信息破坏情况能够进行跟踪,防止对数据库安全责任的否认。

    3、安全环境的脆弱性

    数据库的安全性与计算机系统的安全性,包括计算机硬件、操作系统、网络系统等的安全性是紧密联系的。操作系统安全的脆弱,网络协议安全保障的不足等都会造成数据库安全性的破坏。为此,在计算机安全技术方面逐步发展建立了一套可信计算机系统的概念和标准。只有建立了完善的可信标准即安全标准,才能规范和指导安全计算机系统部件的生产,较为准确地测定产品的安全性能指标,满足民用和军用的不同需要。

     

    2)、安全标准简介

    TCSEC(或DoD85)标准:由美国国防部发布,又称为桔皮书。TCSEDC/TDI (紫皮书),是将 TCSEC 扩展到数据库管理系统, TCSEC/TDI 中定义了数据库管理系统的设计与实现中需满足和用以进行安全性级别评估的标准,从四个方面来描述安全性级别划分的指标,即安全策略、责任、保证和文档。根据计算机系统对各项指标的支持情况,TCSEC /TDI 将系统划分为四组七个等级,按系统可靠或可信程度逐渐增高,如表:

    这里我就不说那么详细了,如果感兴趣的可以看这篇博客 数据库安全性总结 ,这里面比我记录的更加详细。

     

    CC 标准:国际公认的表述信息技术安全性的结构通用准则。CC 提出了目前国际上公认的表述信息技术安全性的结构,即把对信息的安全要求分为安全功能要求和安全保证要求。安全功能要求用以规范产品和系统的安全行为,安全保证要求解决如何正确有效地实施这些功能。安全功能要求和安全保证要求都以 “类-子类-组件” 的结构表述,组件是安全要求的最小构建块。

    CC 的文本由三部分组成,三个部分相互依存,缺一不可。第一部分是简介和一般模型,介绍 CC 中的有关术语、基本概念和一般模型以及与评估有关的一些框架。第二部分是安全功能要求,列出了一些类、子类和组件。由 11 大类、66 个子类和 135 个组件构成。第三个部分是安全保证要求,列出了一系列保证类、子类和组件,包括 7 大类、26 个子类和 74 个组件。

    根据系统对安全保证要求的支持情况提出了评估保证级,从 EAL1 至 EAL7 共分为 7 级,按保证程度逐渐增高,如表:

    评估保证级

    定  义

    TCSEC安全级别(近似相当)

    EAL1

    功能测试(functionally tested

     

    EAL2

    结构测试(structurally tested

    C1

    EAL3

    系统地测试和检查(methodically tested and checked

    C2

    EAL4

    系统地设计、测试和复查(methodically designed, tested,  and reviewed

    B1

    EAL5

    半形式化设计和测试(semiformally designed and tested

    B2

    EAL6

    半形式化验证的设计和测试(semiformally verified design and tested

    B3

    EAL7

    形式化验证的设计和测试(formally verified design and tested

    A1

    CC 的2附录部分主要介绍保护轮廓和安全目标的基本内容。这三部分的有机结合具体体现在保护轮廓和安全目标中,CC 提出的安全功能要求和安全保证要求都可以在具体的保护轮廓好安全目标中进一步细化和扩展,这种开放式的结构更适应信息安全技术的发展。CC 的具体应用也是通过保护轮廓和安全目标这两种结构来实现的

     

    2、数据库安全性控制

    在一般计算机系统中,安全措施是一级一级层层设置的,其安全模型见图:

    用户要求进入计算机系统时,系统首先根据输入的用户标识进行用户身份鉴定,只有合法的用户才准许进入计算机系统;对于已经进入系统的用户,数据库管理系统还要进行存取控制,只允许用户执行合法操作;操作系统也会有自己的保护措施;数据最后还可以以密码形式存储到数据库中。

    和数据库相关的安全性,主要包括用户身份鉴别、多层存取控制、审计、视图和数据加密等技术。下面是数据库安全保护的一个存取控制流程图:

    首先,数据库管理系统对提出 SQL 访问请求的数据库用户进行身份鉴别,防止不可信用户使用系统;然后在 SQL 处理层进行自助存取控制和强制存取控制,进一步还可以进行推理控制。为监控恶意访问,可根据具体安全需求配置审计规则,对用户访问行为好系统关键操作进行审计。通过设置简单入侵检测规则,对异常用户行为进行检测和处理。在数据存储层,数据库管理系统不仅存放用户数据,还存储与安全有关的标记和信息(称为安全数据),提供存储加密功能等。

     

    1)、用户身份鉴别

    用户身份鉴别是数据库管理系统提供的最外层安全保护措施。每个用户在系统中都有一个用户标识。每个用户标识由用户名和用户标识号(UID)两部分组成。UID 在系统的整个生命周期内是唯一的。系统内部记录着所有合法用户的标识,系统鉴别是指由系统提供一定的方式让用户标识自己的名字或身份。每次用户要求进入系统时,由系统进行核对,通过鉴定后才提供使用数据库管理系统的权限。

    用户身份鉴别的方法有很多种,而且在一个系统中往往是多种方法相结合,以获得更强的安全性。常用的用户身份鉴别方法有以下几种:

    1、静态口令鉴别

    这种方式是当前常用的鉴别方法。静态口令一般由用户自己设定,鉴别时只要按要求输入正确的口令,系统将允许用户使用数据库管理系统。这些口令是静态不变的,很容易被破解,而一旦被破解,非法用户就可以冒充该用户使用数据库。因此这种方法虽然简单,但容易被攻击,安全性较低

    2、动态口令鉴别

    它是目前较为安全的鉴别方式。这种方式的口令是动态变化的,每次鉴别时均使用动态产生的新口令登录数据库管理系统,即采用一次一密的方法常用的方式如短信密码和动态令牌方式。与静态口令鉴别相比,这种认证方式增加了口令被窃取或破解的难度,安全性相对高一些

    3、生物特征鉴别

    它是一种通过生物特征进行认证的技术,其中,生物特征是指生物体唯一具有的,可测量、识别和验证的稳定生物特征,如指纹、虹膜和掌纹等。这种方式通过采用图像处理和模式识别等技术实现了基于生物特征的认证,与传统的口令鉴别相比,无疑产生了质的飞越,安全性较高。

    4、智能卡鉴别

    智能卡是一种不可复制的硬件,内置集成电路的芯片,具有硬件加密功能。智能卡由用户随身携带,登录数据库管理系统时用户将智能卡插入专用的读卡器进行身份验证。由于每次从智能卡中读取的数据是静态的,通过内存扫描或网络监听等技术还是可能截取到用户的身份验证信息,存在安全隐患。因此实际应用中一般采用个人身份识别码(PIN)和智能卡相结合的方式

     

    2)、存取控制

    数据库安全最重要的一点就是确保只授权给有资格的用户访问数据库的权限,同时令所有未被授权的人员无法接近数据,这主要通过数据库系统的存取控制机制实现。

    存取控制机制主要包括定义用户权限和合法权限检查两部分。1)、定义用户权限,并将用户权限登记到数据字典中。用户对某一数据对象的操作权力称为权限,数据库管理系统的功能是保证这些决定的执行。为此,数据库管理系统必须提供适当的语言来定义用户权限,这些定义经过编译后存储在数据字典中,被称为安全规则或授权规则。2)、合法权限检查。每当用户发出存取数据库的操作请求后(请求一般应包括操作类型、操作对象和操作用户等信息),数据库管理系统查找数据字典,根据安全规则进行合法权限检查,若用户的操作请求超出了定义的权限,系统将拒绝执行此操作。

    定义用户权限和合法权限检查机制一切组成了数据库管理系统的存取控制子系统。C2级的数据库管理系统支持自主存取控制(DAC),B1级的数据库管理系统支持强制存取控制(MAC).

    这两类方法的简单定义是:1)、在自助存取控制方法中,用户对于不同的数据库对象有不同的存取权限,不同的用户对同一对象也有不同的权限,而且用户还可将其拥有的存取权限转授给其他用户。因此自助存取控制非常灵活;2)、在强制存取控制方法中,每一个数据库对象被标以一定的密级,每一个用户也被授予某一个级别的许可证。对于任意一个对象,只有具有合法许可证的用户才可以存取。强制存取控制因此相对比较严格

     

    3)、自主存取控制方法

    大型数据库管理系统都支持自主存取控制,SQL标准也对自助存取控制提供支持,这主要通过 SQL 的 grant 语句和 revoke 语句来实现。用户权限是由两个要素组成的:数据库对象和操作类型。定义一个用户的存取权限就是要定义这个用户可以在哪些数据库对象上进行哪些类型的操作。在数据库系统中,定义存取权限称为授权

    在非关系数据库中,用户只能对数据进行操作,存取控制的数据库对象也仅限于数据本身。在关系数据库系统中,存取控制的对象不仅有数据本身(基本表中的数据、属性列上的数据),还有数据库模式(包括数据库、基本表、视图和索引的创建等)。见下:

     

    对象类型

    对象

    操 作 类 型

    数据库

              模式

    模式

    CREATE SCHEMA

    基本表

    CREATE TABLEALTER TABLE

    视图

    CREATE VIEW

    索引

    CREATE INDEX

    数据

    基本表和视图

    SELECTINSERTUPDATEDELETEREFERENCES

    ALL PRIVILEGES

    属性列

    SELECTINSERTUPDATEREFERENCES

     

    ALL PRIVILEGES (全部操作)

    在上表中,列权限包括 SELECT、REFERENCES、INSERT、UPDATE,其含义与表权限类似。需要说明的是,对列的 UPDATE 权限是指对于表中存在的某一列的值可以修改。当然,有了这个权限后,在修改的过程中还要遵守表在创建时定义的主码及其他约束。列上的 INSERT 权限是指用户可以插入一个元组。对于插入的元组,授权用户可以插入指定的值,其他列或者为空,或者为默认值。在给用户授予列 INSERT 权限时,一定要包含主码的 INSERT 权限,否则用户的插入动作会因为主码为空而被拒绝。

     

    4)、授权:授予与收回

    SQL 中使用 grant 和 revoke 语句向用户授予或收回对数据的操作权限。grant 语句向用户授予权限,revoke 语句收回已经授予用户的权限。

    GRANT :

    GRANT 语句的一般格式为:

    grant <权限><权限>···
    
    on <对象类型><对象名>···
    
    to <用户>···
    
    [ with grant option ] ;

    其语义为:将对指定操作对象的指定操作权限授予指定的用户。发出该 GRANT 语句的可以是数据库管理员,也可以是数据库对象创建者,还可以是已经拥有该权限的用户。接受权限的用户可以是一个或多个具体用户,也可以是 public ,即全体用户

    如果指定了 with grant option 子句,则获得某种权限的用户还可以把这种权限再授予其他的用户。如果没有指定 with grant option 子句,则获得某种权限的用户只能使用该权限,不能传播该权限。

    SQL 标准允许具有 with grant option 的用户把相应权限或其子集传递授予其他用户,但不允许循环授权,即被授权者不能把权限再授回给授权者或其祖先,即:

    下面列举一些例子:

    //把查询 Student 表的权限授给用户 U1
    grant select
    on table Student
    to U1 ;
    
    //把对 Student 表和 Course 表的全部操作权限授予用户 U2 和 U3
    grant all privileges
    on table Student,Course
    TO U2,U3 ;
    
    //把对表 SC 的查询权限授予所有用户
    grant select
    on table SC
    to public ;
    
    //把查询 Student 表和修改学生学号的权限授给用户 U4
    grant update(Sno),select
    on table Student
    to U4 ;
    //这里实际上要授予 U4 用户的是对基本表 Student 的 select 权限和对属性列 Sno 的 update 权限。
    //对属性列授权时必须明确指出相应的属性列名
    
    //把对表 SC 中的 Sno,Cno 的 insert 权限授予 U5 用户
    grant insert (Sno,Cno)
    on SC
    to U5;
    
    //把对表 SC 的 insert 权限授予用户 U5 ,并允许将此权限再授予其他用户
    grant insert
    on table SC
    to U5
    with grant option ;
    

    由上面的例子可以看到,GRANT 语句可以一次向一个用户授权,也可以一次向多个用户授权,还可以一次传播多个同类对象的权限,甚至一次可以完成对基本表和属性列这些不同对象的权限

     

    REVOKE :

    授予用户的权限可以由数据库管理员或其他授权者使用 REVOKE 语句收回,其一般格式为:

    revoke <权限>···
    on <对象类型><对象名>···
    from <用户>···[cascade | restrict] ;

    举几个栗子(~_~):

    //把用户 U4 修改学生的权限收回
    revoke update(Sno)
    on table Student
    from U4 ;
    
    //收回所有用户对表 SC 的查询权限
    revoke select
    on table SC
    from public ;
    
    //把用户 U5 对表 SC 的 insert 权限收回
    revoke insert
    on table SC
    from U5 cascade ;
    //在收回 U5 的 insert 权限时,级联收回该用户下授予其他用户的 insert 权限。
    //这里需要说明一下:一般默认值为 cascade ,有的数据库管理系统默认值是 restrict,将自动执行级联操作。如果级联的用户还从其他用户处获得对 SC 表的 insert 权限,则他们仍具有此权限,系统只收回直接或间接从 U5 处获得的权限。

    SQL 提供了非常灵活的授权机制。数据库管理员拥有对数据库中所有对象的所有权限,并可以根据实际情况将不同的权限授予不同的用户。用户对自己建立的基本表和视图拥有全部的操作权限,并且可以用 GRANT 语句把其中某些权限授予其他用户,被授权的用户如果有 “继续授权” 的许可,还可以把获得的权限再授予其他用户。所有授予出去的权力在必要时又都可以用 REVOKE 语句收回。

    可见,用户可以 “自主” 地决定将数据的存取权限授予何人、决定是否也将 “授权” 的权限授予别人,因此称这样的存取控制是自助存取控制

     

    创建数据库模式的权限:

    GRANT 和 REVOKE 语句向用户授予或收回对数据的操作权限。对创建数据库模式一类的数据库对象的授权则由数据库管理员在创建用户时实现

    create user 语句用来创建用户,其一般格式为:

    create user <username> [ with ][ DBA | RESOURCE | CONNECT ]

    对 create user 语句说明如下:

    只有系统的超级用户才有权创建一个新的数据库用户。新创建的数据库用户有三种权限: CONNECT 、RESOURCE 和 DBA 。create user 命令中如果没有指定创建的新用户的权限,默认该用户拥有 CONNECT 权限

    拥有 CONNECT 权限的用户不能创建新用户,不能创建模式,也不能建立基本表,只能登录数据库。由数据库管理员或其他用户授予它应有的权限,根据获得的授权情况它可以对数据库对象进行权限范围内的操作。拥有 RESOURCE 权限的用户能创建基本表和视图,成为所创建对象的属主,但不能创建模式,不能创建新的用户。数据库对象的属主可以使用 GRANT 语句把该对象上的存取权限授予其他用户。拥有 DBA 权限的用户是系统中的超级用户,可以创建新的用户、创建模式、常见基本表和视图等;DBA 拥有对所有数据库对象的存取权限,还可以把这些权限授予一般用户

    需要注意的是:create user 语句不是 SQL 标准,因此不同的关系数据库管理系统的语法和内容相差甚远。这里介绍该语句的目的是说明对于数据库模式这一类数据对象也有安全控制的需要,也是要授权的。

     

    创建登录用户:

    其一般格式为:

    create login login_name with password='' ;

    数据库用户是数据库级别上的用户,普通用户登录后只能够链接到数据库服务器上,不具有访问数据库的权限,只有成为数据库用户后才能访问此数据库。数据库用户一般都来自于服务器上已有的登录账户,让登录账户成为数据库用户的操作称为‘映射’,一个登录账户可以映射多个数据库用户。默认情况下新建的数据库中已有一个用户:dbo其删除格式为:

    drop login login_name ;

    创建数据库用户并将其映射到登录上:

    create user user_name for/from login login_name
    
    //删除数据库用户
    drop user user_name

    下面来一些完整的应用:

    //创建两个登录用户 jack,kitty,密码都为 '123456'
    create Login jack with password='123456‘
    create Login kitty with password='123456‘
    
    //创建 EDUC 的数据库用户jack_educ, kitty_educ分别映射到上述两个登录账号上
    Use educ   
    create user jack_educ for Login jack 
    create user kitty_educ for Login kitty 
    
    //建立 spj 的数据库用户 jack_spj 映射到 jack 登录账号上
    Use spj   
    create user jack_spj for Login jack
    
    
    //把对表 SC 的 insert 权限授予 E1 用户,并允许它将此权限授予其他用户
    grant insert
    on SC
    to E1
    with grant option ;
    
    //E1 用户把 SC 表的 insert 权限授予 E2,并允许它将此权限授予其他用户
    execute as user='E1';
    grant insert
    on SC
    to E2
    with grant option ;
    
    //E2 用户把 SC 表的 insert 权限授予 E3,不允许它将此权限授予其他用户
    revert 
    execute as user='E2';
    grant insert
    on SC
    to E3 ;
    
    
    

    不同的用户之间还可以彼此切换,以满足对不同用户授予不同权限的需求。

    //用管理员登录,为测试方便,可以在用户间切换:
    Use educ
    
    //1.输出当前用户:
    print user
    
    //2.转到用户jack_educ:
    execute as user=‘jack_educ'
    print user
    
    //3.转到dbo下:
    revert    print user
    // revert 表示返回上一用户,此时已经是 dbo 用户,后面的 print user 是用来显示当前用户的
    

    需要注意的是:一般用户之间无法直接切换,需要转回 dbo 用户后才可切换至其他用户。下面举一些有关用户权限的例子:

    //把对表SC的INSERT权限授予 E1 用户,并允许他再将此权限授予其他用户。
    grant insert     
    on SC     
    to E1
    with grant option;
    
    //E1 用户把对 SC 表的insert权限授权给 E2,并可以传播
    execute as user=‘E1’ 。
    grant insert     
    on SC     
    to E2
    with grant option;
    
    // E2 用户把对 SC 表的 insert 权限授权给 E3 ,不可传播。
    revert
    execute as user=‘E2’ 
    grant insert
    on SC
    to E3;
    

     

    5)、数据库角色

    数据库角色是被命名的一组与数据库操作相关的权限,角色是权限的集合。因此可以为一组具有相同权限的用户创建一个角色,使用角色来管理数据库权限可以简化授权的过程。在 SQL 中首先用 create role 语句来创建角色,然后用 grant 语句给角色授权用 revoke 语句收回授予角色的权限

    创建角色的 SQL 语句格式是:

    create role <角色名> ;

    刚刚创建的角色是空的,没有任何内容,可以用 grant 为角色授权

    grant  <角色1>[,<角色2>] ···
    on <对象类型> 对象名
    to <角色> [,<角色>] ···
    //数据库管理员和用户可以利用 grant 语句将权限授予某一个或几个角色

    此外,还可以将一个角色授予其他的角色或用户:

    grant <角色1> [,<角色2>]···
    to <角色3> [,<用户1>]···
    [ with admin option ]

    该语句把角色授予某用户,或授予另一个角色。这样,一个角色(例如角色3)所拥有的权限就是授予它的全部角色(例如角色1和角色2)所包含的权限的总和。授予者或是角色的创建者,或者拥有在这个角色上的 admin option ,如果指定了 with admin option 子句,则获得某种权限的角色或用户还可以把这种权限再授予其他的角色。一个角色包含的权限包括直接授予这个角色的全部权限加上其他角色授予这个角色的全部权限

    用户可以收回角色的权限,从而修改角色拥有的权限。其格式为:

    revoke <权限> [,<权限>]···
    on <对象类型><对象名>
    from <角色1>[,<角色2>]···

    同样,revoke动作的执行者或者是角色的创建者,或者拥有在这个(些)角色上的 admin option 。下面举一些例子:

    //创建一个角色 R1
    create role R1 ;
    
    //授予角色 R1 对表 Student 的 select、update、insert 权限
    grant select,update,insert
    on table Student
    to R1 ;
    
    //将这个角色授予张三、李四、王五,使他们具有角色 R1 所包含的全部权限
    grant R1
    to 张三,李四,王五 ;
    
    //可以一次性地通过 R1 来收回张三的三个权限
    revoke R1
    from 张三
    
    //角色的权限修改 : 增加 Student 表的 delete 权限
    grant delete
    on table Student
    to R1 ;
    
    //减少角色对表 Student 的 select 权限
    revoke select
    on table Student
    from R1 ;
    
    

    可以看出,数据库角色是一组权限的集合。使用角色来管理数据库权限可以简化授权的过程,使自主授权的执行更加灵活、方便

     

    6)、强制存取控制方法

    自主存取控制 ( MAC ) 能够通过授权机制有效地控制对敏感数据的存取。但是由于用户对数据的存取权限 是“自主” 的,用户可以自由地决定将数据的存取权限授予何人,以及决定是否也将“授权”的权限授予别人。在这种授权机制下,仍可能存在数据的 “无意泄露” 。例如:甲将自己权限范围内的某些数据存取权限授权给乙,甲的意图是仅允许乙本人操作这些数据,但甲的这种安全性要求并不能得到保证,因为乙一旦获得了对数据的权限,就可以将数据备份,获得自身权限内的副本,并在不征得甲同意的前提下传播副本。造成这一问题的根本原因就在于,这种机制仅仅通过对数据的存取权限来进行安全控制,而数据本身并无安全性标记。为解决这一问题,就需要对系统控制下的所有主客体实施强制控制策略。

    所谓强制存取控制是指系统为保证更高程度的安全性,按照 TDI/TCSEC 标准中安全策略的要求所采取的强制存取检查手段。它不是用户能直接感知或进行控制的。强制存取控制适用于那些对数据有严格而固定密级分类的部门,如军事部门或政府部门

    在强制存取控制中,数据库管理系统所管理的全部实体被分为主体客体两大类。主体是系统中的活动实体,既包括数据库管理系统所管理的实际用户,也包括代表用户的各进程。客体是系统中的被动实体,是受主体操纵的,包括文件、基本表、索引、视图等。对于主体和客体,数据库管理系统为它们每个实例指派一个敏感度标记

    敏感度标记分成若干级别,例如绝密(TS)、机密(S)、可信(C)、公开(P)等。密级的次序是 TS>=S>=C>=P 。主体的敏感度标记为许可证级别,客体的敏感度标记称为密级强制存取控制机制就是通过对比主体的敏感度标记和客体的敏感度标记,最终确定主体是否能够存取客体

    当某一用户注册入系统时,系统要求它对任何客体的存取必须遵循如下规则1)、仅当主体的许可证级别大于或等于客体的密级时,该主体才能读取相应的客体。2)、仅当主体的许可证级别小于或等于客体的密级时,该主体才能写相应的客体。规则一的意义是比较明显的,这里解释一下规则二:按照规则二,用户可以为写入的对象赋予高于自己的许可证级别的密级,这样一旦数据被写入,该用户自己也不能再读该数据对象了。如果违反了规则二,就有可能把数据的密级从高流向低,造成数据的泄露。例如:某个 TS 密级的主体把一个密级为 TS 的数据恶意地降为 P ,然后把它写回,这样原来的 TS 密级的数据大家都可以读到了,造成了 TS 密级数据的泄露。

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

    系统首先进行自主存取控制检查,对通过自主存取控制检查的允许存取的数据库对象再由系统自动进行强制存取控制检查,只有通过强制存取控制检查的数据库对象方可存取

     

    3、视图机制

    该机制是为不同用户定义不同的视图,把数据对象限制在一定的范围内。也就是说,通过视图机制把要保密的数据对无权存取的用户隐藏起来,从而自动对数据提供一定程度的安全保护

    视图机制主要功能是提供数据独立性,并间接地实现支持存取谓词的用户权限定义。例如,在某大学中假定王平老师只能检索计算机系学生的信息,系主任张明有检索和增删计算机系学生信息的所有权限,这就要求系统能支持 “存取谓词” 的用户权限定义。

    在不直接支持存取谓词的系统中,可以先建立计算机系学生的视图 CS_Student ,然后在视图上进一步定义存取权限,如:

    //先建立视图 CS_Student
    create view CS_Student
    as
    select *
    from Student
    where Sdept='CS' ;
    
    //王平老师只能检索计算机系学生的信息
    grant select
    on CS_Student
    to 王平 ;
    
    //系主任具有检索和增删改计算机系学生信息的所有权限
    grant all privileges
    on CS_Student
    to 张明 ;

     

    4、审计

    前面的用户身份鉴别、存取控制是数据库安全保护的重要技术,但不是全部。为了使数据库管理系统达到一定的安全级别,还需要在其他方面提供相应的支持。审计功能就是数据库管理系统达到 C2 以上安全级别必不可少的一项指标

    任何系统的安全保护措施都不是完美无缺的,蓄意盗窃、破坏数据的人总是想方设法打破控制。审计功能把用户对数据库的所有操作自动记录下来放入审计日志中审计员可以利用审计日志监控数据库中的各种行为,重现导致数据库现有状况的一系列事件,找出非法存取数据的人、时间和内容等。还可以通过对审计日志分析,对潜在的威胁提前采取措施加以防范

    审计通常是很费时间和空间的,所以数据库管理系统往往都将审计设置为可选特征,允许数据库管理员根据具体应用对安全性的要求灵活地打开或关闭审计功能。审计功能主要用于安全性要求较高的部门

    可审计事件有服务器事件、系统权限、语句事件及模式对象事件,还包括用户鉴别,自主访问控制和强制访问控事件,换句话说,它能对普通和特权用户行为。各种表操作、身份鉴别、自主和强制访问控制等操作进行审计。它既能审计成功操作,也能审计失败操作。

    审计事件

    审计事件一般有多个类别,例如服务器事件(审计数据库服务器发生的事件,包含数据库服务器的启动、停止、数据库服务器配置文件的重新加载)、系统权限(对系统拥有的结构或模式对象进行操作的审计,要求该操作的权限是通过系统权限获得的)、语句事件(对 SQL 语句及 DCL 语句的审计)、模式对象事件(对特定模式对象上进行的 select 或 DML 操作的审计。模式对象包括表、视图、存储过程、函数等。模式对象不包括依附于表的索引、约束、触发器、分区表等)

    审计功能

    审计功能主要包括这几方面内容:基本功能(提供多种审计查阅方式:基本的、可选的、有限的,等等),提供多套审计规则(审计规则一般在数据库初始化时设定,以方便审计员管理),提供审计分析和报表功能,审计日志管理功能(包括为防止审计员误删审计记录,审计日志必须先转储后删除;对转储的审计记录文件提供完整性和保密性保护;只允许审计员查阅和转储审计记录,不允许任何用户新增和修改审计记录;等等),系统提供查询审计设置及审计记录信息的专门视图(对于系统权限级别、语句级别及模式对象级别的审计记录也可通过相关的系统表直接查看)。

    AUDIT语句和 NOAUDIT 语句

    AUDIT 语句用来设置审计功能,NOAUDIT 语句则取消审计功能

    审计一般可以分为用户级审计和系统审计。用户级审计是任何用户可设置的审计,主要是用户针对自己创建的数据库表或视图进行审计,记录所有用户对这些表或视图的一切成功和(或)不成功的访问要求以及各种类型的 SQL 操作。系统级审计只能由数据库管理员设置,用以检测成功或失败的登录要求、监测授权和收回操作以及其他数据库级权限下的操作

    举个例子:

    //对修改 SC 表结构或修改 SC 表数据的操作进行审计
    audit alter,update
    on SC ;
    
    //取消对 SC 表的一切审计
    noaudit alter,update
    on SC ;

    审计设置以及审计日志一般都存储在数据字典中必须把审计开关打开(即把系统参数 audit_trail 设为 true),才可以在系统表 SYS_AUDITTRAIL 中查看到审计信息。数据库安全审计系统提供了一种事后检查的安全机制。安全审计机制将特定用户或者特定对象相关的操作记录到系统审计日志中,作为后续对操作的查询分析和追踪的依据。通过审计机制,可以约束用户可能的恶意操作。

     

    5、数据加密

    数据加密是防止数据库数据在存储和传输中失密的有效手段。加密的基本思想是根据一定的算法将原始数据——明文变换为不可直接识别的格式——密文,从而使得不知道解密算法的人无法获知数据的内容

    数据加密主要包括存储加密和传输加密。、

    存储加密:

    对于存储加密,一般提供透明和非透明两种存储加密方式透明存储加密是内核级加密保护方式,对用户完全透明;非透明存储加密则是通过多个加密函数实现的

    透明存储加密是数据在写到磁盘时对数据进行加密,授权用户读取数据时再对其进行解密。由于数据加密对用户透明,数据库的应用程序不需要做任何修改,只需在创建表语句中说明需加密的字段即可。当对加密数据进行增、删、改、查询操作时,数据库管理系统将自动对数据进行加、解密工作。基于数据库内核的数据存储加密、解密方法性能较好,安全完备性较高

    传输加密:

    在客户/服务器结构中,数据库用户与服务器之间若采用明文方式传输数据,容易被网络恶意用户截获或篡改,存在安全隐患。因此,为保证二者之间的安全数据交换,数据库管理系统提供了传输加密功能。

    常用的传输加密方式如链路加密端到端加密。其中,链路加密对传输数据在链路层进行加密它的传输信息由报头报文两部分组成,前者是路有选择信息,而后者是传送的数据信息这种方式对报文和报头均加密。相对地,端到端加密对传输数据在发送端和接收端需要密码设备,而中间节点不需要密码设备,因此它所须密码设备数量相对较少,但这种方式不加密报头,从而容易被非法监听者发现并从中获取敏感信息。

    下面说一种基于安全套接层协议的数据库管理系统可信传输方案,采用的是一种端到端的传输加密方式。在这个方案中,通信双方协商建立可信连接,一次会话采用一个密钥传输数据在发送端加密,接收端解密,有效降低了重放攻击和恶意篡改的风险。此外,出于易用性考虑,这个方案的通信加密还对应用程序透明。它的实现思路包含以下三点:1)、确信通信双方端点的可靠性。数据库管理系统采用基于数字证书的服务器和客户端认证方式实现通信双方的可靠性确认。用户和服务器各自持有由知名数字证书认证中心或企业内建 CA 颁发的数字证书,双方在进行通信时均首先向对方提供己方证书,然后使用本地的 CA 信任列表和证书撤销列表对接收到的对方证书进行验证,以确保证书的合法性和有效性,进而保证对方确系通信的目的端。2)、协商加密算法和密钥。确认双方端点的可靠性后,通信双方协商本次会话的加密算法与密钥。在这个过程中,通信双方利用公钥基础设施方式保证了服务器和客户端的协商过程通信的安全可靠。3)、可信数据传输。在加密算法和密钥协商完成后,通信双方开始进行业务数据交换。与普通通信路径不同的是,这些业务数据在被发送之前将被用某一组特定的密钥进行加密和信息摘要计算,以密文形式在网络上传输。当业务数据被接受的时候,需用相同一组特定的密钥进行解密和摘要计算。所谓特定的密钥,是由先前通信双方磋商决定的,为且仅为双方共享,通常称之为会话密钥。第三方即使窃取传输密文,因无会话密钥也无法识别密文信息。一旦第三方对密文进行任何篡改,均将会被真实的接收方通过摘要算法识破。另外,会话密钥的生命周期仅限于本次通信,理论上每次通信所采用的会话密钥将不同,因此避免了使用固定密钥而引起的密钥存储类问题

    数据库加密使用已有的密码技术和算法对数据库中存储的数据和传输的数据进行保护。加密后数据的安全性能够进一步提高。即使攻击者获取数据源文件,也很难获取原始数据。但是,数据库加密增加了查询处理的复杂性,查询效率会受到影响。加密数据的密钥的管理和数据加密对应用程序的影响也是数据加密过程中需要考虑的问题。

     

    6、其他安全性保护

    为满足较高安全等级数据库管理系统的安全性保护要求,在自主存取控制和强制存取控制之外,还有推理控制以及数据库应用中隐蔽信道和数据隐私保护等技术。

    推理控制

    推理控制处理的是强制存取控制未解决的问题。例如,利用列的函数依赖关系,用户能从低安全等级信息推导出其无权访问的高安全等级信息,进而导致信息泄露。

    数据库推理控制用来避免用户利用其能够访问的数据推知更高密级的数据,即用户利用其被允许的多次查询的结果,结合相关的领域背景知识以及数据之间的约束,推导出其不能访问的数据。在推理控制方面,常用的方法如基于函数依赖的推理控制和基于敏感关联的推理控制等。

     

    隐蔽信道

    隐蔽通道处理内容也是强制存取控制未解决的问题。下面的例子就是利用未被强制存取控制的 SQL 执行后反馈的信息进行间接信息传递。

    通常,如果 insert 语句 对属性 unique 属性列写入重复值,则系统会报错且操作失败。那么针对 unique 约束列,高安全等级用户(发送者)可先向该列插入(或者不插入)数据,而低安全等级用户(接受者)向该列插入相同数据。如果插入失败,则表明发送者已向该列插入数据,此时二者约定发送者传输信息位为 0 ;如果插入成功,则表明发送者未向该列插入数据,此时二者约定发送者传输信息位为 1 。通过这种方式,高安全等级用户按事先约定方式主动向低安全等级用户传输信息,使得信息流从高安全等级向低安全等级流动,从而导致高安全等级敏感信息泄露。

     

    数据隐私保护

    数据隐私是控制不愿被他人知道或他人不便知道的个人数据能力。数据隐私范围很广,涉及数据管理中的数据收集、数据存储、数据处理和数据发布等各个阶段。例如,在数据存储阶段应避免非授权的用户访问个人的隐私数据。通常可以使用数据库安全技术实现这一阶段的隐私保护。如使用自主访问控制、强制访问控制和基于角色的访问控制以及数据加密等。

    在数据处理阶段,需要考虑数据推理带来的隐私数据泄露,非授权用户可能通过分析多次查询的结果,或者基于完整性约束信息,推导出其他用户的隐私数据。在数据发布阶段,应使包含隐私的数据发布结果满足特定的安全性标准,如发布的关系数据表首先不能包含原有表的候选码,同时还要考虑准标识符的影响。

    准标识符是能够唯一确定大部分记录的属性集合。在现有安全性标准中,K-匿名化标准要求每个具有相同准标识符的记录组中至少包括 k 条记录,从而控制攻击者判别隐私数据所属个体的概率。还有 1-多样化标准、t-临近标准等,从而使攻击者不能从发布数据中推导出额外的隐私数据。

    要想万无一失地保证数据库安全,使之避免遭到任何蓄意的破坏几乎是不可能的。但高度的安全措施将使蓄意的攻击者付出高昂的代价,从而迫使攻击者不得不放弃他们的破坏企图。

     

     

    更多相关内容
  • 分类中解决类别不平衡问题

    万次阅读 多人点赞 2018-05-11 22:19:31
    Many,简称MvM)策略后产生的二分类任务扔可能出现类别不平衡现象,因此有必要了解类别不平衡处理的基本方法。 2.解决类别不平衡问题 2.1欠采样方法 (1)什么是欠采样方法 直接对训练集中多数类样本进行“欠采样”...


    关注微信公众号【Microstrong】,我现在研究方向是机器学习、深度学习,分享我在学习过程中的读书笔记!一起来学习,一起来交流,一起来进步吧!

    本文同步更新在我的微信公众号里面,公众号文章地址:

    https://mp.weixin.qq.com/s?__biz=MzI5NDMzMjY1MA==&mid=2247484313&idx=1&sn=568015a62bf99ca5b6bd282b465244be&chksm=ec65321cdb12bb0a772814204ac5f48136c99f44a39ff34f5bde115ab5630948a40f747a39f0#rd

    本文同步更新在我的知乎专栏中:

    分类中解决类别不平衡问题 - Microstrong的文章 - 知乎https://zhuanlan.zhihu.com/p/36381828

    1.什么是类别不平衡问题

    如果不同类别的训练样例数目稍有差别,通常影响不大,但若差别很大,则会对学习过程造成困扰。例如有998个反例,但是正例只有2个,那么学习方法只需要返回一个永远将新样本预测为反例的学习器,就能达到99.8%的精度;然而这样的学习器往往没有价值,因为它不能预测出任何正例。

    类别不平衡(class-imbalance)就是指分类任务中不同类别的训练样例数目差别很大的情况。在现实的分类学习任务中,我们经常会遇到类别不平衡,例如在通过拆分法解决多分类问题时,即使原始问题中不同类别的训练样例数目相当,在使用OvR(一对其余,One vs. Rest,简称OvR)、MvM(多对多,Many vs. Many,简称MvM)策略后产生的二分类任务扔可能出现类别不平衡现象,因此有必要了解类别不平衡性处理的基本方法。

    2.解决类别不平衡问题

    2.1欠采样方法

    (1)什么是欠采样方法

    直接对训练集中多数类样本进行“欠采样”(undersampling),即去除一些多数类中的样本使得正例、反例数目接近,然后再进行学习。

    (2)随机欠采样方法

    随机欠采样顾名思义即从多数类中随机选择一些样样本组成样本集 。然后将样本集 中移除。新的数据集

    缺点:

    随机欠采样方法通过改变多数类样本比例以达到修改样本分布的目的,从而使样本分布较为均衡,但是这也存在一些问题。对于随机欠采样,由于采样的样本集合要少于原来的样本集合,因此会造成一些信息缺失,即将多数类样本删除有可能会导致分类器丢失有关多数类的重要信息。

    为了克服随机欠采样方法导致的信息缺失问题,又要保证算法表现出较好的不均衡数据分类性能,出现了欠采样法代表性的算法EasyEnsemble和BalanceCascade算法。

    (3)欠采样代表性算法-EasyEnsemble

    算法步骤:

    1)从多数类中有放回的随机采样n次,每次选取与少数类数目相近的样本个数,那么可以得到n个样本集合记作

    2)然后,将每一个多数类样本的子集与少数类样本合并并训练出一个模型,可以得到n个模型。

    3)最终将这些模型组合形成一个集成学习系统,最终的模型结果是这n个模型的平均值。

    图1:EasyEnsemble算法

    (4)欠采样代表性算法-BalanceCascade

    BalanceCascade算法基于Adaboost,将Adaboost作为基分类器,其核心思路是:

    1)在每一轮训练时都使用多数类与少数类数量相等的训练集,训练出一个Adaboost基分类器。

    2)然后使用该分类器对全体多数类进行预测,通过控制分类阈值来控制假正例率(False Positive Rate),将所有判断正确的类删除。

    3)最后,进入下一轮迭代中,继续降低多数类数量。

    图2:BalanceCascade算法

    扩展阅读:

    Liu X Y, Wu J, Zhou Z H. Exploratory undersampling for class-imbalance learning[J]. IEEE Transactions on Systems, Man, and Cybernetics, Part B (Cybernetics), 2009, 39(2): 539-550.

    这篇论文提出了两种欠采样的方法:EasyEnsemble和BalanceCascade。

    2.2过采样方法

    (1)什么是过采样方法

    对训练集里的少数类进行“过采样”(oversampling),即增加一些少数类样本使得正、反例数目接近,然后再进行学习。

    (2)随机过采样方法

    随机过采样是在少数类中随机选择一些样本,然后通过复制所选择的样本生成样本集,将它们添加到中来扩大原始数据集从而得到新的少数类集合。新的数据集

    缺点:

    对于随机过采样,由于需要对少数类样本进行复制来扩大数据集,造成模型训练复杂度加大。另一方面也容易造成模型的过拟合问题,因为随机过采样是简单的对初始样本进行复制采样,这就使得学习器学得的规则过于具体化,不利于学习器的泛化性能,造成过拟合问题。

    为了解决随机过采样中造成模型过拟合问题,又能保证实现数据集均衡的目的,出现了过采样法代表性的算法SMOTE和Borderline-SMOTE算法。

    (3)过采样代表性算法-SMOTE

    SMOTE全称是Synthetic Minority Oversampling即合成少数类过采样技术。SMOTE算法是对随机过采样方法的一个改进算法,由于随机过采样方法是直接对少数类进行重采用,会使训练集中有很多重复的样本,容易造成产生的模型过拟合问题。而SOMT算法的基本思想是对每个少数类样本,从它的最近邻中随机选择一个样本 是少数类中的一个样本),然后在 之间的连线上随机选择一点作为新合成的少数类样本。

    SMOTE算法合成新少数类样本的算法描述如下:

    1).对于少数类中的每一个样本,以欧氏距离为标准计算它到少数类样本集中所有样本的距离,得到其k近邻。

    2).根据样本不平衡比例设置一个采样比例以确定采样倍率N,对于每一个少数类样本,从其k近邻中随机选择若干个样本,假设选择的是

    3).对于每一个随机选出来的近邻,分别与按照如下公式构建新的样本。


    我们用图文表达的方式,再来描述一下SMOTE算法。

    1).先随机选定一个少数类样本

    2).找出这个少数类样本 x_{i} 的K个近邻(假设K=5),5个近邻已经被圈出。

    3).随机从这K个近邻中选出一个样本 \hat{x_{i}} (用绿色圈出来了)。

    4).在少数类样本 x_{i} 和被选中的这个近邻样本 \hat{x_{i}} 之间的连线上,随机找一点。这个点就是人工合成的新的样本点(绿色正号标出)。

    SMOTE算法摒弃了随机过采样复制样本的做法,可以防止随机过采样中容易过拟合的问题,实践证明此方法可以提高分类器的性能。但是SMOTE算法也存以下两个缺点:

    1)由于对每个少数类样本都生成新样本,因此容易发生生成样本重叠的问题。

    2)在SMOTE算法中,出现了过度泛化的问题,主要归结于产生合成样本的方法。特别是,SMOTE算法对于每个原少数类样本产生相同数量的合成数据样本,而没有考虑其邻近样本的分布特点,这就使得类间发生重复的可能性增大。

    解释缺点2)的原因:结合前面所述的SMOTE算法的原理,SMOTE算法产生新的人工少数类样本过程中,只是简单的在同类近邻之间插值,并没有考虑少数类样本周围多数类样本的分布情况。如3图所示,绿色正号1、2分布在多数类样本周围,它们离多数类样本最近,这就导致它们有可能被划分成多数类样本。因此从3图中可以看出,SMOTE算法的样本生成机制存在一定的盲目性。

    图3:SOMTE算法结果

    为了克服以上两点的限制,多种不同的自适应抽样方法相继被提出,其中具有代表性的算法包括Borderline-SMOTE算法。

    扩展阅读:

    Chawla N V, Bowyer K W, Hall L O, et al. SMOTE: synthetic minority over-sampling technique[J]. Journal of artificial intelligence research, 2002, 16: 321-357.

    这篇论文提出了SMOTE算法。

    (4)Borderline-SMOTE算法介绍

    对于Borderline-SMOTE算法最感兴趣的就是用于识别少数类种子样本的方法。在Borderline-SMOTE算法中,识别少数类种子样本的过程如下:

    1)首先,对于每个 ,确定一系列最近邻样本集,成该数据集为,且

    2)然后,对每个样本,判断出最近邻样本集中属于多数类样本的个数,即:

    3)最后,选择满足下面不等式的


    上面式子表明,只有最近邻样本集中多数类多于少数类的那些 才会被选中形成“危险集”(DANGER)。因此,DANGER集中的样本代表少数类样本的边界(最容易被错分的样本)。然后对DANGER集中使用SMOTE算法在边界附近产生人工合成少数类样本。

    我们可以看出,如果。 即: 的所有k个最近邻样本都属于多类。如4图所示的样本点C,我们就认为样本点C是噪声且它不能生成合成样本。

    图4:基于在边界上样本的数据建立

    通过上面的介绍,我们对Borderline-SMOTE算法有了一定的了解。为了让大家理解的更透彻这个算法,我再给大家画一个流程图,详细介绍一下。

    图5:Borderline-SMOTE算法流程图

    流程图5中,训练样本集为F,少数类样本

    1)步骤一:

    (i)计算少数类样本集中每一个样本在训练集F中的k个最近邻。

    (ii)然后,根据这k个最近邻对 中的样本进行归类:

    • 假设这k个最近邻都是多数类样本,则我们将该样本定义为噪声样本,将它放在集合中。
    • 反正k个最近邻都是少数类样本则该样本是远离分类边界的,将其放入S集合中。
    • 最后,K个最近邻即有多数类样本又有少数类样本,则认为是边界样本,放入B集合中。

    2)步骤二:

    (i)设边界样本集,计算B集合中的每一个样本,在少数类样本集中的K个最近邻,组成集合

    (ii)随机选出s(1<s<n)个最近邻。

    (iii)计算出它们各自与该样本之间的全部属性的差值

    (iv)然后乘以一个随机数 。如果 集合或S集合中的样本,则

    (v)最后生成的人工少数类样本为:

    3)步骤三:

    重复步骤2的过程,直到生成人工少数类样本的数目满足要求,达到均衡样本集的目的后结束算法。

    扩展阅读:

    Han H, Wang W Y, Mao B H. Borderline-SMOTE: a new over-sampling method in imbalanced data sets learning[C]//International Conference on Intelligent Computing. Springer, Berlin, Heidelberg, 2005: 878-887.

    这篇文章提出了Borderline-SMOTE算法。

    2.3代价敏感学习(cost-sensitive learning)

    (1)代价矩阵

    采样算法从数据层面解决不平衡数据的学习问题;在算法层面上解决不平衡数据学习的方法主要是基于代价敏感学习算法(Cost-Sensitive Learning)。

    在现实任务中常会遇到这样的情况:不同类型的错误所造成的后果不同。例如在医疗诊断中,错误地把患者诊断为健康人与错误地把健康人诊断为患者,看起来都是犯了“一次错误”,但是后者的影响是增加了进一步检查的麻烦,前者的后果却可能是丧失了拯救生命的最佳时机;再如,门禁系统错误地把可通行人员拦在门外,将使得用户体验不佳,但错误地把陌生人放进门内,则会造成严重的安全事故;在信用卡盗用检查中,将正常使用误认为是盗用,可能会使用户体验不佳,但是将盗用误认为是正常使用,会使用户承受巨大的损失。为了权衡不同类型错误所造成的不同损失,可为错误赋予“非均等代价”(unequal cost)。

    代价敏感学习方法的核心要素是代价矩阵,如表1所示。其中 表示将第类样本预测为第类样本的代价。一般来说, ;若将第0类判别为第1类所造成的损失更大,则 ;损失程度相差越大, 的值差别越大。当 相等时为代价不敏感的学习问题。

    表1:代价矩阵

    (2)代价敏感学习方法

    基于以上代价敏感矩阵的分析,代价敏感学习方法主要有以下三种实现方式,分别是:

    1).从学习模型出发,对某一具体学习方法的改造,使之能适应不平衡数据下的学习,研究者们针对不同的学习模型如感知机、支持向量机、决策树、神经网络等分别提出了其代价敏感的版本。以代价敏感的决策树为例,可以从三个方面对其进行改造以适应不平衡数据的学习,这三个方面分别是决策阈值的选择方面、分裂标准的选择方面、剪枝方面,这三个方面都可以将代价矩阵引入。

    2).从贝叶斯风险理论出发,把代价敏感学习看成是分类结果的一种后处理,按照传统方法学习到一个模型,以实现损失最小为目标对结果进行调整,优化公式如下所示。此方法的优点在于它可以不依赖所用的具体分类器,但是缺点也很明显,它要求分类器输出值为概率。


    3).从预处理的角度出发,将代价用于权重调整,使得分类器满足代价敏感的特性,下面讲解一种基于Adaboost的权重更新策略AdaCost算法。

    (3)AdaCost算法

    要想了解AdaCost算法,我们得先知道Adaboost算法,如图6所示。Adaboost算法通过反复迭代,每一轮迭代学习到一个分类器,并根据当前分类器的表现更新样本的权重,如图中红框所示,其更新策略为正确分类样本权重降低,错误分类样本权重增大,最终的模型是多次迭代模型的一个加权线性组合。分类越准确的分类器将会获得越大的权重。

    图6:Adaboost算法

    AdaCost算法修改了Adaboost算法的权重更新策略,其基本思想是对代价高的误分类样本大大地提高其权重,而对于代价高的正确分类样本适当地降低其权重,使其权重降低相对较小。总体思想是代价高样本权重增加得大降低的慢。其样本权重按照如下公式进行更新。其中 \beta_{-}和\beta_{+} 分别表示样本被正确和错误分类情况下的 \beta 的取值。


    2.4不平衡学习的评价方法

    (1)F1度量

    这一部分涉及到模型的评价方法,如果你还没有学习过,可以看我的公众号之前发的关于这部分文章。同时,我也把链接地址贴出来,供大家快速学习。

    【错误率、精度、查准率、查全率和F1度量】详细介绍

    ROC曲线和AUC面积理解

    表2:分类结果混淆矩阵

    例如在癌症预测的场景中,假设没有患癌症的样本为正例,患癌症的样本为反例,反例占的比例很少(大概0.1%),如果直接把分类器设置为预测都是正例,那么精度和查准率的值都是99.9%。可见精度、错误率和查准率都不能表示不平衡数据下的模型表现。而F1值则同时考虑了少数类的查准率和召回率,因此能衡量不平衡数据下模型的表现。


    (2)G-Mean

    G-Mean是另外一个指标,也能评价不平衡数据的模型表现,其计算公式如下。

    (3)ROC曲线和AUC面积

    我的这篇文章把ROC曲线和AUC面积分析的全面。ROC曲线和AUC面积可以很好的评价不平衡数据的模型表现。

    ROC曲线和AUC面积理解

    3.如何选择

    (1)在正负样本都非常少的情况下,应该采用数据合成的方式,例如:SMOTE算法和Borderline-SMOTE算法。

    (2)在正负样本都足够多且比例不是特别悬殊的情况下,应该考虑采样的方法或者是加权的方法。

    总结:

    本文主要介绍了分类中类别不均衡时学习中常用的算法及评价指标,算法主要从数据和模型两个层面介绍,数据层面的算法主要关于过采样和欠采样以及改进的算法,模型方面主要讲解了基于代价的敏感学习。评价指标主要讲解了F1度量、G-Mean和ROC曲线AUC面积。


    Reference:

    (1)Liu X Y, Wu J, Zhou Z H. Exploratory undersampling for class-imbalance learning[J]. IEEE Transactions on Systems, Man, and Cybernetics, Part B (Cybernetics), 2009, 39(2): 539-550.

    (2)Chawla N V, Bowyer K W, Hall L O, et al. SMOTE: synthetic minority over-sampling technique[J]. Journal of artificial intelligence research, 2002, 16: 321-357.

    (3)Han H, Wang W Y, Mao B H. Borderline-SMOTE: a new over-sampling method in imbalanced data sets learning[C]//International Conference on Intelligent Computing. Springer, Berlin, Heidelberg, 2005: 878-887.

    (4)EasyEnsemble和BalanceCascade论文下载地址:https://cs.nju.edu.cn/zhouzh/zhouzh.files/publication/tsmcb09.pdf

    (5)SMOTE算法期刊页面:https://www.jair.org/index.php/jair/article/view/10302

    (6)SMOTE算法论文下载地址:https://www.jair.org/index.php/jair/article/view/10302/24590

    (7)Borderline-SMOTE算法论文下载地址:http://sci2s.ugr.es/keel/keel-dataset/pdfs/2005-Han-LNCS.pdfhttp://

    (8)不均衡学习的抽样方法 - CSDN博客https://blog.csdn.net/u011414200/article/details/50664266

    (9)不平衡数据下的机器学习方法简介https://www.jianshu.com/p/3e8b9f2764c8

    (10)非平衡分类问题 | BalanceCascade方法及其Python实现https://zhuanlan.zhihu.com/p/36093594

    展开全文
  • [深度学习技巧]·数据类别不平衡问题处理

    千次阅读 多人点赞 2019-03-11 14:03:39
    数据类别不平衡问题处理 转载地址 1.什么是类别不平衡问题 如果不同类别的训练样例数目稍有差别,通常影响不大,但若差别很大,则会对学习过程造成困扰。例如有998个反例,但是正例只有2个,那么学习方法只需要...

    数据类别不平衡问题处理

    转载地址

    1.什么是类别不平衡问题

    如果不同类别的训练样例数目稍有差别,通常影响不大,但若差别很大,则会对学习过程造成困扰。例如有998个反例,但是正例只有2个,那么学习方法只需要返回一个永远将新样本预测为反例的学习器,就能达到99.8%的精度;然而这样的学习器往往没有价值,因为它不能预测出任何正例。

    类别不平衡(class-imbalance)就是指分类任务中不同类别的训练样例数目差别很大的情况。在现实的分类学习任务中,我们经常会遇到类别不平衡,例如在通过拆分法解决多分类问题时,即使原始问题中不同类别的训练样例数目相当,在使用OvR(一对其余,One vs. Rest,简称OvR)、MvM(多对多,Many vs. Many,简称MvM)策略后产生的二分类任务扔可能出现类别不平衡现象,因此有必要了解类别不平衡性处理的基本方法。

     

    2.解决类别不平衡问题

    2.1欠采样方法

    (1)什么是欠采样方法

    直接对训练集中多数类样本进行“欠采样”(undersampling),即去除一些多数类中的样本使得正例、反例数目接近,然后再进行学习。

    (2)随机欠采样方法

    随机欠采样顾名思义即从多数类中随机选择一些样样本组成样本集 。然后将样本集 中移除。新的数据集

    缺点:

    随机欠采样方法通过改变多数类样本比例以达到修改样本分布的目的,从而使样本分布较为均衡,但是这也存在一些问题。对于随机欠采样,由于采样的样本集合要少于原来的样本集合,因此会造成一些信息缺失,即将多数类样本删除有可能会导致分类器丢失有关多数类的重要信息。

    为了克服随机欠采样方法导致的信息缺失问题,又要保证算法表现出较好的不均衡数据分类性能,出现了欠采样法代表性的算法EasyEnsemble和BalanceCascade算法。

    (3)欠采样代表性算法-EasyEnsemble

    算法步骤:

    1)从多数类中有放回的随机采样n次,每次选取与少数类数目相近的样本个数,那么可以得到n个样本集合记作

    2)然后,将每一个多数类样本的子集与少数类样本合并并训练出一个模型,可以得到n个模型。

    3)最终将这些模型组合形成一个集成学习系统,最终的模型结果是这n个模型的平均值。

    图1:EasyEnsemble算法

    (4)欠采样代表性算法-BalanceCascade

    BalanceCascade算法基于Adaboost,将Adaboost作为基分类器,其核心思路是:

    1)在每一轮训练时都使用多数类与少数类数量相等的训练集,训练出一个Adaboost基分类器。

    2)然后使用该分类器对全体多数类进行预测,通过控制分类阈值来控制假正例率(False Positive Rate),将所有判断正确的类删除。

    3)最后,进入下一轮迭代中,继续降低多数类数量。

    图2:BalanceCascade算法

    扩展阅读

    Liu X Y, Wu J, Zhou Z H. Exploratory undersampling for class-imbalance learning[J]. IEEE Transactions on Systems, Man, and Cybernetics, Part B (Cybernetics), 2009, 39(2): 539-550.

    这篇论文提出了两种欠采样的方法:EasyEnsemble和BalanceCascade。

     

    2.2过采样方法

    (1)什么是过采样方法

    对训练集里的少数类进行“过采样”(oversampling),即增加一些少数类样本使得正、反例数目接近,然后再进行学习。

    (2)随机过采样方法

    随机过采样是在少数类中随机选择一些样本,然后通过复制所选择的样本生成样本集,将它们添加到中来扩大原始数据集从而得到新的少数类集合。新的数据集

    缺点:

    对于随机过采样,由于需要对少数类样本进行复制来扩大数据集,造成模型训练复杂度加大。另一方面也容易造成模型的过拟合问题,因为随机过采样是简单的对初始样本进行复制采样,这就使得学习器学得的规则过于具体化,不利于学习器的泛化性能,造成过拟合问题。

    为了解决随机过采样中造成模型过拟合问题,又能保证实现数据集均衡的目的,出现了过采样法代表性的算法SMOTE和Borderline-SMOTE算法。

    (3)过采样代表性算法-SMOTE

    SMOTE全称是Synthetic Minority Oversampling即合成少数类过采样技术。SMOTE算法是对随机过采样方法的一个改进算法,由于随机过采样方法是直接对少数类进行重采用,会使训练集中有很多重复的样本,容易造成产生的模型过拟合问题。而SOMT算法的基本思想是对每个少数类样本,从它的最近邻中随机选择一个样本 是少数类中的一个样本),然后在 之间的连线上随机选择一点作为新合成的少数类样本。

    SMOTE算法合成新少数类样本的算法描述如下:

    1).对于少数类中的每一个样本,以欧氏距离为标准计算它到少数类样本集中所有样本的距离,得到其k近邻。

    2).根据样本不平衡比例设置一个采样比例以确定采样倍率N,对于每一个少数类样本,从其k近邻中随机选择若干个样本,假设选择的是

    3).对于每一个随机选出来的近邻,分别与按照如下公式构建新的样本。

    我们用图文表达的方式,再来描述一下SMOTE算法。

    1).先随机选定一个少数类样本

    2).找出这个少数类样本 x_{i} 的K个近邻(假设K=5),5个近邻已经被圈出。

    3).随机从这K个近邻中选出一个样本 \hat{x_{i}} (用绿色圈出来了)。

    4).在少数类样本 x_{i} 和被选中的这个近邻样本 \hat{x_{i}} 之间的连线上,随机找一点。这个点就是人工合成的新的样本点(绿色正号标出)。

    SMOTE算法摒弃了随机过采样复制样本的做法,可以防止随机过采样中容易过拟合的问题,实践证明此方法可以提高分类器的性能。但是SMOTE算法也存以下两个缺点:

    1)由于对每个少数类样本都生成新样本,因此容易发生生成样本重叠的问题。

    2)在SMOTE算法中,出现了过度泛化的问题,主要归结于产生合成样本的方法。特别是,SMOTE算法对于每个原少数类样本产生相同数量的合成数据样本,而没有考虑其邻近样本的分布特点,这就使得类间发生重复的可能性增大。

    解释缺点2)的原因:结合前面所述的SMOTE算法的原理,SMOTE算法产生新的人工少数类样本过程中,只是简单的在同类近邻之间插值,并没有考虑少数类样本周围多数类样本的分布情况。如3图所示,绿色正号1、2分布在多数类样本周围,它们离多数类样本最近,这就导致它们有可能被划分成多数类样本。因此从3图中可以看出,SMOTE算法的样本生成机制存在一定的盲目性。

    图3:SOMTE算法结果

    为了克服以上两点的限制,多种不同的自适应抽样方法相继被提出,其中具有代表性的算法包括Borderline-SMOTE算法。

    扩展阅读:

    Chawla N V, Bowyer K W, Hall L O, et al. SMOTE: synthetic minority over-sampling technique[J]. Journal of artificial intelligence research, 2002, 16: 321-357.

    这篇论文提出了SMOTE算法。

    (4)Borderline-SMOTE算法介绍

    对于Borderline-SMOTE算法最感兴趣的就是用于识别少数类种子样本的方法。在Borderline-SMOTE算法中,识别少数类种子样本的过程如下:

    1)首先,对于每个 ,确定一系列最近邻样本集,成该数据集为,且

    2)然后,对每个样本,判断出最近邻样本集中属于多数类样本的个数,即:

    3)最后,选择满足下面不等式的

    上面式子表明,只有最近邻样本集中多数类多于少数类的那些 才会被选中形成“危险集”(DANGER)。因此,DANGER集中的样本代表少数类样本的边界(最容易被错分的样本)。然后对DANGER集中使用SMOTE算法在边界附近产生人工合成少数类样本。

    我们可以看出,如果。 即: 的所有k个最近邻样本都属于多类。如4图所示的样本点C,我们就认为样本点C是噪声且它不能生成合成样本。

    图4:基于在边界上样本的数据建立

    通过上面的介绍,我们对Borderline-SMOTE算法有了一定的了解。为了让大家理解的更透彻这个算法,我再给大家画一个流程图,详细介绍一下。

    图5:Borderline-SMOTE算法流程图

    流程图5中,训练样本集为F,少数类样本

    1)步骤一:

    (i)计算少数类样本集中每一个样本在训练集F中的k个最近邻。

    (ii)然后,根据这k个最近邻对 中的样本进行归类:

    • 假设这k个最近邻都是多数类样本,则我们将该样本定义为噪声样本,将它放在集合中。
    • 反正k个最近邻都是少数类样本则该样本是远离分类边界的,将其放入S集合中。
    • 最后,K个最近邻即有多数类样本又有少数类样本,则认为是边界样本,放入B集合中。

    2)步骤二:

    (i)设边界样本集,计算B集合中的每一个样本,在少数类样本集中的K个最近邻,组成集合

    (ii)随机选出s(1<s<n)个最近邻。

    (iii)计算出它们各自与该样本之间的全部属性的差值

    (iv)然后乘以一个随机数 。如果 集合或S集合中的样本,则

    (v)最后生成的人工少数类样本为:

    3)步骤三:

    重复步骤2的过程,直到生成人工少数类样本的数目满足要求,达到均衡样本集的目的后结束算法。

    扩展阅读:

    Han H, Wang W Y, Mao B H. Borderline-SMOTE: a new over-sampling method in imbalanced data sets learning[C]//International Conference on Intelligent Computing. Springer, Berlin, Heidelberg, 2005: 878-887.

    这篇文章提出了Borderline-SMOTE算法。

    2.3代价敏感学习(cost-sensitive learning)

    (1)代价矩阵

    采样算法从数据层面解决不平衡数据的学习问题;在算法层面上解决不平衡数据学习的方法主要是基于代价敏感学习算法(Cost-Sensitive Learning)。

    在现实任务中常会遇到这样的情况:不同类型的错误所造成的后果不同。例如在医疗诊断中,错误地把患者诊断为健康人与错误地把健康人诊断为患者,看起来都是犯了“一次错误”,但是后者的影响是增加了进一步检查的麻烦,前者的后果却可能是丧失了拯救生命的最佳时机;再如,门禁系统错误地把可通行人员拦在门外,将使得用户体验不佳,但错误地把陌生人放进门内,则会造成严重的安全事故;在信用卡盗用检查中,将正常使用误认为是盗用,可能会使用户体验不佳,但是将盗用误认为是正常使用,会使用户承受巨大的损失。为了权衡不同类型错误所造成的不同损失,可为错误赋予“非均等代价”(unequal cost)。

    代价敏感学习方法的核心要素是代价矩阵,如表1所示。其中 表示将第类样本预测为第类样本的代价。一般来说, ;若将第0类判别为第1类所造成的损失更大,则 ;损失程度相差越大, 的值差别越大。当 相等时为代价不敏感的学习问题。

    表1:代价矩阵

    (2)代价敏感学习方法

    基于以上代价敏感矩阵的分析,代价敏感学习方法主要有以下三种实现方式,分别是:

    1).从学习模型出发,对某一具体学习方法的改造,使之能适应不平衡数据下的学习,研究者们针对不同的学习模型如感知机、支持向量机、决策树、神经网络等分别提出了其代价敏感的版本。以代价敏感的决策树为例,可以从三个方面对其进行改造以适应不平衡数据的学习,这三个方面分别是决策阈值的选择方面、分裂标准的选择方面、剪枝方面,这三个方面都可以将代价矩阵引入。

    2).从贝叶斯风险理论出发,把代价敏感学习看成是分类结果的一种后处理,按照传统方法学习到一个模型,以实现损失最小为目标对结果进行调整,优化公式如下所示。此方法的优点在于它可以不依赖所用的具体分类器,但是缺点也很明显,它要求分类器输出值为概率。

    3).从预处理的角度出发,将代价用于权重调整,使得分类器满足代价敏感的特性,下面讲解一种基于Adaboost的权重更新策略AdaCost算法。

    (3)AdaCost算法

    要想了解AdaCost算法,我们得先知道Adaboost算法,如图6所示。Adaboost算法通过反复迭代,每一轮迭代学习到一个分类器,并根据当前分类器的表现更新样本的权重,如图中红框所示,其更新策略为正确分类样本权重降低,错误分类样本权重增大,最终的模型是多次迭代模型的一个加权线性组合。分类越准确的分类器将会获得越大的权重。

    图6:Adaboost算法

    AdaCost算法修改了Adaboost算法的权重更新策略,其基本思想是对代价高的误分类样本大大地提高其权重,而对于代价高的正确分类样本适当地降低其权重,使其权重降低相对较小。总体思想是代价高样本权重增加得大降低的慢。其样本权重按照如下公式进行更新。其中 \beta_{-}和\beta_{+} 分别表示样本被正确和错误分类情况下的 \beta 的取值。

     

    2.4不平衡学习的评价方法

    (1)F1度量

    这一部分涉及到模型的评价方法,如果你还没有学习过,可以看我的公众号之前发的关于这部分文章。同时,我也把链接地址贴出来,供大家快速学习。

    【错误率、精度、查准率、查全率和F1度量】详细介绍

    ROC曲线和AUC面积理解

    表2:分类结果混淆矩阵

    例如在癌症预测的场景中,假设没有患癌症的样本为正例,患癌症的样本为反例,反例占的比例很少(大概0.1%),如果直接把分类器设置为预测都是正例,那么精度和查准率的值都是99.9%。可见精度、错误率和查准率都不能表示不平衡数据下的模型表现。而F1值则同时考虑了少数类的查准率和召回率,因此能衡量不平衡数据下模型的表现。

     

    (2)G-Mean

    G-Mean是另外一个指标,也能评价不平衡数据的模型表现,其计算公式如下。

     

    (3)ROC曲线和AUC面积

    我的这篇文章把ROC曲线和AUC面积分析的全面。ROC曲线和AUC面积可以很好的评价不平衡数据的模型表现。

    ROC曲线和AUC面积理解

    3.如何选择

    (1)在正负样本都非常少的情况下,应该采用数据合成的方式,例如:SMOTE算法和Borderline-SMOTE算法。

    (2)在正负样本都足够多且比例不是特别悬殊的情况下,应该考虑采样的方法或者是加权的方法。

    总结:

    本文主要介绍了分类中类别不均衡时学习中常用的算法及评价指标,算法主要从数据和模型两个层面介绍,数据层面的算法主要关于过采样和欠采样以及改进的算法,模型方面主要讲解了基于代价的敏感学习。评价指标主要讲解了F1度量、G-Mean和ROC曲线AUC面积。

     

    Reference:

    (1)Liu X Y, Wu J, Zhou Z H. Exploratory undersampling for class-imbalance learning[J]. IEEE Transactions on Systems, Man, and Cybernetics, Part B (Cybernetics), 2009, 39(2): 539-550.

    (2)Chawla N V, Bowyer K W, Hall L O, et al. SMOTE: synthetic minority over-sampling technique[J]. Journal of artificial intelligence research, 2002, 16: 321-357.

    (3)Han H, Wang W Y, Mao B H. Borderline-SMOTE: a new over-sampling method in imbalanced data sets learning[C]//International Conference on Intelligent Computing. Springer, Berlin, Heidelberg, 2005: 878-887.

    (4)EasyEnsemble和BalanceCascade论文下载地址:https://cs.nju.edu.cn/zhouzh/zhouzh.files/publication/tsmcb09.pdf

    (5)SMOTE算法期刊页面:https://www.jair.org/index.php/jair/article/view/10302

    (6)SMOTE算法论文下载地址:https://www.jair.org/index.php/jair/article/view/10302/24590

    (7)Borderline-SMOTE算法论文下载地址:http://sci2s.ugr.es/keel/keel-dataset/pdfs/2005-Han-LNCS.pdfhttp://

    (8)不均衡学习的抽样方法 - CSDN博客https://blog.csdn.net/u011414200/article/details/50664266

    (9)不平衡数据下的机器学习方法简介https://www.jianshu.com/p/3e8b9f2764c8

    (10)非平衡分类问题 | BalanceCascade方法及其Python实现https://zhuanlan.zhihu.com/p/36093594

     

    展开全文
  • SQL语言与数据库完整性和安全性

    千次阅读 2020-05-22 22:15:52
    SQL语言与数据库完整性和安全性数据库完整性的概念及分类(1)什么是数据库完整性?(2)为什么会产生完整性问题?(3)怎样保证数据库完整性?(4)数据库完整性的分类利用SQL语言实现数据库的静态完整性(1)SQL语言支持的约束...

    这章内容是有点多。。差点写吐了🤮

    数据库完整性的概念及分类

    数据的完整性
    防止数据库中存在不符合语义的数据,也就是防止数据库中存在不正确的数据
    防范对象:不合语义的、不正确的数据
    数据的安全性
    保护数据库 防止恶意的破坏和非法的存取
    防范对象:非法用户和非法操作


    (1)什么是数据库完整性?

    数据库完整性(DB Integrity)是指DBMS应保证的DB的一种特性–在任何情
    况下的正确性、有效性和一致性
    广义完整性:语义完整性、并发控制、安全控制、DB故障恢复等
    狭义完整性:专指语义完整性,DBMS通常有专门的完整性管理机制与程
    序来处理语义完整性问题。(本讲专指语义完整性)

    关系模型中有完整性要求

     实体完整性
    实体完整性是对关系中的记录唯一性,也就是主键的约束。准确地说,实体完整性
    是指关系中的主属性值不能为Null且不能有相同值。定义表中的所有行能唯一的标
    识,一般用主键,唯一索引 unique关键字,及identity属性比如说我们的身份证号
    码,可以唯一标识一个人。
    
     参照完整性
    参照完整性是对关系数据库中建立关联关系的数据表间数据参照引用的约束,也就是
    对外键的约束。准确地说,参照完整性是指关系中的外键必须是另一个关系的主键有
    效值,或者是NULL。参考完整性维护表间数据的有效性,完整性,通常通过建立外部
    键联系另一表的主键实现,还可以用触发器来维护参考完整性
    
     用户自定义完整性
    用户定义完整性(User-defined Integrity)是对数据表中字段属性的约束,
    用户定义完整性规则(User-defined integrity)也称域完整性规则。包括字段
    的值域、字段的类型和字段的有效规则(如小数位数)等约束,是由确定关系结构时
    所定义的字段的属性决定的。如,百分制成绩的取值范围在0~100之间等。
    
    

    (2)为什么会产生完整性问题?

    不正当的数据库操作,如输入错误、操作失误、程序处理失误等

    数据库完整性管理的作用:
     防止和避免数据库中不合理数据的出现
     DBMS应尽可能地自动防止DB中语义不合理现象
     如DBMS不能自动防止,则需要应用程序员和用户在进行数据库操作时处处加以小心,每写一条SQL语句都要考虑是否符合语义完整性,这种工作负担是非常沉重的,因此应尽可能多地让DBMS来承担。

    (3)怎样保证数据库完整性?

     DBMS允许用户定义一些完整性约束规则(用SQL-DDL来定义)
     当有DB更新操作时,DBMS自动按照完整性约束条件进行检查,以确保更
    新操作符合语义完整性
    在这里插入图片描述

    完整性约束条件(或称完整性约束规则)的一般形式
    Integrity Constraint ::= ( O,P,A,R)
    √ O:数据集合:约束的对象?
    列、多列(元组)、元组集合
    √ P:谓词条件:什么样的约束?
    √A:触发条件:什么时候检查?
    √ R:响应动作:不满足时怎么办?

    (4)数据库完整性的分类

    按约束对象分类
    域完整性约束条件:
    施加于某一列上,对给定列上所要更新的某一候选值是否可以接受进行
    约束条件判断,这是孤立进行的

    关系完整性约束条件:
    施加于关系/table上,对给定table上所要更新的某一候选元组是否可
    以接受进行约束条件判断,或是对一个关系中的若干元组和另一个关系
    中的若干元组间的联系是否可以接受进行约束条件判断

    按约束来源分类
    结构约束:
    来自于模型的约束,例如函数依赖约束、主键约束(实体完整性)、外键
    约束(参照完整性),只关心数值相等与否、是否允许空值等;

    内容约束:
    来自于用户的约束,如用户自定义完整性,关心元组或属性的取值范
    围。例如Student表的Sage属性值在15岁至40岁之间等。
    在这里插入图片描述

    按约束状态分类
    静态约束:
    要求DB在任一时候均应满足的约束;例如Sage在任何时候都应满足大
    于0而小于150(假定人活最大年龄是150)。

    动态约束:
    要求DB从一状态变为另一状态时应满足的约束;例如工资只能升,不
    能降:工资可以是800元,也可以是1000元;可以从800元更改为1000
    元,但不能从1000元更改为800元。

    利用SQL语言实现数据库的静态完整性

    (1)SQL语言支持的约束类别

    静态约束:
    列完整性—域完整性约束
    表完整性–关系完整性约束

    动态约束:
    触发器
    在这里插入图片描述

    (2)SQL语言实现约束的方法-Create Table

    CreateTable有三种功能:定义关系模式、定义完整性约束和定义物理存储特性

     定义完整性约束条件:
    	列完整性
    	表完整性
    
       USE 数据库名 CREATE TABLE 表名 (列名 类型(大小) DEFAULT'默认值' CONSTRAINT 约束名 约束定义,
    
                                                             列名 类型(大小) DEFAULT'默认值' CONSTRAINT 约束名 约束定义,  
    
                                                             列名 类型(大小) DEFAULT'默认值' CONSTRAINT 约束名 约束定义,
    
                                                             ... ...);
    

    Col_constr列约束

    一种域约束类型,对单一列的值进行约束

    { NOT NULL | //列值非空
    [ CONSTRAINT constraintname ] //为约束命名,便于以后撤消
    { UNIQUE //列值是唯一
    | PRIMARY KEY //列为主键
    | CHECK (search_cond) //列值满足条件,条件只能使用列当前值
    | REFERENCES tablename [(colname) ]
    [ON DELETE { CASCADE | SET NULL } ] } }
    //引用另一表tablename的列colname的值,如有ON DELETE CASCADE 或ON DELETE SET
    NULL语句,则删除被引用表的某列值v 时,要将本表该列值为v 的记录删除或列值更新为
    null;缺省为无操作 。
    

    Col_constr列约束:只能应用在单一列上,其后面的约束如UNIQUE,
    PRIMARY KEY及search_cond只能是单一列唯一、单一列为主键、和单一列相关

    示例:
    在这里插入图片描述
    在这里插入图片描述

    table_constr表约束:
    一种关系约束类型,对多列或元组的值进行约束

    是应用在关系上,即对关系的多列或元组进行约束,列约束是其特例
    在这里插入图片描述

    示例:
    在这里插入图片描述


    check中的条件可以是Select-From-Where内任何Where后的语句,包含
    子查询。
    在这里插入图片描述


    Create Table中定义的表约束或列约束可以在以后根据需要进行撤消或追
    加。撤消或追加约束的语句是 Alter Table(不同系统可能有差异)
    在这里插入图片描述

    在这里插入图片描述

    (3)SQL语言实现约束的方法-断言

    一个断言就是一个谓词表达式,它表达了希望数据库总能满足的条件

    1.表约束和列约束就是一些特殊的断言

    2.SQL还提供了复杂条件表达的断言。其语法形式为:

    CREATE ASSERTION <assertion-name> CHECK <predicate>
    

    3.当一个断言创建后,系统将检测其有效性,并在每一次更新中测试更新是
    否违反该断言。

    4.断言测试增加了数据库维护的负担,要小心使用复杂的断言
    在这里插入图片描述

    利用SQL语言实现数据库的动态完整性

    触发器:Mysql–触发器

    数据库安全性的概念及分类

    (1)数据库安全性的概念

    数据库安全性是指DBMS应该保证的数据库的一种特性(机制或手段):免受
    非法、非授权用户的使用、泄漏、更改或破坏

    数据的安全级别: 绝密(Top Secret), 机密(Secret),可信(Confidential)
    和无分类(Unclassified)

    数据库系统DBS的安全级别:物理控制、网络控制、操作系统控制、
    DBMS控制

    (2)数据库安全性的分类

    DBMS的安全机制

    自主安全性机制:存取控制(AccessControl)
    通过权限在用户之间的传递,使用户自主管理数据库安全性

    强制安全性机制:
    通过对数据和用户强制分类,使得不同类别用户能够访问不同类
    别的数据

    推断控制机制:(可参阅相关文献)
    ① 防止通过历史信息,推断出不该被其知道的信息;
    ② 防止通过公开信息(通常是一些聚集信息)推断出私密信息(个体信
    息),通常在一些由个体数据构成的公共数据库中此问题尤为重要

    数据加密存储机制:(可参阅相关文献)
    通过加密、解密保护数据,密钥、加密/解密方法与传输

    (3)数据库管理员的责任和义务

    DBA的责任和义务
     熟悉相关的法规、政策,协助组织的决策者制定好相关的安全策略

     规划好安全控制保障措施,例如,系统安全级别、不同级别上的安全控制
    措施,对安全遭破坏的响应,

     划分好数据的安全级别以及用户的安全级别

     实施安全性控制:DBMS专门提供一个DBA账户,该账户是一个超级用户
    或称系统用户。DBA利用该账户的特权可以进行用户账户的创建以及权限授
    予和撤消、安全级别控制调整等

    数据库自主安全性机制

    (1)数据库自主安全性

    自主安全性机制:
    ①通常情况下,自主安全性是通过授权机制来实现的。

    ②用户在使用数据库前必须由DBA处获得一个账户,并由DBA授予该账户一
    定的权限,该账户的用户依据其所拥有的权限对数据库进行操作; 同时,该帐
    户用户也可将其所拥有的权利转授给其他的用户(账户),由此实现权限在用户
    之间的传播和控制。

     授权者:决定用户权利的人
     授权:授予用户访问的权利

    (2)DBMS怎样实现数据库自主安全性

    ①DBMS允许用户定义一些安全性控制规则(用SQL-DCL来定义)

    ② 当有DB访问操作时,DBMS自动按照安全性控制规则进行检查,检查通过
    则允许访问,不通过则不允许访问
    在这里插入图片描述

    (3)数据库自主安全性访问规则

    DBMS将权利和用户(账户)结合在一起,形成一个访问规则表,依据该规则
    表可以实现对数据库的安全性控制

    在这里插入图片描述

     { AccessRule}通常存放在数据字典或称系统目录中,构成了所有用
    户对DB的访问权利;
     用户多时,可以按用户组建立访问规则
     访问对象可大可小(目标粒度Object granularity):属性/字段、记录/元
    组、关系、数据库
     权利:包括创建、增、删、改、查等
     谓词:拥有权利需满足的条件


    示例:
    在这里插入图片描述

    (4)自主安全性的实现方式

    第1种:存储矩阵

    在这里插入图片描述

    第2种:视图

    在这里插入图片描述

    ============================

    利用SQL语言实现数据库自主安全性

    (1)SQL语言的用户与权利

    数据库安全性控制是属于DCL范畴


    授权机制—自主安全性;视图的运用

    关系级别(普通用户) <-- 账户级别(程序员用户) <-- 超级用户(DBA)

     (级别1)Select : 读(读DB, Table, Record, Attribute, … )
    
     (级别2)Modify : 更新
    	 Insert : 插入(插入新元组, … )
    	 Update : 更新(更新元组中的某些值, …)
    	 Delete : 删除(删除元组, …)
     
     (级别3)Create : 创建(创建表空间、模式、表、索引、视图等)
     	  Create : 创建
    	  Alter : 更新
    	  Drop : 删除
    

    级别高的权利自动包含级别低的权利。如某人拥有更新的权利,它也自动
    拥有读的权利。在有些DBMS中,将级别3的权利称为账户级别的权利,而将
    级别1和2称为关系级别的权利。

    (2)SQL-DCL的命令及其应用

    授权命令:

    2.授权
    grant privileges on dbname.tablename to 'username'@'host' identified by 'password' [with grant option]
     
    -- privileges:用户的操作权限,如SELECT , INSERT , UPDATE 等(具体详见下表),如果要授予所的权限,则使用all
    -- dbname:数据库名,tablename:表名,如果是所有表的话,则dbname.*
    -- with grant option:命令中不带这个,则,该用户username不能将权限授予其他人,反之,则可以
     
    /* 
    举个例子:
    grant selelct on test.* to 'lzh'@'localhost' identified by '123456';
    grant all on  *.* to 'lzh'@'%' with grant option;
    */
    

    示例:
    在这里插入图片描述


    收回授权命令

    4.撤销用户权限
     revoke privilege on dbname.tablename from 'username'@'host'
     
    -- privilege:同授权部分
    
    # 示例:revoke select on employee from UserB;
    

    安全性控制的其他简介

    (1)自主安全性的授权过程及其问题

    授权过程:

    第一步:DBA创建DB, 并为每一个用户创建一个账户
    <假定建立了五个用户:UserA, UserB, UserC, UserD, UserE>
    
    第二步:DBA授予某用户账户级别的权利
    <假定授予UserA>
    
    第三步:具有账户级别的用户可以创建基本表或视图, 他也自动成为该表或
    该视图的属主账户,拥有该表或该视图的所有访问 权利
    <假定UserA创建了Employee, 则UserA就是Employee表的属主账户>
    
    第四步:拥有属主账户的用户可以将其中的一部分权利授予另外的用户,该
    用户也可将权利进一步授权给其他的用户…
    <假定UserA将读权限授予UserB, 而userB又将其拥有的权限授予UserC,
    如此将权利不断传递下去。>
    
    

    在这里插入图片描述

    注意授权的传播范围:
    在这里插入图片描述


    在这里插入图片描述
    ① 当一个用户的权利被收回时,通过其传播给其他用户的权利也将被收回

    ②如果一个用户从多个用户处获得了授权,则当其中某一个用户收回授权时
    ,该用户可能仍保有权利。例如UserC从UserB和UserE处获得了授权,当
    UserB收回时,其还将保持UserE赋予其的权利。

    (2)强制安全性

    ①强制安全性通过对数据对象进行安全性分级
    绝密(Top Secret), 机密(Secret),可信(Confidential)和无分类(Unclassified)
    ② 同时对用户也进行上述的安全性分级
    ③从而强制实现不同级别用户访问不同级别数据的一种机制

    强制安全性机制的实现

    DBMS引入强制安全性机制, 可以通过扩展关系模式来实现
    	 关系模式: R(A1: D1, A2: D2, …, An:Dn)
    	 对属性和元组引入安全性分级特性或称分类特性
    	R(A1: D1, C1, A2: D2, C2…, An:Dn, Cn, TC
    	)
    		其中 C1,C2,…,Cn分别为属性D1,D2,…,Dn的安全分类特性; TC为元
    		组的分类特性
    

    这样, 关系中的每个元组, 都将扩展为带有安全分级的元组, 例如
    在这里插入图片描述

    展开全文
  • ①功能要求 ②硬件要求 ③软件要求 ④业务要求 ⑤安全性要求 ⑥测试要求 密码标准体系概要: 技术维 ①密码基础类②密码设施类③密码产品类④应用支撑类⑤密码应用类 ⑥密码检测类⑦密码管理类 管理维 ①团体...
  • 因此,我们要认清网络的脆弱和潜在威胁以及现实客观存在的各种安全问题隐患,并进行专业正确的企业网络信息安全维护。下面弘博创新小编为大家一一讲解哈~ 1.将安全策略、硬件及软件等方法结合起来,构成一个统一的...
  • yolov4训练自己的数据集实现安全帽佩戴检测

    万次阅读 多人点赞 2020-07-07 22:46:41
    本次用yolov4来实现人佩戴安全帽检测,若未佩戴安全帽则将人脸框出来,若佩戴安全帽,则将安全帽以及人脸框出来,多说无益,直接看效果吧!!! 效果还是不错的,那么接下来就跟我一起进入yolov4的实操吧!!! ...
  • 网络安全检测技术

    千次阅读 2022-01-16 21:18:34
    安全威胁是指所有能够对计算机网络信息系统的网络服务和网络信息的机密,可用和完整产生阻碍,破坏或中断的各种因素。安全威胁可分为人为安全威胁和非人为安全威胁两大类。 1,网络安全漏洞威胁 漏洞分析的...
  • 什么是预测确定,为什么您要关心它? 确定的两个来源是什么? 如何使用CatBoost梯度提升库估算回归问题的确定 什么是确定? 机器学习已广泛应用于一系列任务。但是,在某些高风险应用中,例如自动...
  • 非常感谢举办方让我们学到了新知识,DataCon也是我比较喜欢和推荐的大数据安全比赛,这篇文章2020年10月就进了我的草稿箱,但由于小珞珞刚出生,所以今天才发表,希望对您有所帮助!感恩同行,负青春。
  • 常见六大Web安全问题

    千次阅读 2021-11-26 17:36:41
    一、 XSS ...XSS 的原理是恶意攻击者往 Web 页面里插入恶意可执行网页脚本代码,当用户浏览该页之时,嵌入其中 Web 里面的脚本代码会被执行,从而可以达到攻击者盗取用户信息或其他侵犯用户安全隐私
  • 企业信息安全不能大意,提早防范容易中招——推荐导入ISO27001系列标准
  • 计算机网络安全(一)

    千次阅读 多人点赞 2021-09-25 23:07:52
    随着计算机技术和信息技术的不断发展,互联网、通信网、计算机...在计算机网络发展面临重大机遇的同时,网络安全形式也日益严峻,国家政治、经济、文化、社会、国防安全及公民在网络空间的合法权益面临着风险和挑战。
  • 最新的详细测试 https://www.cnblogs.com/shangxiaofei/p/10465031.html ... String 字符串常量 StringBuffer 字符串变量(线程安全) StringBuilder 字符串变量(非线程安全) 简要的说, String 类型...
  • 《娜璋带你读论文》系列主要是督促自己...这篇文章将详细介绍和总结基于溯源图的APT攻击检测安全顶会内容,花了作者一个多月时间。希望这篇文章对您有所帮助,这些大佬是真的值得我们去学习,献上小弟的膝盖~fighting!
  • java 线程安全不安全

    万次阅读 2016-07-24 11:30:41
    线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程能进行访问直到该线程读取完,其他线程才可使用。不会出现数据一致或者数据污染。(Vector,HashTab;le) 线程...
  • 网络安全协议(三)--基本安全协议

    千次阅读 2020-10-02 17:36:39
    安全协议 是建立在密码体制基础上的一种...安全协议的目标分为认证、非否认、可追究、公平四种,其中,认证应用最为广泛和重要。 安全协议的分类 根据参与者以及密码算法的使用情况进行分类,可以分为七类:
  • 题库来源:安全生产模拟考试一点通公众号小程序 2022年道路运输企业安全生产管理人员试题是道路运输企业安全生产管理人员国家题库模拟预测卷!2022道路运输企业安全生产管理人员复训题库及答案根据道路运输企业安全...
  • 应用程序安全测试工具的4个实践

    千次阅读 2021-12-30 13:45:40
    对于没有真正安全开发生命周期的公司,动态应用程序安全测试工具是一个很好的起点。应用程序安全测试工具扫描正在运行的应用程序是否存在漏洞,重点是审查Web应用程序。 启动一项通过动态分析更好地保护软件的计划...
  • 《信息保障和安全》第五章

    千次阅读 2021-11-07 16:11:55
    第五章 操作系统安全目录5.1 安全操作系统概述5.1.1 定义及术语5.1.2 安全操作系统5.2 安全策略与安全模型5.2.1 安全策略5.2.2 安全模型 目录 5.1 安全操作系统概述 5.1.1 定义及术语 可信计算基(Trusted Computing...
  • 本节主要介绍密码学的发展简况、密码学的基本概念以及密码系统的安全性分析方法。 3.1.1密码学发展简况 密码学是一门研究信息安全保护的科学,以实现信息的保密性、完整性、 可用性及抗抵性。密码学主要由密码编码和...
  • 安全测试(初测)报告

    千次阅读 2021-10-13 11:20:32
    安全测试(初测)报告 系统名称 版本号 V1.0 送测单位 送测时间 20XX年XX月XX日 复测时间 XXXX...
  • 线程安全与线程不安全的理解

    千次阅读 2016-06-21 20:14:57
    线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程能进行访问直到该线程读取完,其他线程才可使用。不会出现数据一致或者数据污染。 线程不安全就是提供数据...
  • OWASP和OWASP十大漏洞有助于保护您的代码免受软件安全漏洞的影响。在这里,我们将分别阐述OWASP的介绍内容以及OWASP十大漏洞的详细内容。
  • 一定全,一定正确,根据网络查询自用整理。 英文 简称 中文 定义 Access Control Decision Function ADF 访问控制判决功能 Access Control Decision Information ADI 访问控制判决信息 Access ...
  • 简介 ...本文还介绍如何检索有关个别事件的更具说明数据。 适用于:Windows Server 2008 R2 DatacenterWindows Server 2008 R2 EnterpriseWindows Server 2008 R2 StandardWindows 7 EnterpriseW.
  • 1、大数据机遇和网络安全挑战 大数据是近年来非常热的一个话题,目前IT科学问题基本三年为一个周期,但是大数据据预计会有6~9年的话题周期,因为云计算话题从成熟到应用,已经走过约八九年的历程。 大数据分析...
  • 车联网网络安全技术研究

    千次阅读 2022-01-20 20:50:29
    文章从车端安全、通信安全、平台安全以及移动应用安全等角度,梳理了车联网安全的技术要求,并总结了当前汽车网络安全领域的最新研究成果,为今后的车联网安全研究提供基础。 前言 作为智能交通系统快速发展...
  • 信息安全发展的三个阶段:通信保密,信息安全,信息保障 Wind River的安全专家则针对IoT设备安全提出了如下建议: 安全启动 设备首次开机时,理应采用数字证书对运行的系统和软件作认证; 访问控制 采用不同...
  • 安全开发】IOS安全编码规范

    千次阅读 2018-11-30 15:47:00
    不安全的通信的一般风险存在在于数据的完整、数据的保密和数据来源的完整等方面。如果数据在传递过程中是可以改变的,且在信息传递过程中没有检测到发生的变化(如:通过中间人攻击),那么这就是这种风险的一...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 49,388
精华内容 19,755
关键字:

安全性类别不正确