数据库-安全

https://blog.csdn.net/lxw983520/article/details/80375716

一、安全性概述

 

数据库的安全性是指保护数据库以防止不合法使用所造成的数据泄露、更改或损坏。系统安全保护措施是否有效是数据库系统的主要技术指标之一。

 

 

 

1、数据库的不安全因素

 

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

措施:包括用户身份鉴别、存取控制和视图等技术。

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

措施:强制存取控制、数据加密存储和加密传输等。

3)安全环境的脆弱性

措施:加强计算机系统的安全性保证,建立完善的可信标准(安全标准)。

 

 

 

2、安全标准简介

 

安全标准比较有影响力的有:

1)TCSEC(桔皮书):1985年美国国防部(DoD)正式颁布的《DoD可信计算机系统评估标准》。

2)CC:1993年联合行动,解决原标准中概念和技术上的差异,将各自独立的准则合成一组单一的、能被广泛使用的IT暗转准则,这一行动被称为通用准则(CC)项目。CC v2.1版于1999年被ISO采用为国际标准,2001年我国采用为国家标准。

目前,CC已经取代TCSEC称为评估信息产品安全性的主要标准。

安全级别可分为:   D < C2 < C1 < B3 < B2 < B1 < A1

其中C2级的数据库管理系统支持自主存取控制(DAC),B1级的数据库管理系统支持强制存取控制(MAC)。

 

 

 

二、安全控制

 

计算机系统的安全模型:

 

数据库管理系统安全性控制模型:

 

 

 

1、用户身份鉴别

 

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

用户身份鉴别的方法:

 

 

静态口令鉴别

目前常用的鉴别方法,相当于设置用户的密码。

优缺点:简单,容易被攻击,安全性较低。

动态口令鉴别

口令是动态变化的,登陆系统前就会获取新口令,相当于短信验证码或者动态令牌。

优缺点:增加口令被窃取或破解的难度,安全性相对高一些。

生物特征鉴别

采用图像处理和模式识别等技术,相当于指纹识别或者脸部识别。

优缺点:产生质的飞跃,安全性较高。

智能卡识别

智能卡是一种不可复制的硬件,内置集成电路的芯片,具有硬件加密功能。实际应用中一般采用个人身份识别码(PIN)和智能卡相结合的方式。

 

 

 

 

2、存取控制

 

 

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

 

 

存取控制机制主要包括定义用户权限,并将用户权限登记到数据字典中和合法权限检查。两者机制一起组成数据库管理系统的存取控制子系统。

 

 

 

3、自主存取控制方法

 

自主存取控制方法主要通过SQL的GRANT语句和REVOKE语句来实现。

用户权限是由数据库对象和操作类型组成的。定义一个用户的存取权限就是要定义这个用户在那些数据库对象上可以进行那些类型的操作,即定义存取权限(授权)。

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

关系数据库存取权限表

 

备注:在授予用户列INSERT权限时,一定要包含主码的INSERT权限,否则用户的插入动作会因为主码为空而被拒绝。

 

 

 

4、授权:授予与收回

 

SQL中使用GRANT(授予权限)和REVOKE(收回已授予的权限)语句向用户授予或收回对数据的操作权限。

 

 

(1)GRANT

语句:GTANT <权限>[,<权限>]…  ON<对象类型><对象名>[,<对象类型><对象名>]…TO<用户>[,<用户>]…[WITH GRANT OPTION];

例句:GRANT SELECT(权限) ON TABLE SC(表名)  TO USER(用户名);

语义:将对指定操作对象的指定操作权限授予指定的用户。可以由数据库管理员、数据库对象创建者(属主owner),也可以是已经用于该权限的用户。接受权限的用户可以是一个或多个具体用户,也可以是全体用户(PUBLIC)。WITN GTANT OPTION就是获得某种权限的用户还可以将权限授予其他用户,如果没有就代表只能使用该权限,不能传播。

 

 

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

 

(2)REVOKE

