详解GaussDB(DWS)通信安全的小妙招:连接认证机制

本文分享自华为云社区《GaussDB(DWS)数据库安全系列之通信安全》,作者:yd_262982826。

1. 前言

适用版本:【8.1.3及以上】

网络是一个开放的环境,仅仅依靠用户名和密码难以应对复杂的网络环境,针对可能存在的身份伪造的欺骗行为,以及监听通信内容的窃听行为,为了确保通信双方身份的真实性和通信内容的私密性,防止非法用户对GaussDB(DWS)系统、其他用户造成不利影响,GaussDB(DWS)建立了一套完整而严密的防护机制------连接认证机制,可以有效防止非法用户入侵。

2. 证书校验&&秘钥协商

证书校验和秘钥协商在SSL的握手阶段实现,握手协议如下:

2.1 准备证书

在华为云CA认证中心申请到服务器、客户端的证书和密钥。(如:服务器的私钥为server.key,证书为server.crt,客户端的私钥为client.key,证书为client.crt,CA根证书名称为cacert.pem。)

为了安全性,私钥通常采用了密码保护,在此可以通过gs_guc encrypt工具生成私钥的两个密码保护文件(.key.rand、.key.cipher),命令如下:

css 复制代码
gs_guc encrypt [-M keymode] -K password -D DATADIR

说明:

  • -M是加密类型,服务端选择server,客户端选择client。默认值为server。
  • -K是用户私钥的密码,密码需要满足要求:长度(8≤len≤16)、复杂度(需至少包含小写字母、大写字母、数字、特殊字符中的三种)
  • -D生成的密码保护文件的存放地址

2.2 服务器参数配置

通过调用工具gs_guc实现服务器配置文件postgresql.conf有关参数设置,命令如下:

bash 复制代码
gs_guc set -Z coordinator -D ${BIGDATA_DATA_HOME}/mppdb/data1/coordinator -c "ssl=on"

说明:

  • -Z coordinator表示实例类型为coordinator;
  • -D 数据目录
  • -c 指定设置postgresql.conf文件

服务器需设置SSL相关参数如下:

2.3 客户端参数配置

客户端设置SSL连接参数,按照模式分为:单向认证和双向认证。

  • 单向认证,仅客户端验证服务器证书的合法性,设置参数:PGSSLMODE、PGSSLROOTCERT;

  • 双向认证,客户端验证服务器证书的合法性,同时客户端向服务器发送证书,由服务器验证客户端证书的合法性,设置参数:PGSSLCERT、PGSSLKEY、PGSSLMODE、PGSSLROOTCERT;

客户端需设置SSL相关参数如下:

备注:假设证书,私钥和根证书都放在"/home/omm"目录。

3. 用户名和密码验证

用户名和密码的验证在服务器侧进行,其逻辑如下:

如果某主机需要远程连接到GaussDB(DWS),必须在GaussDB(DWS)系统的配置文件中增加此主机的信息,并且进行客户端接入认证。配置文件(pg_hba.conf)存放在数据目录里。hba(host-based authentication)表示是基于主机的认证。

通过调用工具gs_guc实现服务器配置文件pg_hba.conf有关参数设置,每次向配置文件中增加一条连接认证规则,命令如下:

css 复制代码
gs_guc set -Z coordinator -N all -I all -h "host all jack 10.10.0.30/32 sha256"

说明:

  • -Z coordinator表示实例类型为coordinator;
  • -N all 表示集群的所有主机
  • -I all表示主机的所有实例
  • -h 表示指定需要在"pg_hba.conf"增加的语句
  • all 表示允许客户端连接到任意的数据库
  • jack表示允许连接数据库的用户
  • 10.10.0.30/32表示只允许IP地址为10.10.0.30的主机连接
  • sha256表示连接时jack用户的密码使用sha256算法加密

配置文件pg_hba.conf中的每条记录可以是以下四种格式之一:

sql 复制代码
local DATABASE USER METHOD [OPTIONS]

host DATABASE USER ADDRESS METHOD [OPTIONS]

hostssl DATABASE USER ADDRESS METHOD [OPTIONS]

hostnossl DATABASE USER ADDRESS METHOD [OPTIONS]

