数据库安全性概述

数据库的安全性是指对数据库系统进行综合保护,防止不合法使用所造成的数据泄露、更改或破坏。对数据库安全性产生威胁的因素有:

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

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

(3)计算机硬件、操作系统、网络系统等IT环境的安全保障不足。从数据安全考虑,数据库管理系统需提供安全技术措施来提高数据库中数据的安全性。

瀚高安全版数据库的安全特性

瀚高安全版数据库系统拥有多层安全防护机制,能够从三权分立、强制访问控制、FDE、身份鉴别、安全审计、国密算法等多个维度保障数据库的访问安全及数据的存储安全。

以下主要介绍三权分立和强制访问控制两种安全特性。

#三权分立

所谓权限分立,就是根据权限的功能不同,划分为不同的角色,归属到不同的用户上,使之能够互相限制和监督,从而有效保证系统的整体安全。瀚高安全版数据库系统 具有相互独立、相互制约的数据管理员、安全保密管理员和安全审计员三个管理员角色,对于三个管理员的权限及普通用户的权限按照数据库对象进行了严格的权限划分,形成了完整安全的权限矩阵。

数据管理员主要负责安创建数据库对象、数据库的备份和恢复(表级)。安全保密管理员主要负责用户权限设定(包含自主访问权限的分配)、安全策略配置管理、用户和表的安全标记配置。安全审计员主要负责对普通用户、系统管理员、安全审计员和安全保密管理员的操作行为进行审计。

三权账号的生成

数据库系统在初始化时即建立三权用户sysdba、syssso、syssao并设置密码,如下图所示:

瀚高数据库mysql语法 瀚高数据库版本_安全

用户检查权限

1.分别使用三个用户创建新用户,只有sysdba可以创建用户成功:

瀚高数据库mysql语法 瀚高数据库版本_瀚高数据库mysql语法_02

2.分别使用三个账号查看安全策略,只有syssso账号可以查看:

瀚高数据库mysql语法 瀚高数据库版本_安全_03

3.审计管理员功能验证,审计管理员主要负责相关参数配置,以及对系统审计日志进行审查分析:

瀚高数据库mysql语法 瀚高数据库版本_强制访问控制_04

#强制访问控制

瀚高安全版数据库系统支持标记和强制访问控制,保护用户数据,防止非法窃取。强制访问控制(Mandatory Access Control—MAC)与自主访问相比,MAC提供更严格和灵活的控制方式。MAC首先为所控制的主体和客体指派安全标记,然后依据这些标记进行访问仲裁,只有主体标记能支配客体标记时才允许主体访问。

标记是由等级和范围构成,并且标记是可以比较的,其比较结果的含义是代表了数据的敏感程度。如果赋予用户某些标记,然后给数据再赋予标记,这样,将用户的标记和数据的标记进行比较,按照一定规则来决定用户是否可以对数据进行访问。安全标记为特定格式的字符串,如“s0:c0.c1023”,由安全级别(敏感度)和安全类别(类别)组成。敏感度范围为s0s15,共16个级别,类别范围为c0c1023,共1024个类别。其中敏感度s0~s15的安全级别为递进关系,而类别之间并没有级别高低之分。一个安全标记可拥有多个类别并使用逗号分隔,如果多个安全类别是连续的则只显示第一个和最后一个中间用英文句号分隔,例如s0:c0.c1023:表示安全级别为s0,安全类别为包含c0到c1023全部类别的集合。
查看主客体安全标记
(1)确认开启了强访问控制功能

使用syssso登录数据库,查看安全参数:

psql -U syssso -d highgo
select show_secure_param();

瀚高数据库mysql语法 瀚高数据库版本_安全_05

hg_macontrol:强制访问控制功能开关,默认on,开启强制访问控制;参数值为 min,表示强访功能最小化,即只有自主访问控制功能。参数值重启生效。此参数受hg_sepofpowers三权分立开关限制,若三权功能关闭,此参数设置不生效。

hg_rowsecure:行级强制访问功能开关。该参数只在hg_macontrol为on时生效。参数值为on|off,on为开启行级访问控制,off为关闭行级访问控制,开启表级访问控制。默认为off。参数值重启生效。

(2)准备测试对象

create user test1 password 'Aa123456@';
create table t1(t_id int,name varchar);

瀚高数据库mysql语法 瀚高数据库版本_oracle_06

(3)查看主客体安全标记

使用syssso查看用户的安全标记:

\c highgo syssso
select * from hg_user_seclabel;
syssso通过sysdba的oid查看sysdba的安全标记
select oid from pg_roles where rolname='test1';
select get_user_seclabel(16394);

使用syssso查看表的安全标记:

select * from pg_seclabel;
select get_table_seclabel(16395);

瀚高数据库mysql语法 瀚高数据库版本_数据库_07

设置主客体安全标记

使用syssso账号设置t1表的安全标记为:s2:c0.c1023;

select set_table_seclabel(16395,'s2:c0.c1023');

瀚高数据库mysql语法 瀚高数据库版本_强制访问控制_08

访问控制验证

用户test安全标记为s0:c0.c1023,级别比表t1安全标记s2:c0.c1023级别低,用户安全标记不可支配表安全标记:

瀚高数据库mysql语法 瀚高数据库版本_安全_09

此时用户test1查询t1表报错:

瀚高数据库mysql语法 瀚高数据库版本_瀚高数据库mysql语法_10

强制访问控制用于将系统中的信息分密级和类进行管理,以保证每个用户只能访问到那些被标明可以由他访问的信息的一种访问约束机制。在强制访问控制下,用户(或其他主体)与元组(或其他客体)都被标记了固定的安全属性(如安全级、访问权限等),在每次访问发生时,系统检测安全属性以便确定一个用户是否有权访问该元组。