摘要:数据库安全管理是以保护数据库系统中的数据为目的,防止数据被泄露、篡改、破坏的行为发生。数据库系统存储这各类重要、敏感的数据,同时作为多用户的系统,要求为不同权限的用户提供不同的服务。在本文中我们将会谈及数据库中采用的基本安全管理技术,包括访问控制、用户管理、权限管理、对象权限、CTS审计。
定义:数据库安全管理
是指保护数据免受授权的访问,防止重要信息泄露;避免因为硬件或者软件的错误导致数据的损失,避免误操作带来的损失。
说明:针对有意和无意的损害行为,GaussDB主要有以下几个安全防御措施:
说明:统一身份认证是华为云提供权限服务管理的基础服务,可以帮助用户安全地控制华为云服务和资源的访问权限。IAM可以进行这样一个简单的理解:一个华为云账号购买了华为云产品,但是在一个公司中不可能大家要使用这个产品都去登录这个账号,故通过IAM可以在该账号下开多个子账号,子账号的权限由华为云的账号来控制。
说明:IAM提供的主要功能包括:精细的权限管理、安全访问、二次认证、通过用户组批量管理用户权限、区域内资源隔离、联合身份认证、委托其他账号或者云服务管理资源、设置账号安全策略。
精细的权限管理:使用IAM,我们可以将华为云账号的资源按需分配给创建的IAM子用户,实现精细的权限管理。例如控制用户CCharlie能管理项目B的VPC,而让用户James只能查看项目B中的VPC的数据。
安全访问:可以使用IAM为用户或者应用程序生成身份凭证,不必与其他人员共享账号密码,系统会通过身份凭证中携带的权限信息允许用户安全地访问账号中的资源。
敏感操作:IAM提供敏感操作保护功能,包括登录保护和操作保护,在登录控制台或者进行敏感操作时,系统将要求进行邮箱/手机/虚拟机MFA的验证码的第二次认证,为账号和资源提供更高的安全保护。
通过用户组批量管理用户权限:不需要为单个用户进行单独的授权,只需规划用户组,并将对应权限授予用户组,然后将用户添加至用户组中,用户就继承了用户组的权限。如果用户权限变更,只需在用户组中删除用户或将用户添加进其他用户组,实现快捷的用户授权。
区域内资源隔离:可以通过在区域中创建子项目的功能,使得同区域下的各项目之间的资源相互隔离。
联合身份认证:如果已经有自己的身份认证系统,则不需要在华为云中重新创建用户,可以通过身份提供商功能直接访问华为云,实现单点登录。
委托其他账号或者云服务管理资源:通过委托信任功能,可以将自己的操作权限委托给更专业、更高效的其他华为云账号或者云服务,这些账号或者云服务可以根据权限代替您进行日常工作。
设置账号安全策略:通过设置登录验证策略、密码策略及访问控制列表来提高用户信息和系统数据的安全性。
最终一致性:最终一致性是指您在IAM进行的操作,如创建用户和用户组,给用户组授权等,由于IAM通过在华为云数据中心的各个服务器之间赋值数据、实现多区域的数据同步时,可能导致已提交的修改延迟生效。所以建议在操作前,确认已提交的策略修改已经生效。
说明:IAM为华为云其他服务器提供认证和授权功能;在IAM中创建的用户,经过授权后可以根据权限使用系统中的其他服务器。IAM的支持的所有服务权限,对于不支持使用IAM授权的服务,账号中创建的IAM用户无法使用该服务,请使用账号登录使用该服务。
说明:如果需要对华为云账号下所拥有的的云数据库GaussDB进行精确的权限管理,可以使用统一身份认证服务,也就是IAM。通过IAM我们可以:
步骤:
定义:安全套接子层(Secure Sockets Layer,SSL)是网络通信提供安全以及数据完整性的安全协议
必要性:
工作原理:SSL采用了对称加密算法
和非对称加密算法
。其中对称加密算法指的是加密和解密使用相同的秘钥,特点是算法公开、加解密速度快、效率高;非对称加密算法包含两个秘钥:公钥和私钥,公钥和私钥是一对,加密和解密使用不同的秘钥,特点是算法复杂度高、安全性更强、性能较对称加密差。
在SSL握手阶段,使用非对称加密算法协商会话秘钥;而在加密通道建立后,使用对称加密算法对传输数据进行加解密。
说明:权限是执行某些特定SQL语句的能力以及访问或维护某一特定对象的能力。我们可以通过授予GuassDB(for MySQL)账户的权限来决定用户可以执行的操作;GuassDB权限在它们适用的上下文和不同从操作级别上有所不同:
管理权限
使用户管理GuassDB(for MySQL)服务器的操作,在这一块可能大家理解的障碍是:这些权限是全局的,而非针对于某个单独的数据库;换而言之,我们可以理解为用户管理是针对于GuassDB(for MySQL)这个服务的,而不是管理GuassDB(for MySQL)里的对象。数据库权限
。数据库权限适用于数据库及其数据库下的所有对象,我们可以为特定数据库或全局授予这些权限,以便它们适用于所有的数据库。GaussDB服务器通过权限表来控制用户对数据库的访问,权限表存放在GaussDB数据库中,初始化数据库时会初始化这个权限表。
我们再次总结一下,实际上GuassDB的权限十分强大,大到整个服务器做权限控制,小到针对于服务器中的某个数据库对象做权限控制,而上面之所以谈到这么多,无非是为了区别系统权限
和对象权限
的区分。
说明:和MySQL一样,权限表也存在于某个数据库中;GaussDB(FOR MySQL)系统数据库包括几个权限表,这些权限表包含有关用户账户
和其他权限的信息。下面列举几个常见的权限表:
权限表 | 权限说明 |
---|---|
user | 用户账户、静态全局权限和其他非权限列 |
global_grants | 动态全局权限 |
db | 数据库级权限 |
tables_priv | 表级权限 |
columns_priv | 列级权限 |
procs_priv | 存储过程和函数权限 |
说明:既然要进行用户权限控制,那就一定要存在用户。数据库用户的主要用途是:
在连接数据库的时候,我们必须使用一个已经存在的数据库用户,并且一个用户可以建立多个连接。在没有创建用户的情况下,系统为我们创建了一个预置用户,我们也可以理解为管理员root。
我们可以使用create user
来创建一个用户,需要注意的是,root可以创建一切用户,但使用普通用户创建用户时,需要注意该普通用户是否具有创建用户的权限,并且创建用户时需要同时指定用户名和密码;另外,root是不允许被创建的。
演示:
# 创建用户,密码必须大于等于八个字符,且必须用单引号括起
create user username identified by password;
# 修改用户,其中username为要修改的用户名,newpassword是新密码
alter user username identified by newpassword;
# 删除用户
dorp user [if exists] username;
说明:角色是一组命名的权限集合。我们可以这么理解,如果每次都给用户赋予一系列的权限多麻烦,直接将常用的一组权限定义为变量,每次需要使用这些权限时直接让用户使用该变量即可,那这一切就变得清晰简单起来。这个变量,就是角色。
意义:一个数据库可能有多个用户需要访问,为了管理方便,可以先将权限分组,并授予给角色。对于不同权限级别的用户,可以将对应的角色授予用户,相当于批量授予用户需要的权限,而不需要逐个授予权限。
易混:我们说过,用户是某种身份来登录数据库,而角色是某些权限的集合。所以千万不要把这两者概念弄混。
演示:
# 创建角色,其中rolename为角色名,但角色名不能和用户名重复
create role rolename
# 删除角色,删除角色后那些拥有删除角色的用户上的角色会被清除
drop role rolename
说明:用户可以通过定义角色来将一系列的权限封装在一起;角色可以赋予用户或其他其他角色,则用户或其他角色拥有了此角色的所有权限;既然角色可以将自身赋予其他角色,说明角色之间还存在继承关系。
说明:授权是将权限或角色授予给用户或其他角色,同MySQL一样,使用grant语句可以授予权限。
提示:权限和角色的授予都要遵循最小化使用原则。也就是说,当你赋予权限或角色的范围足够用就行,不要故意把范围扩大。同样地,在不使用权限和角色的时候,我们需要及时回收。
# 授权,其中with grant option可以使得权限再次授权给其他用户或角色
grant 权限名 on 数据库对象 to 被授予的用户或角色 [with grant option];
# 角色授予
grant 角色名 to 被授予的用户或角色 [with grant option];
# 权限回收
revoke 权限名 on 权限范围 from 被收回权限的数据库对象名;
# 角色回收
revoke 角色名from 被收回角色的数据库对象名;
说明:云审计服务是华为云安全解决方案中专业的日志审计服务,提供对各种云资源操作记录的收集、存储和查询功能,可用于支撑安全分析、合规审计、资源跟踪和问题定位等常见应用场景。
我们来稍微提下下它的过程:用于对云资源的所有操作,都会产生一系列的事件,而这些事件会上报给CTS,感觉上就像是一种特殊大的日志。CTS可以将所有发生的事件转储到OBS桶中,而后通过CTS对OBS桶中存储的事件进行查看。
说明:我们可以将5.4.1中提到的内容将CTS的功能总结为四点:
说明:云审计服务必须手动开启,我们可以登录华为云后进入控制台,在服务列表中选择云审计服务,进入云审计服务信息页面后开启云审计服务。
开启云审计服务后,我们可以看到,事件列表支持通过四个维度的筛选来查询对应的操作事件。