USM-EUA
- 数据安全维护建议
为保证GaussDB数据库中的数据安全,避免丢失数据,非法访问数据等事故发生,请您遵循以下操作。 - 设置帐户权限
GaussDB可以对不同用户赋予相应的访问权限,保证数据的使用安全。 - 设置帐户安全策略
GaussDB为帐户提供了自动锁定和解锁、过期自动失效、手动锁定异常帐户和删除不再使用帐户等一系列的安全措施,保证数据的使用安全。 - 修改数据库帐户密码
为了提高安全性,请修改数据库帐户的缺省密码。建议定期修改密码,一般不超过90天,且新密码需遵循密码复杂度要求。 - 配置GaussDB双机证书认证
为了提高数据库双机安全性,需要对GaussDB数据库双机证书认证进行安全配置。
数据安全维护建议
为保证GaussDB数据库中的数据安全,避免丢失数据,非法访问数据等事故发生,请您遵循以下操作。
避免数据被丢失
- 建议采取主备双机模式部署GaussDB,这样即使主机GaussDB出现故障,备机GaussDB可以立即接管主机的服务,保证了高可靠性的数据库服务。
- 建议用户规划周期性的物理备份,且对备份文件进行可靠的保存。在系统发生严重错误的情况下,可以利用备份文件,将系统恢复到备份前的状态。
避免数据被非法访问
- 建议对数据库用户进行权限分级管理。数据库管理员根据业务需要,建立用户并赋予权限,保证各用户对数据库的合理访问。
- 将GaussDB部署在可信任的内网中,最好是通过网线或机框内的接口直接连接,这样也能最大限度地保证数据传输的效率。如果服务端和客户端一定要部署在非信任的网络中,需要在服务启动前,打开TLS加密,保证数据在非信任网络上的传输安全。需要注意的是,打开TLS加密会降低数据库的性能。
避免系统日志泄露个人信息
- 当您将调试日志发给其他人进行分析时,请将个人信息删除。在调试时,将日志级别(log_min_messages)设置为DEBUGx(x为DEBUG级别,取值范围为1~5)时,日志文件中记录的信息可能包含用户的个人信息。
- 当您将系统日志发给其他人进行分析时,请将个人信息删除。缺省配置下,当SQL语句执行错误时,日志中会记录出错的SQL语句,而这些SQL语句中可能包含用户个人信息。
- 将log_min_error_statement参数的值设置为PANIC可以避免在系统日志中记录出错的SQL语句,但是关闭此功能将导致发生错误时难以定位。
设置帐户权限
GaussDB可以对不同用户赋予相应的访问权限,保证数据的使用安全。
背景信息
操作步骤
- 以gaussuser用户身份登录GaussDB服务器。
- 以连接缺省数据库postgres为例,端口号是65432,使用如下命令:
gsql -d postgres -p 65432
从安全性考虑,建议在安装GaussDB之后,规划具备表3-3所示权限的帐户。表3-3 同帐户的规划原则及创建方法帐户类型
说明
创建方法
系统管理员
含义:具有数据库最高权限的帐户。
规划原则:使用现有的系统管理员帐户,不建议再创建一个系统管理员。
这三类帐户创建方式类似,以创建审计管理员user_audit为例,命令格式如下:
CREATE USER user_audit WITH AUDITADMIN IDENTIFIED BY "1234@abc";
安全管理员
含义:具有CREATEROLE权限的帐户。
规划原则:建议只建立一个仅具有CREATEROLE权限的安全管理员。
审计管理员
含义:具有AUDITADMIN权限的帐户。
规划原则:建议只建立一个仅具有AUDITADMIN权限的审计管理员。
对象操作员
含义:缺省不具有任何权限,但是可以连接GaussDB缺省的数据库postgres,并访问其中缺省的系统表和视图的帐户。
规划原则:首先创建角色,再将用户加入此角色,则用户就具有角色的对象权限了。
以创建角色role1具有表films的查询权限,再创建用户user_read加入角色role1,拥有相同对象权限为例,具体操作步骤如下。- 创建角色role1。
CREATE ROLE role1 IDENTIFIED BY "abc@1234";
- 为角色role1添加对表films的查询权限。
GRANT SELECT ON TABLE films TO role1;
- 创建对象操作员user_read加入角色role1中。
CREATE USER user_read IN ROLE role1 PASSWORD "123@abcd";
- 创建角色role1。
设置帐户安全策略
GaussDB为帐户提供了自动锁定和解锁、过期自动失效、手动锁定异常帐户和删除不再使用帐户等一系列的安全措施,保证数据的使用安全。
配置项 |
描述 |
配制方法 |
---|---|---|
帐户自动锁定和解锁 |
说明:
|
配置failed_login_attempts参数。
配置password_lock_time参数。
|
帐户过期自动失效 |
注意:
只有认证方法是口令模式,帐户过期设置功能才能起生效。 |
以设置帐户user1无效时间为'2012-10-12 18:00:00'为例,命令格式如下: CREATE USER user1 IDENTIFIED BY 'user123@123' VALID UNTIL 'Oct 12 18:00:00 2012 +8'; 以修改帐户user1无效时间为'2012-12-12 18:00:00'为例,命令格式如下: ALTER USER user1 IDENTIFIED BY 'user123@234' VALID UNTIL 'Dec 12 18:00:00 2012 +8'; |
手动锁定和解锁帐户 |
若管理员发现某帐户被盗、非法访问等异常情况,可手动将该帐户锁定。 当管理员认为帐户恢复正常后,可手动将该帐户解锁。 |
以手动锁定和解锁用户user_read为例,命令格式如下:
|
删除不再使用的帐户 |
当确认帐户不再使用,管理员可以删除帐户。该操作不可恢复。 删除帐户时,您需要注意以下事项:
|
以删除帐户user_write为例,命令格式如下: DROP USER user_write cascade; |
修改数据库帐户密码
为了提高安全性,请修改数据库帐户的缺省密码。建议定期修改密码,一般不超过90天,且新密码需遵循密码复杂度要求。
背景信息
- USM-EUA安装在缺省路径下。
- GaussDB数据库安装在缺省路径下。
- Windows操作系统下,修改数据库连接帐户EUA。
- Linux操作系统下,修改数据库管理员帐户gaussuser和数据库连接帐户EUA。
- 至少包含大写字母(A-Z),小写字母(a-z),数字(0-9),非字母数字字符四类字符中的三类字符。
- 最少8个字符。
- 不能和帐户名相同。
- 不能和最近一次使用的密码相同。
修改数据库帐户密码(Windows)
- 备份数据库帐户密码的配置文件。
- 备份“D:\EUA\EUA_OpenAS\kernel\OpenAS_Tomcat7\webapps\EUA\WEB-INF\classes”路径下的“jdbc.properties”文件。
- 备份“D:\EUA\EUA_OpenAS\kernel\OpenAS_Tomcat7\webapps\EUA\WEB-INF\classes”路径下的“proxool.xml”文件。
- 备份“D:\EUA\EUA_OpenAS\kernel\OpenAS_Tomcat7\webapps\EUA\WEB-INF\conf”路径下的“bme.secretkey.properties”文件。
- 打开运行窗口。
- 进入GaussDB数据库安装路径下。
cd D:\EUA\EUA_GaussDB\app\bin
- 修改数据库帐户EUA的密码。
gsql -d EUADB -U EUA -p 65432
根据屏幕提示输入EUA帐户的旧密码。Password for user EUA:
alter user EUA identified by 'A123@abc' replace 'Change_Me';
说明:
A123@abc、Change_Me分别代表数据库帐户EUA的新密码和原始密码,这些密码要符合密码复杂度要求,否则会执行失败。
屏幕提示如下信息表示密码修改成功。ALTER ROLE
- 使用加密工具对密钥进行加密,生成key值“encryptedKey”和加密的keystore密码“encryptedPassword”。
cd D:\EUA\EUA_OpenAS\tools\tools\encryption
openas_encrypt_interactive.bat 0 CBC A123@abc
生成类似如下信息的key值和keystore密码:encryptedKey: 65dd815e611acd31354259cd027e97a274684105aaf0afc110820ffafa732391f791a4582a890eed7475f2a3507acdf2 encryptedPassword: dbc30b8e373e04d3c22f57440086783d96d8b10345462e610fc70c7af055fa70
- 用5生成的加密的keystore密码“encryptedPassword”替换“jdbc.properties”文件中的“bme.password”的值并保存。
- 用5生成的加密的keystore密码“encryptedPassword”替换“proxool.xml”文件中的“property name="password" value=”的值并保存。
- 用5生成的key值“encryptedKey”替换“bme.secretkey.properties”文件中的“bme.encryption.key”的值并保存。
- 重启USM-EUA服务,使新证书生效。
net stop "EUA SERVICE"
net start "EUA SERVICE"
修改数据库帐户密码(Linux)
- 以OMUSER用户登录USM-EUA系统。
- 切换到euauser用户。
su - euauser
- 备份数据库帐户密码的配置文件。
- 备份EUA帐户的配置文件。
cd /home/euauser/EUA_OpenAS/kernel/OpenAS_Tomcat7/webapps/EUA/WEB-INF/classes
cp jdbc.properties jdbc.properties.bak
cd /home/euauser/EUA_OpenAS/kernel/OpenAS_Tomcat7/webapps/EUA/WEB-INF/classes
cp proxool.xml proxool.xml.bak
cd /home/euauser/EUA_OpenAS/kernel/OpenAS_Tomcat7/webapps/EUA/WEB-INF/conf
cp bme.secretkey.properties bme.secretkey.properties.bak
- 备份gaussuser帐户的配置文件。
su - gaussuser
cd /home/gaussuser/gaussdb_backup/conf
cp config_rzs.properties config_rzs.properties.bak
说明:
如果修改密码不成功,可至原来路径下还原数据库帐户密码的配置文件,以恢复原来的数据库密码。
- 还原gaussuser帐户的配置文件。
su - gaussuser
cd /home/gaussuser/gaussdb_backup/conf
cp config_rzs.properties.bak config.properties
- 还原EUA帐户的配置文件。
su - euauser
cd /home/euauser/EUA_OpenAS/kernel/OpenAS_Tomcat7/webapps/EUA/WEB-INF/classes
cp jdbc.properties.bak jdbc.properties
cd /home/euauser/EUA_OpenAS/kernel/OpenAS_Tomcat7/webapps/EUA/WEB-INF/classes
cp proxool.xml.bak proxool.xml
cd /home/euauser/EUA_OpenAS/kernel/OpenAS_Tomcat7/webapps/EUA/WEB-INF/conf
cp bme.secretkey.properties.bak bme.secretkey.properties
- 备份EUA帐户的配置文件。
- 修改数据库帐户gaussuser的密码。
说明:
此步骤在双机或容灾场景的备机上无需执行。
- 连接数据库。
su - gaussuser
gsql -d POSTGRES -p 65432
- 修改数据库帐户gaussuser的密码。
alter user gaussuser identified by 'B254@abc' replace 'Change_Me';
屏幕提示如下信息表示密码修改成功。ALTER ROLE
说明:
B254@abc、Change_Me分别代表数据库帐户gaussuser的新密码和原始密码,这些密码要符合密码复杂度要求,否则会执行失败。
- 退出数据库。
\q
exit
- 连接数据库。
- 使用加密工具对密钥进行加密,生成key值“encryptedKey”和加密的keystore密码“encryptedPassword”。
su - euauser
cd /home/euauser/EUA_OpenAS/tools/tools/encryption
chmod +x openas_encrypt_interactive.sh
sh openas_encrypt_interactive.sh 0 CBC B254@abc
生成类似如下信息的key值和keystore密码:encryptedKey: 65dd815e611acd313542110820ffafa732391f791a4582a890eed7475f2a3507acdf259cd027e97a274684105aaf0afc encryptedPassword: dbc30b8e373e04d96d8b10345462e610fc70c7af055fa73c22f57440086783d0
- 修改“config_rzs.properties”文件。
- 用5生成的加密的keystore密码“encryptedPassword”替换“config_rzs.properties”文件中的“gaussDBAPassword”的值,保存并退出。
- 用5生成的加密的key值“encryptedKey”替换“config_rzs.properties”文件中的“euaKey”的值,保存并退出。
su - gaussuser
cd /home/gaussuser/gaussdb_backup/conf
vim config_rzs.properties
- 修改数据库帐户EUA的密码。
说明:
此步骤在双机或容灾场景的备机上无需执行。
- 连接数据库。
su - gaussuser
gsql -d POSTGRES -p 65432
- 修改数据库帐户EUA的密码。
alter user EUA identified by 'D568@abc' replace 'Change_Me';
屏幕提示如下信息表示密码修改成功。ALTER ROLE
说明:
D568@abc、Change_Me分别代表数据库帐户EUA的新密码和原始密码,这些密码要符合密码复杂度要求,否则会执行失败。
- 退出数据库。
\q
exit
- 连接数据库。
- 使用加密工具对新密码进行加密,生成key值“encryptedKey”和加密的keystore密码“encryptedPassword”。
su - euauser
cd /home/euauser/EUA_OpenAS/tools/tools/encryption
chmod +x openas_encrypt_interactive.sh
sh openas_encrypt_interactive.sh 0 CBC D568@abc
生成类似如下信息的key值和keystore密码:encryptedKey: a890eed7475f2aacd31354211082065dd815e611791a4582ffafa732391f3507acdf259cd027e97a274684105aaf0afc encryptedPassword: af055fa73c22f5b8e37dbc302e610fc70c73e04d96d8b10345467440086783d0
- 用8生成的加密的keystore密码“encryptedPassword”替换“jdbc.properties”文件中的“bme.password”的值,保存并退出。
cd /home/euauser/EUA_OpenAS/kernel/OpenAS_Tomcat7/webapps/EUA/WEB-INF/classes
vim jdbc.properties
- 用8生成的加密的keystore密码“encryptedPassword”替换“proxool.xml”文件中<property name="password"的“value”的值,保存并退出。
cd /home/euauser/EUA_OpenAS/kernel/OpenAS_Tomcat7/webapps/EUA/WEB-INF/classes
vim proxool.xml
- 用8生成的加密的key值“encryptedKey”替换“bme.secretkey.properties”文件中的“bme.encryption.key”的值,保存并退出。
cd /home/euauser/EUA_OpenAS/kernel/OpenAS_Tomcat7/webapps/EUA/WEB-INF/conf
vim bme.secretkey.properties
- 重启USM-EUA服务,使新密码生效。
su - root
service EUAService restart
配置GaussDB双机证书认证
为了提高数据库双机安全性,需要对GaussDB数据库双机证书认证进行安全配置。
TLS证书可以为网站的机密数据提供加密传输功能,确保机密信息的机密性、完整性和不可否认性。GaussDB数据库中已预置了安全证书,为了提高安全性,建议企业使用自己的安全证书替换预置的安全证书。推荐企业替换为业界权威CA机构颁发的商业安全证书,并确保服务器证书和私钥文件不被未授权人员获取。
配置双机数据复制方式(TLS)
为避免数据库双机部署在非信任的网络时,敏感信息被非法窃取或篡改,建议您开启TLS加密传输功能,保证双机环境下,数据在非信任网络上的传输安全。
背景信息
只要开启了TLS功能,不同数据中心节点(即nodedomain值为1对应的replconninfo配置的节点)之间只能使用TLS加密传输,不支持配置。
操作步骤
- 配置双机TLS加密的相关参数,详细的配置过程请参见使用SSL进行安全的TCP/IP连接。
- (可选)关闭同地域节点之间TLS功能,相关配置请参见表3-5。
您可以选择同一个数据中心的双机之间不使用TLS功能,不同数据中心的双机之间选择TLS功能。这有时候是很必要的,因为关闭本地信任网络上的TLS功能会提高数据库双机的性能。
使用建议:
如果仅需在不同地域的非信任网络中使用TLS功能,而同地域的信息网络中不使用TLS功能,可通过gs_guc命令修改所有节点上该变量的值为0。gs_guc set -c localdomain_ssl_mode=0表3-5 与同地域TLS功能相关的配置参数参数名称
参数说明
取值
nodedomain相关参数(nodedomain1到nodedomain7)
与7个replconninfo一一对应, 表示对应节点与本机是否异地。
取值:
0:对应replconninfo所配置的节点是本地节点;
1:对应replconninfo所配置的节点是异地节点。
缺省值:0
localmode_ssl_mode
在TLS功能开启后,该参数决定同地域节点之间是否优先选用TLS功能。
取值:
1:同地域节点之间选用TLS功能。
0:同地域节点之间不选用TLS功能。
缺省值:1
repl_force_cert_check
强制证书校验,在TLS功能开启后,会对证书进行强制校验。
取值:- repl_force_cert_check='repl_All_peer_cn=gauss_ca_file':所有连接证书的Common Name均相同,且为gauss_ca_file。这里gauss_ca_file为举例,需要根据实际证书的Common Name配置该参数。
- repl_force_cert_check='repl1_peer_cn=gauss_ca_file1;repl2_peer_cn=gauss_ca_file2;…;repl7_peer_cn=gauss_ca_file7':分别配置连接证书的Common
Name。这里gauss_ca_file1~7为举例,需要根据实际证书的Common Name配置该参数。说明:
- 该参数只在主机节点生效,为防止主备倒换后参数失效,需要在主备机节点分别配置。
- 如果省略某个replX_peer_cn的配置,则对应的备机连接证书的Common Name值replconninfoX为空。
- 如果配置双机主备连接证书的Common Name值非空,而对应的备机未配置证书,则拒绝TLS连接,提示认证失败。
缺省值:空,该参数无效。- 如备机端不提供证书,则采用匿名认证。
- 如备机端提供证书,则通过CA证书校验方式认证。
- 重启GaussDB使配置生效。
- 主机:gs_ctl restart -M primary
- 备机:gs_ctl restart -M standby
使用SSL进行安全的TCP/IP连接
GaussDB支持通过SSL加密客户端和服务器之间、主机和备机之间的通讯,为敏感数据在Internet上的传输提供了一种安全保障手段。
前提条件
从CA认证中心申请到正式的服务器、客户端的证书和密钥。背景信息
GaussDB支持TLS1.2协议标准,TLS1.2协议是一种安全性更高的协议标准,它加入了数字签名和数字证书来实现客户端和服务器的双向身份验证,保证了通信双方更加安全的数据传输。
如果只是为了测试,可以使用Openssl生成证书。
SSL相关的参数既控制客户端和主机的SSL通讯,同时还控制着主机和备机之间的SSL通讯。
操作步骤
以下操作需要在主机、备机和客户端上分别执行。对于只需要在主机或者备机上执行的情况,请查看每个步骤中的说明。
- 以gaussuser用户身份登录GaussDB服务器。
- 开启SSL认证模式。
gs_guc set -c ssl=on
- 以主机证书文件为例,把服务器端证书文件上传到“/opt/gaussdb/data”目录下。
- 主机根证书
- 主机服务端证书
- 主机服务端密钥文件
- 以主机证书文件为例,把客户端证书文件上传到“/home/gaussuser”目录下。
- 备机客户端证书
- 备机客户端密钥文件
- 备机根证书
- 配置SSL认证相关的数字证书参数,具体要求请参见表3-6。
- 配置为服务器端参数,具体参数说明请参见表3-7。gs_guc set -c "ssl_cert_file='server.crt'"
gs_guc set: ssl_cert_file='server.crt'
gs_guc set -c "ssl_key_file='server.key'"gs_guc set: ssl_key_file='server.key'
gs_guc set -c "ssl_ca_file='cacert.pem'"gs_guc set: ssl_ca_file='cacert.pem'
gs_guc set -c "ssl_crl_file=' '"gs_guc set: ssl_crl_file=' '
gs_guc set -c "ssl_ciphers='ALL'"gs_guc set: ssl_ciphers='ALL'
gs_guc set -c "repl_force_cert_check = 'repl_All_peer_cn=debug.com'"gs_guc set: repl_force_cert_check='repl_All_peer_cn=debug.com'
其中,debug.com为证书里的CN值。说明:
- 从安全性考虑,建议使用双向认证方式。
- 替换证书后,如果不去掉服务器私钥的密码保护,需要使用gs_guc -M server -K hsKd@3757命令对存储密码进行加密保护,详细请参见如何用openssl创建自认证数字证书(可选)。“hsKd@3757”是私钥口令,需要配置为新证书的私钥口令,新证书私钥口令不要使用缺省值,并且应满足口令复杂度要求。
表3-6 认证方式认证方式
含义
配置服务器端参数(对于双机,需要在主机和备机上配置)
配置客户端环境变量
双向认证(推荐)
客户端验证服务器证书的有效性,同时服务器端也要验证客户端证书的有效性,只有认证成功,连接才能建立。
将服务器证书、服务器私钥、废弃证书和根证书拷贝到$GAUSSDATA下,并设置如下参数:
- ssl_cert_file
- ssl_key_file
- ssl_ca_file
- ssl_crl_file
- ssl_ciphers
设置如下环境变量:
- PGSSLCERT
- PGSSLKEY
- PGSSLROOTCERT
- PGSSLCRL
- PGSSLMODE
环境变量的取值请参见表3-8。
服务器认证
客户端只验证服务器证书的有效性,而服务器端不验证客户端证书的有效性。服务器加载证书信息并发送给客户端,客户端使用根证书来验证服务器端证书的有效性。
将服务器端证书和私钥文件拷贝到$GAUSSDATA下,并设置如下参数:
- ssl_cert_file
- ssl_key_file
- ssl_ciphers
设置如下环境变量:
- PGSSLROOTCERT
- PGSSLCRL
- PGSSLMODE
环境变量的取值请参见表3-8。
客户端认证
服务器端只验证客户端证书的有效性,而客户端不验证服务端证书的有效性。在握手阶段,客户端将加载证书信息并发送给服务器,服务器端使用根证书来验证客户端证书的有效性。
将服务器端的根证书和证书吊销列表拷贝到$GAUSSDATA下,并设置如下参数:
- ssl_ca_file
- ssl_crl_file
- ssl_ciphers
设置如下环境变量:
- PGSSLROOTCERT
- PGSSLCRL
- PGSSLMODE
环境变量的取值请参见表3-8。
- 配置为服务器端参数,具体参数说明请参见表3-7。
- 分别到“/opt/gaussdb/data”和“/home/gaussuser”目录下,修改3和4中上传的所有证书文件的权限,以修改服务器密钥的权限为例。假设名称为server.key,在“/opt/gaussdb/data”目录下。
权限必须是600,且属主为gaussuser,属组为dbgrp。如果权限不满足要求,则GaussDB无法启动。使用如下命令修改权限:
cd /opt/gaussdb/data
chown gaussuser:dbgrp server.key
chmod og-rwx server.key
- 在备机和级联备机上,还需要进行以下配置,才能使主备之间、备机和级联备机之间正常通讯(此时,备机相当于是主机的客户端,级联备机相当于是备机的客户端)。
- 重启GaussDB使配置生效。
主机gs_ctl restart -M primary
备机gs_ctl restart -M standby
相关参考
在GaussDB服务器端的postgresql.conf文件中配置相关参数,详细请参见表3-7。
参数 |
描述 |
取值范围 |
---|---|---|
ssl |
表示是否启动SSL功能 |
缺省值:off |
ssl_cert_file |
指定服务器证书文件,包含服务器端的公钥。服务器证书用以表明服务器身份的合法性,公钥将发送给对端用来对数据进行加密。 |
请以实际的证书名为准。必须使用相对路径,相对路径是相对于数据目录的。 缺省值:server.crt |
ssl_key_file |
指定服务器私钥文件,用以数字签名和对公钥加密的数据进行解密。 |
请以实际的服务器私钥名称为准。必须使用相对路径,相对路径是相对于数据目录的。 缺省值:server.key |
ssl_ca_file |
CA服务器的根证书。此参数可选择配置,需要验证客户端证书的合法性时才需要配置。 |
请以实际的CA服务器根证书名称为准。 缺省值:空,表示不对客户端的身份进行校验。 |
ssl_crl_file |
证书吊销列表,如果客户端证书在该列表中,则当前客户端证书被视为无效证书。 |
请以实际的证书吊销列表名称为准。 缺省值:空,表示没有吊销列表。 |
ssl_ciphers |
SSL通讯使用的加密算法。 |
GaussDB支持的加密算法请参见表3-9。 缺省值:ALL,表示允许对端使用所有GaussDB支持的加密算法。 |
在GaussDB客户端配置SSL认证相关的环境变量,详细请参见表3-7。
环境变量 |
描述 |
取值范围 |
---|---|---|
PGSSLCERT |
指定客户端证书文件,包含客户端的公钥。客户端证书用以表明客户端身份的合法性,公钥将发送给对端用来对数据进行加密。 |
必须包含文件的绝对路径,如:
export PGSSLCERT="/home/gaussdb/data/client.crt" 缺省值:空 |
PGSSLKEY |
指定客户端私钥文件,用以数字签名和对公钥加密的数据进行解密。 |
必须包含文件的绝对路径,如:
export PGSSLKEY="/home/gaussdb/data/client.key" 缺省值:空 |
PGSSLMODE |
设置是否和服务器进行SSL连接协商,以及指定SSL连接的优先级。 |
取值及含义:
缺省值:require |
PGSSLROOTCERT |
指定为客户端颁发证书的根证书文件,根证书用于验证服务器证书的有效性。 |
必须包含文件的绝对路径,如:
export PGSSLROOTCERT="/home/gaussdb/data/root.crt" 缺省值:空 |
PGSSLCRL |
指定证书吊销列表文件,用于验证服务器证书是否在废弃证书列表中,如果在,则服务器证书将会被视为无效证书。 |
必须包含文件的绝对路径,如:
export PGSSLCRL="/home/gaussdb/data/root.crl" 缺省值:空 |
GaussDB SSL传输支持一系列不同强度的加密和认证算法。您可以通过修改postgresql.conf中的ssl_ciphers来指定数据库服务器使用的加密算法。目前GaussDB SSL支持的加密算法如表3-9。
加密强度 |
加密速度 |
加密算法描述 |
---|---|---|
stronger |
faster |
AES256-SHA |
stronger |
faster |
DES-CBC3-SHA |
stronger |
faster |
AES128-SHA |
stronger |
slower |
DHE-RSA-AES256-SHA |
stronger |
slower |
DHE-DSS-AES256-SHA |
stronger |
slower |
EDH-RSA-DES-CBC3-SHA |
stronger |
slower |
EDH-DSS-DES-CBC3-SHA |
stronger |
slower |
DHE-RSA-AES128-SHA |
stronger |
slower |
DHE-DSS-AES128-SHA |
middle |
faster |
DES-CBC-SHA |
middle |
slower |
EDH-RSA-DES-CBC-SHA |
middle |
slower |
EDH-DSS-DES-CBC-SHA |
- GaussDB SSL目前只支持加密强度在middle以上的加密算法。
- 配置参数ssl_ciphers的缺省值为ALL,代表支持上表中的所有加密算法。如果对加密算法没有特殊要求,建议您使用该缺省值。
- 如指定以上多种加密,加密算法之间需要以分号分割。如使用gs_guc set命令设置ssl_ciphres的值为几种算法组合:
gs_guc set -c ssl_ciphers="'AES256-SHA;DES-CBC3-SHA;AES128-SHA'"
- 如果要使用上表中和DSS相关的加密算法(如DHE-DSS-AES256-SHA 、EDH-DSS-DES-CBC3-SHA等)必须加载使用DSA算法签名的证书文件。如何使用openssl产生DSA算法签名的证书文件,请参见openssl官方文档。
如何用openssl创建自认证数字证书(可选)
介绍如何使用openssl创建自认证数字证书,在测试环境下,您可以用此数字证书进行调测。在商用环境中,为了提高安全性,建议企业使用业界权威CA机构颁发的商业安全证书。
示例
Linux 10/11默认安装了openssl组件,可利用它来创建自认证证书。
默认安装路径一般为/usr/local/ssl。
示例如下,其中##是注释。
##以root用户身份登录Linux gauss21:~ # cd /usr/local/ssl/misc gauss21:/usr/local/ssl/misc # ls CA.pl c_hash c_issuer CA.sh c_info c_name ##创建CA,将在当前目录下生成demoCA文件夹 gauss21:/usr/local/ssl/misc # ./CA.sh -newca CA certificate filename (or enter to create) Making CA certificate ... Generating a 1024 bit RSA private key ...........................++++++ ..............++++++ writing new private key to './demoCA/private/./cakey.pem' ##设置根证书的保护密码,最少要求4个字符,假设为CBad@3597 Enter PEM pass phrase: Verifying - Enter PEM pass phrase: ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- ##以下名称请牢记,生成服务器证书和客户端证书时填写的信息需要与此处的一致 Country Name (2 letter code) [AU]:CN State or Province Name (full name) [Some-State]:shanxi Locality Name (eg, city) []:xian Organization Name (eg, company) [Internet Widgits Pty Ltd]:company-A Organizational Unit Name (eg, section) []:Unit-1 ##Common Name可以随意命名 Common Name (eg, YOUR name) []:john ##Email可以选择性填写 Email Address []: gauss21:/usr/local/ssl/misc # ls CA.pl CA.sh c_hash c_info c_issuer c_name demoCA ##生成服务器证书请求文件server.req和服务器私钥server.key gauss21:/usr/local/ssl/misc # openssl req -newkey rsa:1024 -out server.req -keyout server.key Generating a 1024 bit RSA private key .......++++++ ..++++++ writing new private key to 'server.key' ##服务器私钥的保护密码,最少要求4个字符,假设为DKbs@5873 Enter PEM pass phrase: Verifying - Enter PEM pass phrase: ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- ##以下填写的信息与创建CA时的信息一致 Country Name (2 letter code) [AU]:CN State or Province Name (full name) [Some-State]:shanxi Locality Name (eg, city) []:xian Organization Name (eg, company) [Internet Widgits Pty Ltd]:company-A Organizational Unit Name (eg, section) []:Unit-1 ##Common Name可以随意命名 Common Name (eg, YOUR name) []:rose Email Address []: ##以下信息可以选择性填写 Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: gauss21:/usr/local/ssl/misc # ls CA.pl CA.sh c_hash c_info c_issuer c_name demoCA server.key server.req ##对生成的服务器证书请求文件进行签发,签发后将生成正式的服务器证书server.crt gauss21:/usr/local/ssl/misc # openssl ca -in server.req -out server.crt Using configuration from /etc/ssl/openssl.cnf Enter pass phrase for ./demoCA/private/cakey.pem: Check that the request matches the signature Signature ok Certificate Details: Serial Number: 1 (0x1) Validity Not Before: Jul 11 12:14:23 2013 GMT Not After : Jul 11 12:14:23 2014 GMT Subject: countryName = CN stateOrProvinceName = shanxi organizationName = company-A organizationalUnitName = Unit-1 commonName = rose X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: 66:11:DB:B1:8A:6F:A9:E8:58:C8:F8:BE:50:B4:32:BA:79:79:2B:6C X509v3 Authority Key Identifier: keyid:3E:FD:3D:16:5B:9B:44:DE:72:96:36:C7:A0:13:97:D6:9B:0E:71:30 Certificate is to be certified until Jul 11 12:14:23 2014 GMT (365 days) ##选择y对证书进行签发 Sign the certificate? [y/n]:y ##选择y,证书签发结束 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated gauss21:/usr/local/ssl/misc # ls CA.pl c_hash c_issuer demoCA server.key CA.sh c_info c_name server.crt server.req ##去掉服务器私钥的密码保护 gauss21:/usr/local/ssl/misc # openssl rsa -in server.key -out server.key ##如果不去掉服务器私钥的密码保护需要使用gs_guc工具对存储密码进行加密保护 gauss21:/usr/local/ssl/misc # gs_guc encrypt -M server -K Gauss@123 ##在本示例中,服务器私钥的密码为DKbs@5873 Enter pass phrase for server.key: writing RSA key ##生成客户端证书和客户端私钥的方法和要求与服务器相同 ##生成客户端证书请求文件和客户端私钥 gauss21:/usr/local/ssl/misc # openssl req -newkey rsa:1024 -out client.req -keyout client.key ##对生成的客户端证书请求文件进行签发,签发后将生成正式的客户端证书client.crt gauss21:/usr/local/ssl/misc # openssl ca -in client.req -out client.crt ##去掉客户端私钥的密码 gauss21:/usr/local/ssl/misc # openssl rsa -in client.key -out client.key ##如果不去掉客户端私钥的密码保护需要使用gs_guc工具对存储密码进行加密保护 gauss21:/usr/local/ssl/misc # gs_guc encrypt -M client -K Gauss@123 ##在TLS双向认证模式下,需要CA根证书,如何生成呢? cd /usr/local/ssl/misc/demoCA ##如下所示,在创建CA时,demoCA文件夹下生成了cacert.pem文件,此文件即为CA根证书 ##对于PgAdmin,您可以将cacert.pem修改后缀名为cacert.crt使用 gauss21:/usr/local/ssl/misc/demoCA # ls cacert.pem crl index.txt.attr newcerts serial certs index.txt index.txt.old private serial.old
配置客户端接入认证
客户端接入认证是由一个配置文件(默认名称为pg_hba.conf)控制的,它存放在数据库的数据目录里。hba(host-based authentication)表示是基于主机的认证。
背景信息
- GaussDB支持如下三种认证方式,无论哪种认证方式,都需要配置pg_hba.conf文件。
- 基于主机的认证:服务器端根据客户端的IP地址、用户名及要访问的数据库来查看配置文件从而判断用户是否通过认证。
- 口令认证:包括远程连接的加密口令认证和本地连接的非加密口令认证。
- TLS加密:使用VPP TLS提供服务器端和客户端安全连接的环境。
- pg_hba.conf文件的格式是一个记录写在一行,表示一个认证规则,空白和注释(#开头)被忽略。
- 每个认证规则是由若干空格和/或制表符分隔的字段组成。如果字段用引号包围,则它可以包含空白。记录不能跨行存在。
操作步骤
以单机为例进行介绍。数据库双机部署场景下,可分别在主备机上配置,配置方法与单机类似。
- 以gaussuser用户身份登录GaussDB服务器。
- 在pg_hba.conf文件中增加或者调整认证规则。
pg_hba.conf文件中的每条记录可以是下面四种格式之一,四种格式的参数说明请参见配置文件参考。
local DATABASE USER METHOD [OPTIONS] host DATABASE USER ADDRESS METHOD [OPTIONS] hostssl DATABASE USER ADDRESS METHOD [OPTIONS] hostnossl DATABASE USER ADDRESS METHOD [OPTIONS]
因为认证时系统是为每个连接请求顺序检查pg_hba.conf里的记录的,所以这些记录的顺序是非常关键的。
因此对于认证规则的配置建议如下:
- 靠前的记录有比较严格的连接参数和比较弱的认证方法。
- 靠后的记录有比较宽松的连接参数和比较严格的认证方法。
说明:
一个用户要想成功连接到特定的数据库,不仅需要通过pg_hba.conf中规则的检查,还必须要有该数据库上的CONNECT权限。如果希望限制哪些用户能够连接到哪些数据库,赋予/撤销CONNECT权限通常比在pg_hba.conf中设置规则更为简单。
- 重启数据库服务使配置生效。
gs_ctl restart
异常处理
用户认证失败有很多种原因,通过服务器返回给客户端的提示信息,可以看到用户认证失败的原因。常见的错误提示请参见表3-10。
问题现象 |
解决方法 |
---|---|
用户不存在或密码错误: FATAL: invalid username/password,login denied |
这条信息出现说明用户名或者密码错误,请检查输入是否有误。 |
连接的数据库不存在: FATAL: database "TESTDB" does not exist |
这条信息说明试图连接的数据库不存在,请检查连接的数据库名输入是否有误。 |
未找到客户端匹配记录: FATAL: no pg_hba.conf entry for host "10.10.10.10",user "ANDYM", database "TESTDB" |
这条信息说明已经连接了服务器,但服务器拒绝了连接请求,因为没有在它的pg_hba.conf配置文件里找到匹配的记录。请联系数据库管理员在pg_hba.conf配置文件加入您的信息。 |
任务示例
# TYPE DATABASE USER ADDRESS METHOD # "local" is for Unix domain socket connections only #表示只允许以安装时-U参数指定的用户从服务器本机进行连接 local all all trust # IPv4 local connections: #表示允许gaussuser用户从10.10.10.2主机上连接到GaussDB的任意数据库,使用sha256算法对密码进行加密 host all gaussuser 10.10.10.2/32 sha256 #表示允许任何用户从10.0.0.0/8网段的主机上连接到GaussDB的任意数据库,使用sha256算法对密码进行加密 hostssl all all 10.0.0.0/8 sha256
配置文件参考
介绍pg_hba.conf文件中相关的参数,在配置客户端接入认证时会用到这些参数。
参数名称 |
描述 |
取值范围 |
---|---|---|
local |
表示这条记录只接受通过Unix域套接字进行的连接。没有这种类型的记录,就不允许Unix域套接字的连接。 只有在使用gsql从服务器本机连接,且不指定-U参数的情况才是通过Unix域套接字连接。 |
- |
host |
表示这条记录即接受一个普通的TCP/IP套接字连接,也接受一个经过TLS加密的TCP/IP套接字连接。 |
- |
hostssl |
表示这条记录只接受一个经过TLS加密的TCP/IP套接字连接。 |
用TLS进行安全的连接,需要配置申请数字证书并配置相关参数,详细请参见使用SSL进行安全的TCP/IP连接。 |
hostnossl |
表示这条记录只接受一个普通的TCP/IP套接字连接。 |
- |
DATABASE |
声明记录所匹配的、允许访问的数据库。 |
|
USER |
声明记录所匹配的、允许访问的数据库用户。 |
|
ADDRESS |
指定与记录匹配的、允许访问的IP地址范围。 |
支持IPv4和IPv6,可以使用如下两种形式来表示:
说明:
以IPv4格式给出的IP地址会匹配那些拥有对应地址的IPv6连接,比如127.0.0.1将匹配IPv6地址 ::ffff:127.0.0.1 |
METHOD |
声明连接时使用的认证方法。 |
GaussDB支持如下几种认证方式,详细解释请参见表3-12:
|
OPTIONS |
OPTION是认证的一个选择集,它的格式是NAME = VALUE。 |
可用的选项取决于认证方式。 说明:
GaussDB支持的认证方式不需要此参数。 |
认证方式 |
说明 |
---|---|
trust |
采用这种认证模式时,GaussDB只完全信任从服务器本机使用gsql、且不指定-U参数的连接,此时不需要口令。 trust认证对于单用户工作站的本地连接是非常合适和方便的,通常不适用于多用户环境。如果想使用这种认证方法,可利用文件系统权限限制对服务器的Unix域套接字文件的访问。要做这种限制有两个方法:
注意:
设置文件系统权限只能帮助Unix域套接字连接,它不会限制本地TCP/IP连接。为保证本地TCP/IP安全,GaussDB不允许远程连接使用trust认证方法。 |
reject |
无条件地拒绝连接。常用于过滤某些主机。 |
md5 |
要求客户端提供一个md5加密的口令进行认证。 注意:
不推荐使用md5认证,因为md5为不安全的加密算法,存在网络安全风险。GaussDB保留md5认证和密码存储,是为了便于第三方工具的使用(比如TPCC评测工具)。 |
sha256 |
要求客户端提供一个sha256算法加密的口令进行认证,该口令在传送过程中结合salt(服务器发送给客户端的随机数)的单向sha256加密,增强了安全性。 |
cert |
强制使用安全证书进行检验。 |