说明:

  • local:只接受通过Unix域套接字进行的连接。
  • host:既接受一个普通的TCP/IP套接字连接,也接受一个SSL加密的TCP/IP套接字连接。
  • hostssl:只接受一个经过SSL加密的TCP/IP套接字连接。
  • hostnossl:只接受一个普通的TCP/IP套接字连接。
  • DATABASE:声明记录所匹配且允许访问的数据库:a) all:表示该记录匹配所有数据库;b) sameuser:表示如果请求访问的数据库和请求的用户同名,则匹配;c) samerole/ samegroup:表示请求的用户必须是与数据库同名角色中的成员;d) 一个包含数据库名的文件或者文件中的数据库列表:文件可以通过在文件名前面加前缀@来声明;e) 特定的数据库名称或者用逗号分隔的数据库列表;
  • USER:声明记录所匹配且允许访问的数据库用户。a) all:表明该记录匹配所有用户;b) 用户角色:表示匹配任何直接或者间接属于这个角色的成员;c) 一个包含用户名的文件或者文件中的用户列表:文件可以通过在文件名前面加前缀@来声明;d) 特定的数据库用户名或者用逗号分隔的用户列表;
  • ADDRESS:指定与记录匹配且允许访问的IP地址范围,支持IPv4和IPv6,可以使用如下两种形式来表示:a) IP地址/掩码长度。例如:10.10.0.0/24;b) IP地址子网掩码。例如:10.10.0.0 255.255.255.0
  • METHOD:声明连接时使用的认证方法。a) trust:只完全信任从服务器本机使用gsql且不指定-U参数的连接,此时不需要口令;b) reject:无条件地拒绝连接。常用于过滤某些主机;c) md5:要求客户端提供一个md5加密的口令进行认证(不推荐使用);d) sha256:要求客户端提供一个sha256算法加密的口令进行认证;e) cert:客户端证书认证模式,必须是SSL连接且客户端须提供有效的SSL证书,用户名必须与证书所有者同名;f) gss:使用基于gssapi的kerberos认证;g) ldap:ldap认证;

4. 异常处理

5. 总结

连接认证机制就是GaussDB(DWS)数据安全的一套有效防护机制,连接认证机制可以防止非法用户入侵GaussDB(DWS)系统内部。GaussDB(DWS)是基于客户端/服务器(C/S)架构的系统,通信过程是基于TPC/IP协议,为了确保用户访问的可信,建立了连接认证机制:通过安全套接字层(SSL)实现通信双方的证书校验和秘钥协商从而保护网络连接,通过服务端的认证模块确保用户名和密码合法。

关于SSL,SSL(及其继任者TLS)是在应用程序级实现的,位于应用层协议(HTTP、FTP)和传输层协议(TCP)之间。如果正确地配置了SSL,则第三方观察者最多只能获得连接参数、传输频率和大概数据量,但是无法读取或更改这些信息。基于SSL的证书校验可以确保通信双方(客户端和服务端)身份的真实性、秘钥协商可以确保数据的完整性和私密性。SSL/TLS在Internet协议栈中的位置如图所示:

关于认证模块,在建立的TCP/IP通道(SSL)的基础上,根据服务器配置文件pg_hba.conf中限定的合法用户名、数据库名、IP地址以及认证方式等信息,GaussDB(DWS)认证模块对用户名和密码进行校验,确保合法用户能正常连接到GaussDB(DWS)。

点击关注,第一时间了解华为云新鲜技术~

相关推荐
丁卯404几秒前
Go语言中使用viper绑定结构体和yaml文件信息时,标签的使用
服务器·后端·golang
chengooooooo1 分钟前
苍穹外卖day8 地址上传 用户下单 订单支付
java·服务器·数据库
Rverdoser1 小时前
【SQL】多表查询案例
数据库·sql
Galeoto1 小时前
how to export a table in sqlite, and import into another
数据库·sqlite
人间打气筒(Ada)2 小时前
MySQL主从架构
服务器·数据库·mysql
leegong231112 小时前
学习PostgreSQL专家认证
数据库·学习·postgresql
喝醉酒的小白2 小时前
PostgreSQL:更新字段慢
数据库·postgresql
敲敲敲-敲代码2 小时前
【SQL实验】触发器
数据库·笔记·sql
和道一文字yyds2 小时前
MySQL 中的索引数量是否越多越好?为什么?如何使用 MySQL 的 EXPLAIN 语句进行查询分析?MySQL 中如何进行 SQL 调优?
数据库·sql·mysql
落笔画忧愁e2 小时前
FastGPT快速将消息发送至飞书
服务器·数据库·飞书