一、数据库安全性能
数据库安全性,是指爱护数据库以避免不非法操作应用,造成的数据泄露、更改或者毁坏。零碎保护措施是否无效,是数据库系统的次要技术指标之一。
数据库相干的平安性能,次要包含用户身份甄别、多层访问控制、审计和数据加密等技术。上面是数据库安全爱护的一个访问控制流程图:
1. 用户身份甄别
用户身份甄别是数据库管理系统提供的最外层平安保护措施。每个用户在零碎中都有一个惟一的用户标识,由用户名和用户标识号(UID)两局部组成,其中 UID 在零碎的整个生命周期内是惟一的。
数据库外部记录着所有非法用户的标识,零碎甄别则是指由数据库提供肯定的形式让用户标识本人的名字或身份。每次用户拜访数据库时,都由零碎进行核查,通过鉴定后才提供应用数据库管理系统的权限。用户身份甄别的办法有很多种,而且在一个零碎中往往是多种办法相结合,以取得更强的安全性。罕用的用户身份鉴别方法有以下几种:
动态口令甄别:
这种形式是以后罕用的鉴别方法。动态口令个别由用户本人设定,甄别时只有按要求输出正确的口令,零碎将容许用户应用数据库管理系统。这些口令是动态不变的,很容易被破解,而一旦被破解,非法用户就能够假冒该用户应用数据库。因而这种办法尽管简略,但容易被攻打,安全性较低。
动静口令甄别:
它是目前较为平安的甄别形式。这种形式的口令是动态变化的,每次甄别时均应用动静产生的新口令登录数据库管理系统,即采纳一次一密的办法,罕用的形式如短信明码和动静令牌形式。与动态口令甄别相比,这种认证形式减少了口令被窃取或破解的难度,安全性绝对高一些。
生物特色甄别:
它是一种通过生物特色进行认证的技术,其中,生物特色是指生物体惟一具备的,可测量、辨认和验证的稳固生物特色,如指纹、虹膜和掌纹等。这种形式通过采纳图像处理和模式识别等技术实现了基于生物特色的认证,与传统的口令甄别相比,无疑产生了质的飞越,安全性较高。
智能卡甄别:
智能卡是一种不可复制的硬件,内置集成电路的芯片,具备硬件加密性能。智能卡由用户随身携带,登录数据库管理系统时用户将智能卡插入专用的读卡器进行身份验证。因为每次从智能卡中读取的数据是动态的,通过内存扫描或网络监听等技术还是可能截取到用户的身份验证信息,存在安全隐患。因而理论利用中个别采纳个人身份识别码(PIN)和智能卡相结合的形式。
2. 访问控制
数据库安全最重要的一点就是确保只受权给有资格的用户拜访数据库的权限,同时令所有未被受权的人员无奈靠近数据,这次要通过数据库系统的访问控制机制实现。数据库系统个别提供两种访问控制机制,别离是自主访问控制和强制访问控制。
2.1 自主访问控制(Discretionary Access Control——DAC)
自主访问控制也就是常提到的权限管制,用户对于不同的数据库对象有不同的读写权限,不同的用户对同一对象也有不同的权限,且用户可将本身领有的读写权限转授给其余用户。因而自主访问控制灵活性较高。权限管制通过 GRANT 语句向用户受权,REVOKE 语句撤销权限。
2.2 强制访问控制(Mandatory Access Control——MAC)
自主访问控制 (DAC) 可能通过受权机制无效地管制对敏感数据的读写。然而因为用户对数据的读写限是“自主”的,用户能够自在地决定将数据的读写权限授予何人,以及决定是否也将受权能力授予他人。但在这种受权机制下,可能存在数据的“无心泄露”。
在强制访问控制中,数据库管理系统所治理的全副实体被分为主体和客体两大类。主体是零碎中的流动实体,既包含数据库管理系统所治理的理论用户,也包含代表用户的各过程。客体是零碎中的被动实体,是受主体操纵的,包含文件、根本表、索引、视图等。对于主体和客体,数据库管理系统为它们每个实例指派一个敏感度标记。
主体的敏感度标记称为许可证级别,客体的敏感度标记称为密级。对于任意一个数据库对象,只有具备非法许可证的用户才能够读写。强制访问控制机制就是通过比照主体的敏感度标记和客体的敏感度标记,来确定主体是否可能操作客体。
拜访规定个别基于以下两种读写规定,别离是保密性规定和完整性规定:
保密性规定
· 仅当主体的许可证级别高于或者等于客体的密级时,该主体能力读取相应的客体。(下读)
· 仅当主体的许可证级别低于或者等于客体的密级时,该主体能力写相应的客体。(上写)
完整性规定
· 仅当主体的许可证级别低于或者等于客体的密级时,该主体能力读取相应的客体。(上读)
· 仅当主体的许可证级别高于或者等于客体的密级时,该主体能力写相应的客体。(下写)
自主访问控制与强制访问控制独特形成数据库管理系统的平安机制,零碎首先进行自主访问控制查看,对通过自主访问控制查看的容许读写的数据库对象再由零碎主动进行强制访问控制查看,只有两者都通过查看的主体,能力拜访数据库对象。
3. 审计
数据库审计是对数据库操作行为进行监管的零碎,会实时记录数据库流动,把用户对数据库的所有操作自动记录下来放入审计日志中。审计员能够利用审计日志监控数据库中的各种行为,在产生数据库安全事件后,找出非法读写数据的人、工夫和内容等,为追溯、复原、追责、定责提供根据。
对于针对数据库的攻打和危险操作等进行实时告警,以便管理人员及时作出应答措施,从而防止数据被毁坏或者窃取。如果发现数据库入侵行为、数据库异样行为、数据库违规拜访行为,即可通过短信、邮件、Syslog 等多种形式实时告警。
同时,能够对用户拜访数据库行为的记录进行剖析,依据需要造成不同的审计报表,如综合报表、合规性报表、专项报表、自定义报表等。
4. 入侵检测
SQL 注入是比拟常见的网络攻击形式之一,web 应用程序对用户输出数据的合法性没有判断或过滤不严,攻击者能够在 web 应用程序中当时定义好的查问语句的结尾增加额定的 SQL 语句,在管理员不知情的状况下实现非法操作,以此来实现坑骗数据库服务器执行非受权的任意语句,从而进一步失去相应的数据信息,非法拜访造成数据泄露。
5. 数据加密
数据加密将数据库中的数据,尤其是敏感数据,以加密的形式进行存储,是避免数据库数据在存储和传输中泄露的无效伎俩。加密的根本思维是依据肯定的算法将原始明文数据变换为不可间接辨认的密文格局,从而使得不晓得解密密钥的人无奈获知数据的内容。
对于存储加密,个别提供通明存储加密形式。通明存储加密是数据库内核级加密保护方式,对用户齐全通明。而非通明存储加密则是通过提供加密函数实现的。
数据库通明加密技术是针对关系型数据库窃密需要应运而生的一种数据库加密技术。所谓通明,是指对用户来说无需更改现有的利用零碎和操作习惯。当用户通过应用程序拜访数据库时,失去的是明文数据,而未受权的用户通过非法手段拜访数据库失去的都是密文数据。数据在应用程序中是明文,在数据库中是密文。一旦来到应用环境,因为应用程序无奈失去主动解密的服务而无奈关上,从而起到爱护数据库中数据的成果。
与通明加密绝对应的,是在利用零碎中对数据进行加密,而后再存储到数据库中;须要实在数据的时候,再从数据库中读取密文,再解密出明文。用户能够自由选择须要加密的敏感信息,以及加密形式,而不是全副数据都加密。这样只对局部数据加密能够进步数据库访问速度,有利于用户在效率与安全性之间进行自主抉择。
6. 推理管制
推理管制解决的是强制访问控制未解决的问题。例如,用户利用列的函数依赖关系,从低安全等级信息推导出其无权拜访的高安全等级信息,进而导致信息泄露。
数据库推理管制用来防止用户利用其可能拜访的数据推知更高密级的数据,即用户利用其被容许的屡次查问的后果,联合相干的畛域背景常识以及数据之间的束缚,推导出其不能拜访的数据。在推理管制方面,罕用的办法有基于函数依赖的推理管制和基于敏感关联的推理管制等。
在《GB/T 20273-2019 信息安全技术 数据库管理系统平安技术要求》中,平安性能不再要求提供推理管制。
二、云溪数据库的平安性能和实现
1. 登录认证
1.1 证书认证
数字证书是指在传输通信中标记各方身份信息的一个数字认证,是由电子商务认证核心(简称为 CA 核心)所颁发的一种较为权威与公正的证书,用来辨认对方的身份。同时,能够通过证书将传输的信息和数据进行加密解密等解决,保障了信息的完整性和安全性。
云溪数据库能够通过 znbase cert 命令创立 CA 证书和密钥,再创立由 CA 证书签名的节点和客户端证书。当节点之间建立联系,或者客户端与节点建立联系时,它们应用 CA 证书来验证彼此的身份。
1.2 口令认证
为爱护用户信息,数据库系统不间接将用户明文口令存储在数据库外部,而是存储口令进行加密后失去的密文,加密形式个别采取不可逆的摘要算法。
摘要算法是一种把任意长度的输出通过哈希而产生长度固定的输入的算法,次要特色是加密过程不须要密钥,并且通过加密的数据无奈被解密,只有输出雷同的明文数据通过雷同的音讯摘要算法能力失去雷同的密文。
为减少明码破解难度,个别会在口令加密时,采取加盐措施,即在明文口令中退出额定信息,再进行哈希运算。校验时取出盐值,盐跟明文口令进行雷同的哈希运算操作,将失去的后果跟保留在数据库外部中的密文进行比照。
目前,云溪数据库反对 BCRYPT、SM3、PBKDF2,三种加密算法。
下图为 BCRYPT 算法加密后失去的密文,其中蕴含了哈希次数、盐值和哈希值。
1.3 客户端认证
客户端认证用来设置容许拜访的 IP 地址,以及拜访的认证形式,通过集群参数 server.host_based_authentication.configuration 设置,格局与 PostgreSQL 的 pg_hba.conf 配置文件统一。
每条记录指定一种连贯类型、一个客户端 IP 地址范畴(如果和连贯类型相干)、一个数据库名、一个用户名以及对匹配这些参数的连贯应用的认证办法。第一条匹配连贯类型、客户端地址、连贯申请的数据库和用户名的记录将被用于执行认证。
以后反对的认证形式有:
cert 仅用于通过 SSL 连贯的基于证书的身份验证
cert-password 容许通过 SSL 连贯进行基于证书或基于明码的身份验证
password 通过 SSL 连贯进行基于明码的身份验证
trust 无条件地容许匹配的连贯
reject 无条件地回绝匹配的连贯
留神,不能在非 SSL 连贯上定义认证规定。非 SSL 连贯仅在非平安模式运行的数据库上才能够应用。而在非平安模式下,所有认证逻辑齐全生效。
2. 权限管制
上述表格为云溪数据库中已有的数据库对象,及其对应的权限类型。
用户的权限信息由三局部组成:用户、对象和权限类型,在各数据库对象的 Descriptor 下的 PrivilegeDescriptor 中,寄存着用户权限信息。构造如下图所示。
用户通过 GRANT/REVOKE 语句进行权限治理操作,能够把本人领有的权限(需领有受权能力,即 grantable 为 true)授予给其余用户。留神不能循环受权,如下图所示,循环受权会导致级联撤销权限时,无奈跟踪权限起源。用户只能将本人授予的权限撤销,而不能撤销其余用户授予的权限。同时,撤销权限时,会将授予进来的权限级联撤销。如图中 u1 撤销授予给 u2 的权限时,u2 授予 u3 和 u3 授予 u4 的该权限,都会被撤销。
在进行用户的权限查看时,以检查表的权限为例,会先查看是否能拜访到该表,即查看 database 和 schema 上的 USAGE 权限,再查看在该表上是否有对应权限。如果是列权限的话(SELECT, INSERT, UPDATE),还会查看对应列上的权限。
权限查看会查看三局部的权限(即用户的权限来源于三局部):(1)查看该用户是否是该对象的 Owner;(2)查看该用户是否有对应权限;(3)查看该用户所属的角色是否有对应权限。
数据库对象 Owner, 是数据库对象的拥有者,默认为数据库对象的创建者,领有该对象的所有权限,目前暂不反对更改 Owner。在下图所示的可更新视图的 INSERT 操作中,用户在 INSERT 可更新视图时,会查看该用户是否有视图的 INSERT 权限,及该视图的 Owner 是否有表的 INSERT 权限。
3. 审计
目前已审计操作行为,蕴含大部分的 DDL 和 DCL 操作,具体操作类型详见《云溪 NewSQL 分布式数据库用户手册》第 7.5 章平安审计。
在关上审计开关,数据库就会将对应的操作信息,记录到审计记录表和审计日志中,记录信息包含用户信息、操作工夫、事件类型、被拜访资源的名称、拜访后果等。而表级的 DQL、DML 操作,则须要应用 ALTER TABLE table_name EXPERIMENTAL_AUDIT SET READ WRITE 语句,关上该表的审计开关。
因为 DQL、DML 操作频繁,将所有表的读写操作都主动审计,会生成大量审计记录,因而由用户自主管制须要审计的表。
同时,审计反对邮件告警性能,在触发对应操作的告警规定后,会向事后设置好的邮箱中发送相干邮件。对于该邮件告警零碎,有时不须要将每一个事件都退出邮件告警的范畴中,此时能够应用禁用事件设置对无需告警的操作加以疏忽。例如,SET CLUSTER SETTING audit.event.disable.list=”drop_database,drop_table”;
此外,为了满足用户对 SQL 语句长度进行限度的需要,审计模块中增加了无关 SQL 长度限度的性能,可通过 audit.sql.length 设置容许的最大 SQL 语句长度。
4. SQL 拦挡
云溪数据库通过对用户输出进行词法剖析生成指纹规定,而后通过二分查找算法,在特色库中进行匹配,匹配到则报 SQL 注入破绽。
SQL 拦挡性能,由 audit.sql.inject.bypass.enabled 参数管制,用于设置是否绕过 SQL 注入拦挡性能。值为 true 时,绕过 SQL 注入拦挡性能,不对执行的 SQL 语句进行 SQL 注入检测及拦挡;值为 false 时,启用 SQL 注入拦挡性能。默认值为 true。
在执行一条有 SQL 注入可能的语句时,如:SELECT (1 OR ( SELECT * FROM test)); 则会报出谬误:sql with fingerprint of ‘E(1&(‘。