语句:REVOKE <权限>[,<权限>]…ON<对象类型><对象名>[,<对象类型><对象名>]…FROM<用户>[,<用户>…[CASCADE|RESTRICT];

例句:REVOKE SELECT(权限) ON TABLE SC(表名) FROM USER(用户名);

备注:使用该语句的为数据库管理员或其他授权者

这里默认为CASCADE,就是没有自动执行级联操作,只是收回了该用户的权限,该用户授予的其他用户的权限保留,如果使用RESTRICT就是收回该用户以及该用户授予权限的用户的权限。

总结: 用户可以“自主”地决定将数据的存取权限授予何人,决定是否也将“授权”的权限授予别人,这样的存取控制就是自主存取控制。

(3)创建数据库模式的权限

对创建数据库模式一类的数据库对象的授权由数据库管理员在创建用户时实现。

语句:CREATE  USER  [WITH][DBA|RESOURCE|CONNECT];

说明:权限与可执行的操作对照表

 

**备注:**CREATE USER语句不是SQL标准,不同的关系数据库管理系统的语法和内容是有差别的。

 

 

5、数据库角色

 

数据库角色是被命名的一组与数据库操作相关的权限,角色是权限的集合。可以为一组具有相同权限的用户创建一个角色,使用角色来管理数据库权限可以简化授权的过程。

 

 

(1)角色的创建

CREATE ROLE <角色名>;

(2)给角色授权

GRANT <权限>[,<权限>]… ON <对象类型>对象名 TO<角色>[,<角色>]…

(3)将一个角色授予其他的角色或用户

(4)GRANT <角色1>[,<角色2>]…TO <角色3>[,<用户1>]…[WITH ADMIN OPRION];

指定了WITN ADMIN OPTION子句,则获得某种权限的角色或用户还可以把这种权限再授予其他的角色,角色3拥有角色1和角色2的所有权限。一个角色包含的权限包括直接授予这个角色的全部权限加上其他角色授予这个角色的全部权限。

(5)角色权限的收回

REVOKE <权限>[,<权限>]… ON<对象类型><对象名>FROM <角色>[,<角色>]…

用户可以回收角色的权限,从而修改角色拥有的权限。

示例:

CREATE ROLE R1;         创建角色

GRANT SELECT ON TABLE SC;       授权

GTANT T1 TO USER;                           授权用户

REVOKE R1 FROM USER;                回收权限

 

 

 

 

6、强制存取控制方法

 

自主存取控制(MAC)能够通过授权机制有效地控制对敏感数据的存取,但是由于用户对数据的存取权限是自主的,可以自由授权,这样会导致安全性降低,因此需要对系统控制下的所有主客体实施强制存取控制策略。

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

在强制存取控制中,数据库管理系统所管理的全部实体被分为主体和客体两大类。

1. 主体是系统中的活动实体,既包含数据库管理系统所管理的实际用户,也包含代表用户的各进程。

2. 客体是系统中的被动实体,是受主体操纵的,包括文件、基本表、索引、视图等。

数据库管理系统为主体和客体每个实例(值)指派一个敏感标记(label)。label分为绝密(TS)>=机密(S)>=可信(C)>=公开(P)。主体的敏感度标记称为许可证级别,客体的敏感度标记称为密级。强制存取控制机制就是通过对比主体的敏感度标记和客体的敏感度标记,最终确定主体是否能够存取客体。

当某一用户(或某一主体)以标记label注册入系统时,系统要求他对任何客体的存取要遵循:

1)仅当主体的许可证级别大于或等于客体的密级时,该主才能读取相应的客体。

2)仅当主体的许可证级别小于或等于客体的密级时,该主体才能写相应的客体。

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

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

https://blog.csdn.net/dev_csdn/article/details/78275444

数据库安全的5个基本实践

译者注:现在已经进入到大数据时代,因此数据和数据库安全比以往任何时候都更加珍贵。如何确保组织机构和用户数据的安全性和可靠性是每个人都得掌握的一项技能。以下为译文。

