GaussDB安全配置建议
GaussDB 安全配置建议
安全性是华为云与用户的共同责任。华为云负责云服务自身的安全,提供安全的云。作为租户,需要合理使用云服务提供的安全能力对数据进行保护,安全地使用云。以下提供了 GaussDB 使用过程中的安全配置建议,旨在为提高整体安全能力提供可操作的规范性指导。根据该指导文档可以持续评估 GaussDB 的安全状态,更好地组合使用 GaussDB 提供的多种安全能力,提高对 GaussDB 的整体安全防御能力,保护存储在 GaussDB 的数据不泄露、不被篡改,以及数据传输过程中不泄露、不被篡改。可以从以下几个维度进行评估,并根据业务需要在本指导的基础上进行安全配置。
安全认证配置
为了保证用户体验,同时为了防止账户被人通过暴力破解,GaussDB 设置了账户登录重试次数及失败后自动解锁时间的保护措施,GaussDB 针对账户提供了以下能力:
-
failed_login_attempts
:允许用户设置最大登录失败次数。 -
password_lock_time
:此参数允许用户修改账户被锁定后自动解锁时间,单位为天。
若管理员发现某账户被盗、非法访问等异常情况,可手动锁定该账户。当管理员认为账户恢复正常后,可手动解锁该账户。例如手动锁定账户joe
的 SQL 语句为:
gaussdb=# ALTER USER joe ACCOUNT LOCK;
ALTER ROLE
手动解锁时使用ALTER ROLE
语句。
用户密码的安全策略
GaussDB 为了客户账号的安全,对用户密码进行了以下设置:
-
用户密码存储在系统表
pg_authid
中,为防止用户密码泄露,GaussDB 对用户密码进行加密存储,所采用的加密算法由配置参数password_encryption_type
决定。 -
GaussDB 数据库用户的密码都有密码有效期,可以通过参数
password_notify_time
提醒客户修改密码,如果需要修改密码有效期,可以通过修改password_effect_time
来更改。
权限管理
虚拟私有云可以为 GaussDB 实例构建隔离的、用户自主配置和管理的虚拟网络环境。子网提供与其他网络隔离的、可以独享的网络资源,以提高网络安全性,可以使用 IAM(Identity and Access Management,身份与访问管理)为企业中的员工设置不同的访问权限,以达到不同员工之间的权限隔离,通过 IAM 进行精细的权限管理。在使用数据库实例之前务必先设置安全组,保障数据库的安全性和稳定性。
为防止PUBLIC
拥有CREATE
权限,导致数据库任何账户都可以在PUBLIC
模式下创建表或者其他数据库对象,其他用户也可以修改这些数据,可以使用如下 SQL 语句来查询:
SELECT CAST(has\_schema\_privilege('public','public','CREATE') AS TEXT);
如果返回为TURE
,执行如下 SQL 语句进行修复:
REVOKE CREATE ON SCHEMA public FROM PUBLIC;
PUBLIC
角色属于任何用户,如果将对象的所有权限授予PUBLIC
角色,则任意用户都会继承此对象的所有权限,违背权限最小化原则,为了保障数据库数据的安全,此角色应该拥有尽可能少的权限。通过执行如下 SQL 语句来确定所有权限是否授权PUBLIC
角色:若为空则说明已授权,如果已授权,可通过执行如下 SQL 语句来修复:
REVOKE ALL ON \<OBJECT\_NAME> FROM PUBLIC;
pg_catalog
模式下的pg_authid
系统表中包含了数据库中所有的角色信息。由于所有用户会继承PUBLIC
角色的权限,为了防止敏感信息泄露或被更改,PUBLIC
角色不允许拥有pg_authid
系统表的任何权限,执行如下 SQL 语句,如果查询结果显示不为空,则已经被授权:若已授权,通过执行如下 SQL 语句进行修复:
REVOKE ALL ON pg\_authid FROM PUBLIC;
普通用户指用于执行普通业务操作的非管理员用户。作为普通用户,不应该拥有超出其正常权限范围的管理权限,例如创建角色权限,创建数据库权限,审计权限,监控权限,运维权限,安全策略权限等,在满足正常业务需求的前提下,为了确保普通用户权限最小化,应撤销普通用户非必须的管理权限。
在创建函数时声明SECURITY DEFINER
表示函数以创建它的用户权限执行,如果使用不当会导致函数执行者借助创建者的权限执行越权操作,所以一定确保这样的函数不被滥用。为了安全考虑,禁止PUBLIC
角色执行SECURITY DEFINER
类型的函数,执行如下 SQL 语句查询pubilc
角色是否有SECURITY DEFINER
类型的函数:如果返回非空,执行如下 SQL 语句检查是否有执行权限:
SELECT CAST(has\_function\_privilege('public', 'function\_name((arg\_type)(, ...))', 'EXECUTE') AS TEXT);
返回TRUE
,则代表拥有,执行下面的 SQL 语句进行修复:
REVOKE EXECUTE ON FUNCTION function\_name((arg\_type)(, ...)) FROM PUBLIC;
SECURITY INVOKER
函数是以调用它的用户的权限来执行,使用不当会导致函数创建者借助执行者的权限执行越权操作,所以在调用非自身创建的这类函数时,一定要先检查函数执行内容,避免造成函数创建者借助执行者的权限执行了越权的操作。
数据库审计
GaussDB 可以记录实例相关的操作,但是仅针对支持的审计操作,请在操作前查询操作列表 。确保配置开启数据库对象的添加、删除、修改审计。支持审计日志可视化查看,可开启 LTS(Log Tank Service,日志存储服务)的能力。
WAL(Write Ahead Log)
即预写式日志,也称为Xlog
。wal_level
决定了写入WAL
的信息量。为了在备机上开启只读查询,wal_level
需要在主机上设置成hot_standby
,并且备机设置hot_standby
参数为on
。对于分布式环境,不支持设置hot_standby
为off
。
备份管理
定期进行数据备份是保障数据安全的重要手段。可以根据业务需求制定合理的备份策略,包括全量备份和增量备份的周期等。同时,要确保备份数据的存储安全,例如将备份数据存储在安全的存储介质中,对备份数据进行加密等。在恢复数据时,要进行充分的测试,确保恢复的数据的完整性和可用性。
其他配置
如果 GaussDB 连接数过高,会消耗服务器大量资源,导致操作响应变慢,参考以下几个参数进行优化,具体内容请参见连接设置:
-
max_connections
:允许和数据库连接的最大并发连接数,此参数会影响集群的并发能力。 -
max_inner_tool_connections
:允许和数据库连接的工具的最大并发连接数,此参数会影响 GaussDB 的工具连接并发能力。 -
sysadmin_reserved_connections
:为管理员用户预留的最少连接数,不建议设置过大。该参数和max_connections
参数配合使用,管理员用户的最大连接数等于max_connections + sysadmin_reserved_connections
。该参数属于POSTMASTER
类型参数,具体内容请参见设置参数中对应设置方法进行设置。
(注:文档部分内容可能由 AI 生成)