数据库安全设置
数据库访问策略设置
hba 表用于管理存放 AntDB 集群中所有 coordiantor 节点的 pg_hba.conf 文件中的配置项,当配置项被添加后,就会记录到此表中,用来标识。对于添加过的配置项,可以通过 list hba 命令显示。
添加访问策略
命令功能: 添加新的 hba 配置到 coordinator 中。通过 \h add hba
获取帮助信息。
命令格式:
Syntax:
ADD HBA GTMCOORD { ALL | nodename } ( "hba_value" )
ADD HBA COORDINATOR { ALL | nodename } ( "hba_value" )
ADD HBA DATANODE { ALL | nodename } ( "hba_value" )
where hba_value must be the following:
host database user IP-address IP-mask auth-method
命令举例:
-- 在coordinator的hba中添加 10.0.0.0 IP端的所有用户通过md5认证访问所有数据库的配置:
add hba coordinator all ("host all all 10.0.0.0 8 md5");
删除访问策略
命令功能:
删除通过 add hba 添加的配置项。
命令格式:
Command: DROP HBA
Description: drop the content from the hba table.
Syntax:
DROP HBA { ALL | nodename } [ ( "hba_value" [, ...] ) ]
where hba_value must be the following:
host database user IP-address IP-mask auth-method
host database user hostname auth-method
命令举例:
-- 删除所有节点通过用户replication的访问配置:
DROP HBA ALL ("host replication all 0.0.0.0 0 trust");
-- 删除cn1节点的hba中 10.0.0.0 IP端的所有用户通过md5认证访问所有数据库的配置:
DROP HBA cn1 ("host all all 10.0.0.0 8 trust");
-- 删除gc_1节点通过用户replication的访问配置:
DROP HBA gc_1 ("host replication all 0.0.0.0 0 trust");
列举访问策略
命令功能:
显示通过 add hba 添加的配置项。
命令格式:
LIST HBA [ coord_name [, ...] ]
命令举例:
antdb=# list hba;
nodename | hbavalue
----------+-----------------------------
coord1 | host all all 10.0.0.0 8 md5
coord2 | host all all 10.0.0.0 8 md5
coord3 | host all all 10.0.0.0 8 md5
coord4 | host all all 10.0.0.0 8 md5
(4 rows)
查询访问策略
命令功能:
显示节点 pg_hba.conf
中的 hba 信息。
命令格式:
Description: show the content of the pg_hba.conf file
Syntax:
SHOW HBA { ALL | node_name }
命令举例:
-- 显示节点cn1的hba信息
show hba cn1;
nodetype | nodename | hbavalue
-------------+----------+------------------------------------------
coordinator | cn1 | local all all trust +
| | host all all 127.0.0.1 32 trust +
| | host all all ::1 128 trust +
| | local replication all trust +
| | host replication all 127.0.0.1 32 trust +
| | host replication all ::1 128 trust +
| | host all all 10.21.20.175 32 trust +
| | host all all 10.21.20.176 32 trust +
| | host all all 10.0.0.0 8 trust +
与 list hba
不同的是,list仅仅显示通过 add hba
添加的hba信息,而 show hba
显示具体节点中 pg_hba.conf
文件的内容。
配置 SSL 访问控制策略
AntDB 支持客户端通过SSL连接加密服务器,以提高安全性。
前提条件:
准备好 ssl 证书文件:
- 根证书文件: root.crt
- 服务器证书文件: server.crt
- 服务器私钥文件: server.key
- 客户端证书文件: client.crt
- 客户端私钥文件: client.key
配置步骤:
下面以允许用户 ssl 连接到 gtmcoord 节点为例,其它节点的配置方法相同:
1、将准备好服务器证书文件(根证书文件、服务端证书文件、服务端私钥文件)上传到集群 gtmcoord 节点所在的服务器上,如下:
[antdb@host227 ssl_file]$ ll
total 12
-rw-rw-r-- 1 antdb antdb 1220 Apr 17 11:14 root.crt
-rw-rw-r-- 1 antdb antdb 1220 Apr 17 11:14 server.crt
-rw------- 1 antdb antdb 1679 Apr 17 11:14 server.key
修改 server.key 的权限设置为 0600,否则后面重启会失败。
chmod 0600 server.key
2、登录到 mgr 上,设置参数如下,这里设置参数的节点与第一步对应,确保节点所在服务器上有 ssl 文件。
如果没有 ssl 文件,设置 ssl = on
会导致后面重启失败:
set gtmcoord all(ssl = on);
set gtmcoord all(ssl_ca_file = '/home/antdb/ssl_file/root.crt');
set gtmcoord all(ssl_cert_file = '/home/antdb/ssl_file/server.crt');
set gtmcoord all(ssl_key_file = '/home/antdb/ssl_file/server.key');
这里,也可以配置相对路径,用户可以自己选择。
例如,用户在第一步将文件上传到数据库的数据目录(即与 postgresql.conf 同一级的目录),则可以如下。
ssl = on
ssl_ca_file = 'root.crt'
ssl_cert_file = 'server.crt'
ssl_key_file = 'server.key'
3、增加 hba 配置项;
例如:允许所有主机上以 antdb 用户使用 SSL 加密连接到主节点,则配置如下:
add hba gtmcoord all("hostssl all antdb 0.0.0.0 0 cert");
4、登录到重启集群,使 ssl 相关参数和 hba 文件的修改都生效。
stop all;
start all;
5、将准备的 ssl 文件(根证书文件、客户端证书文件、客户端私钥文件)上传到客户端主机上:
client.crt
client.key
root.crt
更改权限:
chmod 0600 client.key
6、登录到数据库上,创建用户:
创建的用户名是 antdb,因为上面的证书与 antdb 用户绑定,需要在用户生成证书的时候确定。
CREATE USER antdb login;
7、在客户端上连接主节点,指定客户端的证书文件。
psql --dbname="host=10.20.16.227 user=antdb port=40360 dbname=postgres sslmode=verify-ca sslrootcert=root.crt sslcert=client.crt sslkey=client.key"
例如:
[antdb@host227 ~]$ psql --dbname="host=10.20.16.227 user=antdb port=40360 dbname=postgres sslmode=verify-ca sslrootcert=root.crt sslcert=client.crt sslkey=client.key"
psql (13.3)
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
Type "help" for help.
antdb=>