一旦数据发生泄露,那么付出的代价将是非常惨痛的。由于数据泄露而导致的业务中断、客户信心丧失、法律成本、监管罚款,或者是由于类似于蠕虫病毒攻击造成的直接损失,这些后果可能需要花费数百万。俗话说得好,最好的防守就是发起进攻,所以让我们来学习以下五个关键实践,以确保数据库的安全:保护、审计、管理、更新和加密。

1.使用代理保护数据库免受攻击

数据库代理(或网关代理)位于应用程序和数据库之间,接受来自应用程序的连接请求,然后代表这些应用程序连接到数据库。智能数据库代理(如我们自己使用的MaxScale)提供了过滤器和加载模块,以提供安全性、可靠性、可伸缩性和性能优势。

MaxScale数据库防火墙过滤器通过过滤器解析发起的查询,如果发送过来的查询不符合已经提前设置的查询类型的白名单,那么过滤器就会自动阻止。例如,给定的连接只能执行更新和插入,而另一个连接必须匹配某些正则表达式,等等。

像MaxScale这样的代理也可以保护数据库不受DDoS的攻击:当过多的连接直接进入到数据库服务器时,它就会超载。但是代理会吸收一些负载来限制这种攻击的影响。

2.建立审计和健壮的日志记录

审计和日志记录是紧密相连的,但是审计日志比一般日志要复杂得多。审计日志给用户提供了调查可疑活动所需要的全部信息,如果确实做过违反规则的操作,还可以根据审计日志进行根源分析。此外,审计日志有助于确保遵守诸如GDPR、PCI、HIPPA和SOX等规则。(学习更多关于用MariaDB TX处理GDPR的信息)

MariaDB审计插件可以记录大量信息:所有传入的连接、所有执行的查询,甚至所有单个表的访问记录。用户可以看到谁在给定的时间访问了一个表,以及谁执行了插入或删除数据的操作。审计插件可以记录到文件或syslog,因此如果已经有了依赖于syslog的工作流,那么就可以直接将其绑定到这些文件中。

3.实行严格的用户帐户管理

严格管理数据库用户帐户是非常重要的。无论对于IT生态系统的哪个方面来说,这都是一条正确的规则,因此我们不会在这里详细说明。相反,我们将简单地提醒您用户帐户管理的几个关键方面:

  • 只允许超级管理员从本地客户端进行访问。
  • 坚持使用强密码。
  • 每个应用程序都有单独的数据库用户。
  • 限制可以访问数据库服务器的IP地址的数量。

4.保证数据库软件和操作系统是最新的

我们都知道让软件处于最新版本的原因,但还是有很多人会去运行遗留的操作系统以及旧版本的数据库服务器。我们时刻都要谨记,只有将版本保持为最新版本这才是保护数据不受那些最新威胁的唯一方法。

这不仅适用于服务器软件,也适用于操作系统。毕竟,Windows操作系统安全补丁的应用不太好,这也间接导致了蠕虫病毒的攻击成为了可能。

5.加密敏感数据,无论是在应用程序中,还是在数据传输中,甚至处于空闲时

许多组织机构都会对加密进行简短的处理,但这么做却很有价值。毕竟,如果他们能在平时的工作中能够发现密码会被破解,那么这就会降低黑客入侵的概率。

加密的第一阶段是在应用程序里面,此时数据还未到达数据库。如果数据在应用程序中就已经被加密了,那么破坏数据库的黑客就看不出数据是什么(不过,这只适用于没有密钥的数据)。

接下来是传输过程中的数据加密。这意味着当数据从客户端移动到数据库服务器(或在代理服务器上)时,数据在网络上加密。这与在web浏览器中使用HTTPS基本相同。显然,服务器可以看到这些信息,因为它需要读取用户填写的表单,用户也可以读取信息,因为是他们填写的表单,但在用户和服务器之间没有人能够读取它。

最后,我们讲一下数据库处于空闲时的数据加密。你可以使用它来加密InnoDB表空间、InnoDB redo日志以及二进制日志。这意味着你可以在MariaDB服务器上中加密几乎所有被写入光盘的东西。

相关推荐