- 关于MogDB
- 快速入门
- 安装指南
- 管理指南
- 日常运维
- 主备管理
- 高可用管理
- MOT内存表管理
- 列存表管理
- 备份与恢复
- 数据导出导入
- 升级指南
- 常见故障处理指南
- 常见故障定位手段
- 常见故障定位案例
- core问题定位
- TPCC运行时,注入磁盘满故障,TPCC卡住的问题
- 备机处于need repair(WAL)状态问题
- 内存不足问题
- 服务启动失败
- 出现“Error:No space left on device”提示
- 在XFS文件系统中,使用du命令查询数据文件大小大于文件实际大小
- 在XFS文件系统中,出现文件损坏
- switchover操作时,主机降备卡住
- 磁盘空间达到阈值,数据库只读
- 分析查询语句长时间运行的问题
- 分析查询语句运行状态
- 强制结束指定的问题会话
- 分析查询语句是否被阻塞
- 分析查询效率异常降低的问题
- 执行 SQL 语句时,提示 Lock wait timeout
- VACUUM FULL一张表后,表文件大小无变化
- 执行修改表分区操作时报错
- 不同用户查询同表显示数据不同
- 修改索引时只调用索引名提示索引不存在
- 重建索引失败
- 业务运行时整数转换错
- 高并发报错”too many clients already”或无法创建线程
- btree 索引故障情况下应对策略
- 安全指南
- 性能优化指南
- 开发者指南
- 参考指南
- 系统表及系统视图
- 系统表和系统视图概述
- 系统表
- GS_CLIENT_GLOBAL_KEYS
- GS_CLIENT_GLOBAL_KEYS_ARGS
- GS_COLUMN_KEYS
- GS_COLUMN_KEYS_ARGS
- GS_ENCRYPTED_COLUMNS
- GS_OPT_MODEL
- GS_WLM_INSTANCE_HISTORY
- GS_WLM_OPERATOR_INFO
- GS_WLM_PLAN_ENCODING_TABLE
- GS_WLM_PLAN_OPERATOR_INFO
- GS_WLM_USER_RESOURCE_HISTORY
- PG_AGGREGATE
- PG_AM
- PG_AMOP
- PG_AMPROC
- PG_APP_WORKLOADGROUP_MAPPING
- PG_ATTRDEF
- PG_ATTRIBUTE
- PG_AUTHID
- PG_AUTH_HISTORY
- PG_AUTH_MEMBERS
- PG_CAST
- PG_CLASS
- PG_COLLATION
- PG_CONSTRAINT
- PG_CONVERSION
- PG_DATABASE
- PG_DB_ROLE_SETTING
- PG_DEFAULT_ACL
- PG_DEPEND
- PG_DESCRIPTION
- PG_DIRECTORY
- PG_ENUM
- PG_EXTENSION
- PG_EXTENSION_DATA_SOURCE
- PG_FOREIGN_DATA_WRAPPER
- PG_FOREIGN_SERVER
- PG_FOREIGN_TABLE
- PG_INDEX
- PG_INHERITS
- PG_JOB
- PG_JOB_PROC
- PG_LANGUAGE
- PG_LARGEOBJECT
- PG_LARGEOBJECT_METADATA
- PG_NAMESPACE
- PG_OBJECT
- PG_OPCLASS
- PG_OPERATOR
- PG_OPFAMILY
- PG_PARTITION
- PG_PLTEMPLATE
- PG_PROC
- PG_RANGE
- PG_RESOURCE_POOL
- PG_REWRITE
- PG_RLSPOLICY
- PG_SECLABEL
- PG_SHDEPEND
- PG_SHDESCRIPTION
- PG_SHSECLABEL
- PG_STATISTIC
- PG_STATISTIC_EXT
- PG_TABLESPACE
- PG_TRIGGER
- PG_TS_CONFIG
- PG_TS_CONFIG_MAP
- PG_TS_DICT
- PG_TS_PARSER
- PG_TS_TEMPLATE
- PG_TYPE
- PG_USER_MAPPING
- PG_USER_STATUS
- PG_WORKLOAD_GROUP
- PLAN_TABLE_DATA
- STATEMENT_HISTORY
- 系统视图
- GS_SESSION_CPU_STATISTICS
- GS_SESSION_MEMORY_STATISTICS
- GS_SQL_COUNT
- GS_WLM_OPERATOR_HISTORY
- GS_WLM_OPERATOR_STATISTICS
- GS_WLM_PLAN_OPERATOR_HISTORY
- GS_WLM_REBUILD_USER_RESOURCE_POOL
- GS_WLM_RESOURCE_POOL
- GS_WLM_SESSION_HISTORY
- GS_WLM_SESSION_INFO_ALL
- GS_WLM_USER_INFO
- GS_WLM_SESSION_STATISTICS
- GS_STAT_SESSION_CU
- MPP_TABLES
- PG_AVAILABLE_EXTENSION_VERSIONS
- PG_AVAILABLE_EXTENSIONS
- PG_CURSORS
- PG_EXT_STATS
- PG_GET_INVALID_BACKENDS
- PG_GET_SENDERS_CATCHUP_TIME
- PG_GROUP
- PG_GTT_RELSTATS
- PG_GTT_STATS
- PG_GTT_ATTACHED_PIDS
- PG_INDEXES
- PG_LOCKS
- PG_MATVIEWS
- PG_NODE_ENV
- PG_OS_THREADS
- PG_PREPARED_STATEMENTS
- PG_PREPARED_XACTS
- PG_REPLICATION_SLOTS
- PG_RLSPOLICIES
- PG_ROLES
- PG_RULES
- PG_SECLABELS
- PG_SESSION_WLMSTAT
- PG_SESSION_IOSTAT
- PG_SETTINGS
- PG_SHADOW
- PG_STATS
- PG_STAT_ACTIVITY
- PG_STAT_ALL_INDEXES
- PG_STAT_ALL_TABLES
- PG_STAT_BAD_BLOCK
- PG_STAT_BGWRITER
- PG_STAT_DATABASE
- PG_STAT_DATABASE_CONFLICTS
- PG_STAT_USER_FUNCTIONS
- PG_STAT_USER_INDEXES
- PG_STAT_USER_TABLES
- PG_STAT_REPLICATION
- PG_STAT_SYS_INDEXES
- PG_STAT_SYS_TABLES
- PG_STAT_XACT_ALL_TABLES
- PG_STAT_XACT_SYS_TABLES
- PG_STAT_XACT_USER_FUNCTIONS
- PG_STAT_XACT_USER_TABLES
- PG_STATIO_ALL_INDEXES
- PG_STATIO_ALL_SEQUENCES
- PG_STATIO_ALL_TABLES
- PG_STATIO_SYS_INDEXES
- PG_STATIO_SYS_SEQUENCES
- PG_STATIO_SYS_TABLES
- PG_STATIO_USER_INDEXES
- PG_STATIO_USER_SEQUENCES
- PG_STATIO_USER_TABLES
- PG_THREAD_WAIT_STATUS
- PG_TABLES
- PG_TDE_INFO
- PG_TIMEZONE_NAMES
- PG_TOTAL_USER_RESOURCE_INFO
- PG_USER
- PG_USER_MAPPINGS
- PG_VIEWS
- PG_WLM_STATISTICS
- PLAN_TABLE
- GS_FILE_STAT
- GS_OS_RUN_INFO
- GS_REDO_STAT
- GS_SESSION_MEMORY
- GS_SESSION_MEMORY_DETAIL
- GS_SESSION_STAT
- GS_SESSION_TIME
- GS_THREAD_MEMORY_DETAIL
- GS_TOTAL_MEMORY_DETAIL
- PG_TIMEZONE_ABBREVS
- PG_TOTAL_USER_RESOURCE_INFO_OID
- PG_VARIABLE_INFO
- GS_INSTANCE_TIME
- 系统函数
- 支持的数据类型
- SQL 语法
- ABORT
- ALTER DATABASE
- ALTER DATA SOURCE
- ALTER DEFAULT PRIVILEGES
- ALTER DIRECTORY
- ALTER FOREIGN TABLE
- ALTER FUNCTION
- ALTER GROUP
- ALTER INDEX
- ALTER LARGE OBJECT
- ALTER MATERIALIZED VIEW
- ALTER ROLE
- ALTER ROW LEVEL SECURITY POLICY
- ALTER RULE
- ALTER SCHEMA
- ALTER SEQUENCE
- ALTER SERVER
- ALTER SESSION
- ALTER SYNONYM
- ALTER SYSTEM KILL SESSION
- ALTER SYSTEM SET
- ALTER TABLE
- ALTER TABLE PARTITION
- ALTER TABLESPACE
- ALTER TEXT SEARCH CONFIGURATION
- ALTER TEXT SEARCH DICTIONARY
- ALTER TRIGGER
- ALTER TYPE
- ALTER USER
- ALTER USER MAPPING
- ALTER VIEW
- ANALYZE | ANALYSE
- BEGIN
- CALL
- CHECKPOINT
- CLOSE
- CLUSTER
- COMMENT
- COMMIT | END
- COMMIT PREPARED
- COPY
- CREATE CLIENT MASTER KEY
- CREATE COLUMN ENCRYPTION KEY
- CREATE DATABASE
- CREATE DATA SOURCE
- CREATE DIRECTORY
- CREATE FOREIGN TABLE
- CREATE FUNCTION
- CREATE GROUP
- CREATE INDEX
- CREATE MATERIALIZED VIEW
- CREATE ROW LEVEL SECURITY POLICY
- CREATE PROCEDURE
- CREATE ROLE
- CREATE RULE
- CREATE SCHEMA
- CREATE SEQUENCE
- CREATE SERVER
- CREATE SYNONYM
- CREATE TABLE
- CREATE TABLE AS
- CREATE TABLE PARTITION
- CREATE TABLESPACE
- CREATE TEXT SEARCH CONFIGURATION
- CREATE TEXT SEARCH DICTIONARY
- CREATE TRIGGER
- CREATE TYPE
- CREATE USER
- CREATE USER MAPPING
- CREATE VIEW
- CURSOR
- DEALLOCATE
- DECLARE
- DELETE
- DO
- DROP CLIENT MASTER KEY
- DROP COLUMN ENCRYPTION KEY
- DROP DATABASE
- DROP DATA SOURCE
- DROP DIRECTORY
- DROP FOREIGN TABLE
- DROP FUNCTION
- DROP GROUP
- DROP INDEX
- DROP MATERIALIZED VIEW
- DROP OWNED
- DROP ROW LEVEL SECURITY POLICY
- DROP PROCEDURE
- DROP ROLE
- DROP RULE
- DROP SCHEMA
- DROP SEQUENCE
- DROP SERVER
- DROP SYNONYM
- DROP TABLE
- DROP TABLESPACE
- DROP TEXT SEARCH CONFIGURATION
- DROP TEXT SEARCH DICTIONARY
- DROP TRIGGER
- DROP TYPE
- DROP USER
- DROP USER MAPPING
- DROP VIEW
- EXECUTE
- EXPLAIN
- EXPLAIN PLAN
- FETCH
- GRANT
- INSERT
- LOCK
- MOVE
- MERGE INTO
- PREPARE
- PREPARE TRANSACTION
- REASSIGN OWNED
- REFRESH MATERIALIZED VIEW
- REINDEX
- RELEASE SAVEPOINT
- RESET
- REVOKE
- ROLLBACK
- ROLLBACK PREPARED
- ROLLBACK TO SAVEPOINT
- SAVEPOINT
- SELECT
- SELECT INTO
- SET
- SET CONSTRAINTS
- SET ROLE
- SET SESSION AUTHORIZATION
- SET TRANSACTION
- SHOW
- SHUTDOW
- START TRANSACTION
- TRUNCATE
- UPDATE
- VACUUM
- VALUES
- GUC参数说明
- DBE_PERF
- 概述
- OS
- Instance
- Memory
- File
- Object
- STAT_USER_TABLES
- SUMMARY_STAT_USER_TABLES
- GLOBAL_STAT_USER_TABLES
- STAT_USER_INDEXES
- SUMMARY_STAT_USER_INDEXES
- GLOBAL_STAT_USER_INDEXES
- STAT_SYS_TABLES
- SUMMARY_STAT_SYS_TABLES
- GLOBAL_STAT_SYS_TABLES
- STAT_SYS_INDEXES
- SUMMARY_STAT_SYS_INDEXES
- GLOBAL_STAT_SYS_INDEXES
- STAT_ALL_TABLES
- SUMMARY_STAT_ALL_TABLES
- GLOBAL_STAT_ALL_TABLES
- STAT_ALL_INDEXES
- SUMMARY_STAT_ALL_INDEXES
- GLOBAL_STAT_ALL_INDEXES
- STAT_DATABASE
- SUMMARY_STAT_DATABASE
- GLOBAL_STAT_DATABASE
- STAT_DATABASE_CONFLICTS
- SUMMARY_STAT_DATABASE_CONFLICTS
- GLOBAL_STAT_DATABASE_CONFLICTS
- STAT_XACT_ALL_TABLES
- SUMMARY_STAT_XACT_ALL_TABLES
- GLOBAL_STAT_XACT_ALL_TABLES
- STAT_XACT_SYS_TABLES
- SUMMARY_STAT_XACT_SYS_TABLES
- GLOBAL_STAT_XACT_SYS_TABLES
- STAT_XACT_USER_TABLES
- SUMMARY_STAT_XACT_USER_TABLES
- GLOBAL_STAT_XACT_USER_TABLES
- STAT_XACT_USER_FUNCTIONS
- SUMMARY_STAT_XACT_USER_FUNCTIONS
- GLOBAL_STAT_XACT_USER_FUNCTIONS
- STAT_BAD_BLOCK
- SUMMARY_STAT_BAD_BLOCK
- GLOBAL_STAT_BAD_BLOCK
- STAT_USER_FUNCTIONS
- SUMMARY_STAT_USER_FUNCTIONS
- GLOBAL_STAT_USER_FUNCTIONS
- Workload
- Session/Thread
- SESSION_STAT
- GLOBAL_SESSION_STAT
- SESSION_TIME
- GLOBAL_SESSION_TIME
- SESSION_MEMORY
- GLOBAL_SESSION_MEMORY
- SESSION_MEMORY_DETAIL
- GLOBAL_SESSION_MEMORY_DETAIL
- SESSION_STAT_ACTIVITY
- GLOBAL_SESSION_STAT_ACTIVITY
- THREAD_WAIT_STATUS
- GLOBAL_THREAD_WAIT_STATUS
- LOCAL_THREADPOOL_STATUS
- GLOBAL_THREADPOOL_STATUS
- SESSION_CPU_RUNTIME
- SESSION_MEMORY_RUNTIME
- STATEMENT_IOSTAT_COMPLEX_RUNTIME
- Transaction
- Query
- STATEMENT
- SUMMARY_STATEMENT
- STATEMENT_COUNT
- GLOBAL_STATEMENT_COUNT
- SUMMARY_STATEMENT_COUNT
- GLOBAL_STATEMENT_COMPLEX_HISTORY
- GLOBAL_STATEMENT_COMPLEX_HISTORY_TABLE
- GLOBAL_STATEMENT_COMPLEX_RUNTIME
- STATEMENT_RESPONSETIME_PERCENTILE
- STATEMENT_USER_COMPLEX_HISTORY
- STATEMENT_COMPLEX_RUNTIME
- STATEMENT_COMPLEX_HISTORY_TABLE
- STATEMENT_COMPLEX_HISTORY
- STATEMENT_WLMSTAT_COMPLEX_RUNTIME
- STATEMENT_HISTORY
- Cache/IO
- STATIO_USER_TABLES
- SUMMARY_STATIO_USER_TABLES
- GLOBAL_STATIO_USER_TABLES
- STATIO_USER_INDEXES
- SUMMARY_STATIO_USER_INDEXES
- GLOBAL_STATIO_USER_INDEXES
- STATIO_USER_SEQUENCES
- SUMMARY_STATIO_USER_SEQUENCES
- GLOBAL_STATIO_USER_SEQUENCES
- STATIO_SYS_TABLES
- SUMMARY_STATIO_SYS_TABLES
- GLOBAL_STATIO_SYS_TABLES
- STATIO_SYS_INDEXES
- SUMMARY_STATIO_SYS_INDEXES
- GLOBAL_STATIO_SYS_INDEXES
- STATIO_SYS_SEQUENCES
- SUMMARY_STATIO_SYS_SEQUENCES
- GLOBAL_STATIO_SYS_SEQUENCES
- STATIO_ALL_TABLES
- SUMMARY_STATIO_ALL_TABLES
- GLOBAL_STATIO_ALL_TABLES
- STATIO_ALL_INDEXES
- SUMMARY_STATIO_ALL_INDEXES
- GLOBAL_STATIO_ALL_INDEXES
- STATIO_ALL_SEQUENCES
- SUMMARY_STATIO_ALL_SEQUENCES
- GLOBAL_STATIO_ALL_SEQUENCES
- GLOBAL_STAT_DB_CU
- GLOBAL_STAT_SESSION_CU
- Utility
- REPLICATION_STAT
- GLOBAL_REPLICATION_STAT
- REPLICATION_SLOTS
- GLOBAL_REPLICATION_SLOTS
- BGWRITER_STAT
- GLOBAL_BGWRITER_STAT
- GLOBAL_CKPT_STATUS
- GLOBAL_DOUBLE_WRITE_STATUS
- GLOBAL_PAGEWRITER_STATUS
- GLOBAL_RECORD_RESET_TIME
- GLOBAL_REDO_STATUS
- GLOBAL_RECOVERY_STATUS
- CLASS_VITAL_INFO
- USER_LOGIN
- SUMMARY_USER_LOGIN
- GLOBAL_GET_BGWRITER_STATUS
- Lock
- Wait Events
- Configuration
- Operator
- Workload Manager
- Global Plancache
- 附录
- 数据库报错信息
- SQL标准错误码说明
- 第三方库错误码说明
- GAUSS-00001 - GAUSS-00100
- GAUSS-00101 - GAUSS-00200
- GAUSS 00201 - GAUSS 00300
- GAUSS 00301 - GAUSS 00400
- GAUSS 00401 - GAUSS 00500
- GAUSS 00501 - GAUSS 00600
- GAUSS 00601 - GAUSS 00700
- GAUSS 00701 - GAUSS 00800
- GAUSS 00801 - GAUSS 00900
- GAUSS 00901 - GAUSS 01000
- GAUSS 01001 - GAUSS 01100
- GAUSS 01101 - GAUSS 01200
- GAUSS 01201 - GAUSS 01300
- GAUSS 01301 - GAUSS 01400
- GAUSS 01401 - GAUSS 01500
- GAUSS 01501 - GAUSS 01600
- GAUSS 01601 - GAUSS 01700
- GAUSS 01701 - GAUSS 01800
- GAUSS 01801 - GAUSS 01900
- GAUSS 01901 - GAUSS 02000
- GAUSS 02001 - GAUSS 02100
- GAUSS 02101 - GAUSS 02200
- GAUSS 02201 - GAUSS 02300
- GAUSS 02301 - GAUSS 02400
- GAUSS 02401 - GAUSS 02500
- GAUSS 02501 - GAUSS 02600
- GAUSS 02601 - GAUSS 02700
- GAUSS 02701 - GAUSS 02800
- GAUSS 02801 - GAUSS 02900
- GAUSS 02901 - GAUSS 03000
- GAUSS 03001 - GAUSS 03100
- GAUSS 03101 - GAUSS 03200
- GAUSS 03201 - GAUSS 03300
- GAUSS 03301 - GAUSS 03400
- GAUSS 03401 - GAUSS 03500
- GAUSS 03501 - GAUSS 03600
- GAUSS 03601 - GAUSS 03700
- GAUSS 03701 - GAUSS 03800
- GAUSS 03801 - GAUSS 03900
- GAUSS 03901 - GAUSS 04000
- GAUSS 04001 - GAUSS 04100
- GAUSS 04101 - GAUSS 04200
- GAUSS 04201 - GAUSS 04300
- GAUSS 04301 - GAUSS 04400
- GAUSS 04401 - GAUSS 04500
- GAUSS 04501 - GAUSS 04600
- GAUSS 04601 - GAUSS 04700
- GAUSS 04701 - GAUSS 04800
- GAUSS 04801 - GAUSS 04900
- GAUSS 04901 - GAUSS 05000
- GAUSS 05001 - GAUSS 05100
- GAUSS 05101 - GAUSS 05200
- GAUSS 05201 - GAUSS 05300
- GAUSS 05301 - GAUSS 05400
- GAUSS 05401 - GAUSS 05500
- GAUSS 05501 - GAUSS 05600
- GAUSS 05601 - GAUSS 05700
- GAUSS 05701 - GAUSS 05800
- GAUSS 05801 - GAUSS 05900
- GAUSS 05901 - GAUSS 06000
- GAUSS 06001 - GAUSS 06100
- GAUSS 06101 - GAUSS 06200
- GAUSS 06201 - GAUSS 06300
- GAUSS 06301 - GAUSS 06400
- GAUSS 06401 - GAUSS 06500
- GAUSS 06501 - GAUSS 06600
- GAUSS 06601 - GAUSS 06700
- GAUSS 06701 - GAUSS 06800
- GAUSS 06801 - GAUSS 06900
- GAUSS 06901 - GAUSS 07000
- GAUSS 07001 - GAUSS 07100
- GAUSS 07101 - GAUSS 07200
- GAUSS 07201 - GAUSS 07300
- GAUSS 07301 - GAUSS 07400
- GAUSS 07401 - GAUSS 07480
- GAUSS 50000 - GAUSS 50999
- GAUSS 51000 - GAUSS 51999
- GAUSS 52000 - GAUSS 52999
- GAUSS 53000 - GAUSS 53699
- 系统表及系统视图
- 术语表
客户端接入认证
配置客户端接入认证
背景信息
如果主机需要远程连接数据库,必须在数据库系统的配置文件中增加此主机的信息,并且进行客户端接入认证。配置文件(默认名称为pg_hba.conf)存放在数据库的数据目录里。hba(host-based authentication)表示是基于主机的认证。
- 本产品支持如下三种认证方式,这三种方式都需要配置"pg_hba.conf"文件。
- 基于主机的认证: 服务器端根据客户端的IP地址、用户名及要访问的数据库来查看配置文件从而判断用户是否通过认证。
- 口令认证: 包括远程连接的加密口令认证和本地连接的非加密口令认证。
- SSL加密: 使用OpenSSL(开源安全通信库)提供服务器端和客户端安全连接的环境。
- "pg_hba.conf"文件的格式是一行写一条信息,表示一个认证规则,空白和注释(以#开头)被忽略。
- 每个认证规则是由若干空格和/,空格和制表符分隔的字段组成。如果字段用引号包围,则它可以包含空白。一条记录不能跨行存在。
操作步骤
-
以操作系统用户omm登录数据库主节点。
-
配置客户端认证方式,允许客户端以"jack"用户连接到本机,此处远程连接禁止使用"omm"用户(即数据库初始化用户)。
例如,下面示例中配置允许IP地址为10.10.0.30的客户端访问本机。
gs_guc reload -N all -I all -h "host all jack 10.10.0.30/32 sha256"
说明:
- 使用"jack"用户前,需先本地连接数据库,并在数据库中使用如下语句建立"jack"用户:
mogdb=# CREATE USER jack PASSWORD 'Test@123';
- -N all表示MogDB的所有主机。
- -I all表示主机的所有实例。
- -h表示指定需要在"pg_hba.conf"增加的语句。
- all表示允许客户端连接到任意的数据库。
- jack表示连接数据库的用户。
- 10.10.0.30/32表示只允许IP地址为10.10.0.30的主机连接。此处的IP地址不能为MogDB内的IP,在使用过程中,请根据用户的网络进行配置修改。32表示子网掩码为1的位数,即255.255.255.255。
- sha256表示连接时jack用户的密码使用sha256算法加密。
这条命令在数据库主节点实例对应的"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"文件时,请依据通讯需求按照格式内容从上至下配置记录,优先级高的需求需要配置在前面。MogDB和扩容配置的IP优先级最高,用户手动配置的IP请放在这二者之后,如果已经进行的客户配置和扩容节点的IP在同一网段,请在扩容前删除,扩容成功后再进行配置。
因此对于认证规则的配置建议如下:
- 靠前的记录有比较严格的连接参数和比较弱的认证方法。
- 靠后的记录有比较宽松的连接参数和比较强的认证方法。
说明:
- 一个用户要想成功连接到特定的数据库,不仅需要通过pg_hba.conf中的规则检查,还必须要有该数据库上的CONNECT权限。如果希望控制某些用户只能连接到指定数据库,赋予/撤销CONNECT权限通常比在pg_hba.conf中设置规则更为简单。
- 对应MogDB外部客户端连接,trust为不安全的认证方式,请将认证方式设置为sha256。
异常处理
用户认证失败有很多原因,通过服务器返回给客户端的提示信息,可以看到用户认证失败的原因。常见的错误提示请参见表1。
问题现象 | 解决方法 |
---|---|
用户名或密码错误: FATAL: invalid username/password,login denied |
这条信息说明用户名或者密码错误,请检查输入是否有误。 |
连接的数据库不存在: FATAL: database "TESTDB" does not exist |
这条信息说明尝试连接的数据库不存在,请检查连接的数据库名输入是否有误。 |
未找到客户端匹配记录: FATAL: no pg_hba.conf entry for host "10.10.0.60", user "ANDYM", database "TESTDB" |
这条信息说明已经连接了服务器,但服务器拒绝了连接请求,因为没有在它的pg_hba.conf配置文件里找到匹配的记录。请联系数据库管理员在pg_hba.conf配置文件加入用户的信息。 |
示例
TYPE DATABASE USER ADDRESS METHOD
#表示只允许在安装时-U参数指定的用户(默认是omm用户)从服务器本机进行连接。
local all o trust
IPv4 local connections:
#表示允许jack用户从10.10.0.50主机上连接到任意数据库,使用sha256算法对密码进行加密。
host all jack 10.10.0.50/32 sha256
#表示允许任何用户从10.10.0.0/24网段的主机上连接到任意数据库,使用sha256算法对密码进行加密,并且经过SSL加密传输。
hostssl all all 10.10.0.0/24 sha256
#表示允许任何用户从10.10.0.0/24网段的主机上连接到任意数据库,使用Kerberos认证方式,当前版本暂不支持客户端kerberos认证。
host all all 10.10.0.0/24 gss include_realm=1 krb_realm=HADOOP.COM
配置文件参考
表 1 参数说明
参数名称 | 描述 | 取值范围 |
---|---|---|
local | 表示这条记录只接受通过Unix域套接字进行的连接。没有这种类型的记录,就不允许Unix域套接字的连接。 只有在从服务器本机使用gsql连接且在不指定-U参数的情况下,才是通过Unix域套接字连接。 |
- |
host | 表示这条记录既接受一个普通的TCP/IP套接字连接,也接受一个经过SSL加密的TCP/IP套接字连接。 | - |
hostssl | 表示这条记录只接受一个经过SSL加密的TCP/IP套接字连接。 | 用SSL进行安全的连接,需要配置申请数字证书并配置相关参数,详细信息请参见用SSL进行安全的TCP/IP连接。 |
hostnossl | 表示这条记录只接受一个普通的TCP/IP套接字连接。 | - |
DATABASE | 声明记录所匹配且允许访问的数据库。 | - all: 表示该记录匹配所有数据库。 - sameuser: 表示如果请求访问的数据库和请求的用户同名,则匹配。 - samerole: 表示请求的用户必须是与数据库同名角色中的成员。 - samegroup: 与samerole作用完全一致,表示请求的用户必须是与数据库同名角色中的成员。 - 一个包含数据库名的文件或者文件中的数据库列表: 文件可以通过在文件名前面加前缀@来声明。文件中的数据库列表以逗号或者换行符分隔。 - 特定的数据库名称或者用逗号分隔的数据库列表。 说明: 值replication表示如果请求一个复制链接,则匹配,但复制链接不表示任何特定的数据库。如需使用名为replication的数据库,需在database列使用记录"replication"作为数据库名。 |
USER | 声明记录所匹配且允许访问的数据库用户。 | - all: 表明该记录匹配所有用户。 - +用户角色: 表示匹配任何直接或者间接属于这个角色的成员。 说明: +表示前缀符号。 - 一个包含用户名的文件或者文件中的用户列表: 文件可以通过在文件名前面加前缀@来声明。文件中的用户列表以逗号或者换行符分隔。 - 特定的数据库用户名或者用逗号分隔的用户列表。 |
ADDRESS | 指定与记录匹配且允许访问的IP地址范围。 | 支持IPv4和IPv6,可以使用如下两种形式来表示: - IP地址/掩码长度。例如,10.10.0.0/24 - IP地址子网掩码。例如,10.10.0.0 255.255.255.0 说明: 以IPv4格式给出的IP地址会匹配那些拥有对应地址的IPv6连接,比如127.0.0.1将匹配IPv6地址 ::ffff:127.0.0.1 |
METHOD | 声明连接时使用的认证方法。 | 本产品支持如下几种认证方式,详细解释请参见表2: - trust - reject - md5(不推荐使用,默认不支持,可通过password_encryption_type参数配置) - sha256 - cert - gss(仅用于MogDB内部节点间认证) |
认证方式 | 说明 |
---|---|
trust | 采用这种认证模式时,本产品只完全信任从服务器本机使用gsql且不指定-U参数的连接,此时不需要口令。 trust认证对于单用户工作站的本地连接是非常合适和方便的,通常不适用于多用户环境。如果想使用这种认证方法,可利用文件系统权限限制对服务器的Unix域套接字文件的访问。要使用这种限制有两个方法: - 设置参数unix_socket_permissions和unix_socket_group。 - 设置参数unix_socket_directory,将Unix域套接字文件放在一个经过恰当限制的目录里。 须知: 设置文件系统权限只能Unix域套接字连接,它不会限制本地TCP/IP连接。为保证本地TCP/IP安全,MogDB不允许远程连接使用trust认证方法。 |
reject | 无条件地拒绝连接。常用于过滤某些主机。 |
md5 | 要求客户端提供一个md5加密的口令进行认证。 须知: 不推荐使用md5认证,因为md5为不安全的加密算法,存在网络安全风险。MogDB保留md5认证和密码存储,是为了便于第三方工具的使用(比如TPCC评测工具)。 |
sha256 | 要求客户端提供一个sha256算法加密的口令进行认证,该口令在传送过程中结合salt(服务器发送给客户端的随机数)的单向sha256加密,增强了安全性。 |
cert | 客户端证书认证模式,此模式需进行SSL连接配置且需要客户端提供有效的SSL证书,不需要提供用户密码。 须知: 该认证方式只支持hostssl类型的规则。 |
gss | 使用基于gssapi的kerberos认证。 须知: - 该认证方式依赖kerberos server等组件,仅支持MogDB内部通信认证。当前版本暂不支持外部客户端通过kerberos认证连接。 - 开启MogDB内部kerberos认证会使增加内部节点建连时间,即影响首次涉及内部建连的SQL操作性能,内部连接建立好后, 后续操作不受影响。 |
用SSL进行安全的TCP/IP连接
背景信息
MogDB支持SSL标准协议(TLS 1.2),SSL协议是安全性更高的协议标准,它们加入了数字签名和数字证书来实现客户端和服务器的双向身份验证,保证了通信双方更加安全的数据传输。
前提条件
从CA认证中心申请到正式的服务器、客户端的证书和密钥。(假设服务器的私钥为server.key,证书为server.crt,客户端的私钥为client.key,证书为client.crt,CA根证书名称为cacert.pem。)
**注意事项**
- 当用户远程连接到数据库主节点时,需要使用sha256的认证方式。
- 当内部服务器之间连接时,需要使用trust的认证方式,支持IP白名单认证。
**操作步骤**
MogDB在MogDB部署完成后,默认已开启SSL认证模式。服务器端证书,私钥以及根证书已经默认配置完成。用户需要配置客户端的相关参数。
配置SSL认证相关的数字证书参数,具体要求请参见表1。
-
配置客户端参数。
已从CA认证中心申请到客户端默认证书,私钥,根证书以及私钥密码加密文件。假设证书、私钥和根证书都放在"/home/omm"目录。
双向认证需配置如下参数:
export PGSSLCERT="/home/omm/client.crt" export PGSSLKEY="/home/omm/client.key" export PGSSLMODE="verify-ca" export PGSSLROOTCERT="/home/omm/cacert.pem"
单向认证需要配置如下参数:
export PGSSLMODE="verify-ca" export PGSSLROOTCERT="/home/omm/cacert.pem"
-
修改客户端密钥的权限。
客户端根证书,密钥,证书以及密钥密码加密文件的权限,需保证权限为600。如果权限不满足要求,则客户端无法以SSL连接到MogDB。
hmod 600 client.key hmod 600 client.crt hmod 600 client.key.cipher hmod 600 client.key.rand hmod 600 cacert.pem
须知: 从安全性考虑,建议使用双向认证方式。 配置客户端环境变量,必须包含文件的绝对路径。
认证方式 | 含义 | 配置客户端环境变量 | 维护建议 |
---|---|---|---|
双向认证(推荐) | 客户端验证服务器证书的有效性,同时服务器端也要验证客户端证书的有效性,只有认证成功,连接才能建立。 | 设置如下环境变量: - PGSSLCERT - PGSSLKEY - PGSSLROOTCERT - PGSSLMODE |
该方式应用于安全性要求较高的场景。使用此方式时,建议设置客户端的PGSSLMODE变量为verify-ca。确保了网络数据的安全性。 |
单向认证 | 客户端只验证服务器证书的有效性,而服务器端不验证客户端证书的有效性。服务器加载证书信息并发送给客户端,客户端使用根证书来验证服务器端证书的有效性。 | 设置如下环境变量: - PGSSLROOTCERT - PGSSLMODE |
为防止基于TCP链接的欺骗,建议使用SSL证书认证功能。除配置客户端根证书外,建议客户端使用PGSSLMODE变量为verify-ca方式连接。 |
**相关参考**
在服务器端的postgresql.conf文件中配置相关参数,详细信息请参见表2。
参数 | 描述 | 取值范围 |
---|---|---|
ssl | 表示是否启动SSL功能。 | - on: 开启SSL功能。 - off: 关闭SSL功能。 默认值: on |
require_ssl | 设置服务器端是否强制要求SSL连接。该参数只有当参数ssl为on时才有效。 | - on: 服务器端强制要求SSL连接。 - off: 服务器端对是否通过SSL连接不作强制要求。 默认值: off |
ssl_cert_file | 指定服务器证书文件,包含服务器端的公钥。服务器证书用以表明服务器身份的合法性,公钥将发送给对端用来对数据进行加密。 | 请以实际的证书名为准。必须使用相对路径,相对路径是相对于数据目录的。 默认值: server.crt |
ssl_key_file | 指定服务器私钥文件,用以对公钥加密的数据进行解密。 | 请以实际的服务器私钥名称为准。必须使用相对路径,相对路径是相对于数据目录的。 默认值: server.key |
ssl_ca_file | CA服务器的根证书。此参数可选择配置,需要验证客户端证书的合法性时才需要配置。 | 请以实际的CA服务器根证书名称为准。 默认值: cacert.pem |
ssl_crl_file | 证书吊销列表,如果客户端证书在该列表中,则当前客户端证书被视为无效证书。 | 请以实际的证书吊销列表名称为准。 默认值: 空,表示没有吊销列表。 |
ssl_ciphers | SSL通讯使用的加密算法。 | 本产品支持的加密算法的详细信息请参见表4。 默认值: ALL,表示允许对端使用产品支持的所有加密算法,但不包含ADH、LOW、EXP、MD5算法。 |
在客户端配置SSL认证相关的环境变量,详细信息请参见表3。
说明: 客户端环境变量的路径以"/home/omm"为例,在实际操作中请使用实际路径进行替换。
环境变量 | 描述 | 取值范围 |
---|---|---|
PGSSLCERT | 指定客户端证书文件,包含客户端的公钥。客户端证书用以表明客户端身份的合法性,公钥将发送给对端用来对数据进行加密。 | 必须包含文件的绝对路径,如: export PGSSLCERT='/home/omm/client.crt' 默认值: 空 |
PGSSLKEY | 指定客户端私钥文件,用以对公钥加密的数据进行解密。 | 必须包含文件的绝对路径,如: export PGSSLKEY='/home/omm/client.key' 默认值: 空 |
PGSSLMODE | 设置是否和服务器进行SSL连接协商,以及指定SSL连接的优先级。 | 取值及含义: - disable: 只尝试非SSL连接。 - allow: 首先尝试非SSL连接,如果连接失败,再尝试SSL连接。 - prefer: 首先尝试SSL连接,如果连接失败,将尝试非SSL连接。 - require: 只尝试SSL连接。如果存在CA文件,则按设置成verify-ca的方式验证。 - verify-ca: 只尝试SSL连接,并且验证服务器是否具有由可信任的证书机构签发的证书。 - verify-full: 只尝试SSL连接,并且验证服务器是否具有由可信任的证书机构签发的证书,以及验证服务器主机名是否与证书中的一致。 默认值: prefer |
PGSSLROOTCERT | 指定为客户端颁发证书的根证书文件,根证书用于验证服务器证书的有效性。 | 必须包含文件的绝对路径,如: export PGSSLROOTCERT='/home/omm/certca.pem' 默认值: 空 |
PGSSLCRL | 指定证书吊销列表文件,用于验证服务器证书是否在废弃证书列表中,如果在,则服务器证书将会被视为无效证书。 | 必须包含文件的绝对路径,如: export PGSSLCRL='/home/omm/sslcrl-file.crl' 默认值: 空 |
服务器端参数ssl、require_ssl与客户端参数sslmode配置组合结果如下:
ssl(服务器) | sslmode(客户端) | require_ssl(服务器) | 结果 |
---|---|---|---|
on | disable | on | 由于服务器端要求使用SSL,但客户端针对该连接禁用了SSL,因此无法建立连接。 | disable | off | 连接未加密。 |
allow | on | 连接经过加密。 | allow | off | 连接未加密。 |
prefer | on | 连接经过加密。 | prefer | off | 连接经过加密。 |
require | on | 连接经过加密。 | require | off | 连接经过加密。 |
verify-ca | on | 连接经过加密,且验证了服务器证书。 | verify-ca | off | 连接经过加密,且验证了服务器证书。 |
verify-full | on | 连接经过加密,且验证了服务器证书和主机名。 | |
verify-full | off | 连接经过加密,且验证了服务器证书和主机名。 | |
off | disable | on | 连接未加密。 | disable | off | 连接未加密。 |
allow | on | 连接未加密。 | allow | off | 连接未加密。 |
prefer | on | 连接未加密。 | prefer | off | 连接未加密。 |
require | on | 由于客户端要求使用SSL,但服务器端禁用了SSL,因此无法建立连接。 | require | off | 由于客户端要求使用SSL,但服务器端禁用了SSL,因此无法建立连接。 |
verify-ca | on | 由于客户端要求使用SSL,但服务器端禁用了SSL,因此无法建立连接。 | verify-ca | off | 由于客户端要求使用SSL,但服务器端禁用了SSL,因此无法建立连接。 |
verify-full | on | 由于客户端要求使用SSL,但服务器端禁用了SSL,因此无法建立连接。 | |
verify-full | off | 由于客户端要求使用SSL,但服务器端禁用了SSL,因此无法建立连接。 |
SSL传输支持一系列不同强度的加密和认证算法。用户可以通过修改postgresql.conf中的ssl_ciphers参数指定数据库服务器使用的加密算法。目前本产品SSL支持的加密算法如表4所示。
加密强度 | 安全程度 | 加密算法描述 |
---|---|---|
stronger | high | DHE-RSA-AES256-GCM-SHA384 |
stronger | high | DHE-RSA-AES128-GCM-SHA256 |
stronger | high | DHE-DSS-AES256-GCM-SHA384 |
stronger | high | DHE-DSS-AES128-GCM-SHA256 |
stronger | medium | DHE-RSA-AES256-SHA256 |
stronger | medium | DHE-RSA-AES128-SHA256 |
stronger | medium | DHE-DSS-AES256-SHA256 |
stronger | medium | DHE-DSS-AES128-SHA256 |
stronger | high | DHE-RSA-AES256-CCM |
stronger | high | DHE-RSA-AES128-CCM |
stronger | medium | DHE-RSA-AES256-SHA |
stronger | medium | DHE-RSA-AES128-SHA |
stronger | medium | DHE-DSS-AES256-SHA |
stronger | medium | DHE-DSS-AES128-SHA |
说明:
SSL目前只支持加密强度在strong以上的加密算法。
配置参数ssl_ciphers的默认值为ALL,表示支持上表中的所有加密算法。如果对加密算法没有特殊要求,建议用户使用该默认值。
如指定以上多种加密,加密算法之间需要使用分号分割。
如在postgresql.conf设置ssl_ciphers='DHE-RSA-AES256-GCM-SHA384;DHE-RSA-AES256-SHA256;DHE-RSA-AES256-CCM'
如果要使用上表中和DSS相关的加密算法(如DHE-DSS-AES256-GCM-SHA384、DHE-DSS-AES256-SHA256、DHE-DSS-AES256-SHA等)必须加载使用DSA算法签名的证书文件。如何使用openssl产生DSA算法签名的证书文件,请参见openssl官方文档。
SSL连接认证不仅增加了登录(创建SSL环境)及退出过程(清理SSL环境)的时间消耗,同时需要消耗额外的时间用于加解密所需传输的内容,因此对性能有一定影响。特别的,对于频繁的登录登出,短时查询等场景有较大的影响。
在证书有效期小于7天的时候,连接登录会在日志中产生告警提醒。
用SSH隧道进行安全的TCP/IP连接
背景信息
为了保证服务器和客户端之间的安全通讯,可以在服务器和客户端之间构建安全的SSH隧道。SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。
从SSH客户端来看,SSH提供了两种级别的安全验证:
- 基于口令的安全验证: 使用帐号和口令登录到远程主机。所有传输的数据都会被加密,但是不能保证正在连接的服务器就是需要连接的服务器。可能会有其他服务器冒充真正的服务器,也就是受到"中间人"方式的攻击。
- 基于密钥的安全验证: 用户必须为自己创建一对密钥,并把公用密钥放在需要访问的服务器上。这种级别的认证不仅加密所有传送的数据,而且避免"中间人"攻击方式。但是整个登录的过程可能需要10秒。
**前提条件**
SSH服务和数据库运行在同一台服务器上。
**操作步骤**
以OpenSSH为例介绍配置SSH隧道,对于如何配置基于密钥的安全验证不作赘述,OpenSSH提供了多种配置适应网络的各种限制,更多详细信息请参考OpenSSH的相关文档。
从本地主机建立到服务器的SSH隧道。
ssh -L 63333:localhost:8000 username@hostIP
说明:
- -L参数的第一串数字(63333)是通道本端的端口号,可以自由选择。
- 第二串数字(8000)是通道远端的端口号,也就是服务器使用的端口号。
- localhost是本机IP地址,username是要连接的服务器上的用户名,hostIP是要连接的主机IP地址。
查看数据库连接数
背景信息
当用户连接数达到上限后,无法建立新的连接。因此,当数据库管理员发现某用户无法连接到数据库时,需要查看是否连接数达到了上限。控制数据库连接的主要以下几种选项。
- 全局的最大连接数: 由运行参数max_connections指定,默认值为5000。
- 某用户的连接数: 在创建用户时由CREATE ROLE命令的CONNECTION LIMIT connlimit子句直接设定,也可以在设定以后用ALTER ROLE的CONNECTION LIMIT connlimit子句修改。
- 某数据库的连接数: 在创建数据库时,由CREATE DATABASE的CONNECTION LIMIT connlimit参数指定。
操作步骤
-
以操作系统用户omm登录数据库主节点。
-
使用如下命令连接数据库。
gsql -d mogdb -p 8000
mogdb为需要连接的数据库名称,8000为数据库主节点的端口号。
连接成功后,系统显示类似如下信息:
gsql ((MogDB 1.1.0 build 5be05d82) compiled at 2020-05-08 02:59:43 commit 2143 last mr 131) Non-SSL connection (SSL connection is recommended when requiring high-security) Type "help" for help. mogdb=#
-
查看全局会话连接数限制。
mogdb=# SHOW max_connections; max_connections ----------------- 800 (1 row)
其中800是最大会话连接数。
-
查看已使用的会话连接数。 具体命令请参见表1。
须知: 除了创建的时候用双引号引起的数据库和用户名称外,以下命令中用到的数据库名称和用户名称,其中包含的英文字母必须使用小写。
描述 命令 查看指定用户的会话连接数上限。 执行如下命令查看连接到指定用户omm的会话连接数上限。其中-1表示没有对用户omm设置连接数的限制。
mogdb=# SELECT ROLNAME,ROLCONNLIMIT FROM PG_ROLES WHERE ROLNAME='omm';
rolname | rolconnlimit
----+-----
omm | -1
(1 row)查看指定用户已使用的会话连接数。 执行如下命令查看指定用户omm已使用的会话连接数。其中,1表示omm已使用的会话连接数。
mogdb=# CREATE OR REPLACE VIEW DV_SESSIONS AS
SELECT
sa.sessionid AS SID,
0::integer AS SERIAL#,
sa.usesysid AS USER#,
ad.rolname AS USERNAME
FROM pg_stat_get_activity(NULL) AS sa
LEFT JOIN pg_authid ad ON(sa.usesysid = ad.oid)
WHERE sa.application_name <> 'JobScheduler';
mogdb=# SELECT COUNT() FROM DV_SESSIONS WHERE USERNAME='omm';
count
--------
1
(1 row)查看指定数据库的会话连接数上限。 执行如下命令查看连接到指定数据库mogdb的会话连接数上限。其中-1表示没有对数据库mogdb设置连接数的限制。
mogdb=# SELECT DATNAME,DATCONNLIMIT FROM PG_DATABASE WHERE DATNAME='mogdb'; datname | datconnlimit
----+-----
mogdb | -1
(1 row)查看指定数据库已使用的会话连接数。 执行如下命令查看指定数据库mogdb上已使用的会话连接数。其中,1表示数据库mogdb上已使用的会话连接数。
mogdb=# SELECT COUNT() FROM PG_STAT_ACTIVITY WHERE DATNAME='mogdb';
count
--------
1
(1 row)查看所有用户已使用会话连接数。 执行如下命令查看所有用户已使用的会话连接数。
mogdb=# CREATE OR REPLACE VIEW DV_SESSIONS AS
SELECT
sa.sessionid AS SID,
0::integer AS SERIAL#,
sa.usesysid AS USER#,
ad.rolname AS USERNAME
FROM pg_stat_get_activity(NULL) AS sa
LEFT JOIN pg_authid ad ON(sa.usesysid = ad.oid)
WHERE sa.application_name <> 'JobScheduler';
mogdb=# SELECT COUNT(*) FROM DV_SESSIONS;
count
--------
10
(1 row)
SSL证书管理
MogDB默认配置了通过openssl生成的安全证书、私钥。并且提供证书替换的接口,方便用户进行证书的替换。
证书生成
操作场景
在测试环境下,用户可以用通过以下方式进行数字证书测试。在客户的运行环境中,请使用从CA认证中心申请的数字证书。
**前提条件**
Linux环境安装了openssl组件。
**自认证证书生成过程**
-
搭建CA环境。
--假设用户为omm已存在,搭建CA的路径为test --以root用户身份登录Linux环境,切换到用户omm mkdir test cd /etc/pki/tls --copy 配置文件openssl.cnf到test下 cp openssl.cnf ~/test cd ~/test --到test文件夹下,开始搭建CA环境 --创建文件夹demoCA./demoCA/newcerts./demoCA/private mkdir ./demoCA ./demoCA/newcerts ./demoCA/private chmod 777 ./demoCA/private --创建serial文件,写入01 echo '01'>./demoCA/serial --创建文件index.txt touch ./demoCA/index.txt --修改openssl.cnf配置文件中的参数 dir = ./demoCA default_md = sha256 --至此CA环境搭建完成
-
生成根私钥。
--生成CA私钥 openssl genrsa -aes256 -out demoCA/private/cakey.pem 2048 Generating RSA private key, 2048 bit long modulus .................+++ ..................+++ e is 65537 (0x10001) --设置根私钥的保护密码,最少要求4个字符,假设为Test@123 Enter pass phrase for demoCA/private/cakey.pem: --再次输入私钥密码 Test@123 Verifying - Enter pass phrase for demoCA/private/cakey.pem:
-
生成根证书请求文件。
--生成CA根证书申请文件careq.pem openssl req -config openssl.cnf -new -key demoCA/private/cakey.pem -out demoCA/careq.pem Enter pass phrase for demoCA/private/cakey.pem: --输入根私钥密码 Test@123 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]:Abc Organizational Unit Name (eg, section) []:hello --Common Name可以随意命名 Common Name (eg, YOUR name) []:world --Email可以选择性填写 Email Address []: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:
-
生成自签发根证书。
--生成根证书时,需要修改openssl.cnf文件,设置basicConstraints=CA:TRUE vi openssl.cnf --生成CA自签发根证书 openssl ca -config openssl.cnf -out demoCA/cacert.pem -keyfile demoCA/private/cakey.pem -selfsign -infiles demoCA/careq.pem Using configuration from openssl.cnf Enter pass phrase for demoCA/private/cakey.pem: --输入根私钥密码 Test@123 Check that the request matches the signature Signature ok Certificate Details: Serial Number: 1 (0x1) Validity Not Before: Feb 28 02:17:11 2017 GMT Not After : Feb 28 02:17:11 2018 GMT Subject: countryName = CN stateOrProvinceName = shanxi organizationName = Abc organizationalUnitName = hello commonName = world X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: F9:91:50:B2:42:8C:A8:D3:41:B0:E4:42:CB:C2:BE:8D:B7:8C:17:1F X509v3 Authority Key Identifier: keyid:F9:91:50:B2:42:8C:A8:D3:41:B0:E4:42:CB:C2:BE:8D:B7:8C:17:1F Certificate is to be certified until Feb 28 02:17:11 2018 GMT (365 days) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated --至此CA根证书自签发完成,根证书demoCA/cacert.pem。
-
生成服务端证书私钥。
--生成服务器私钥文件server.key openssl genrsa -aes256 -out server.key 2048 Generating a 2048 bit RSA private key .......++++++ ..++++++ e is 65537 (0x10001) Enter pass phrase for server.key: --服务器私钥的保护密码,最少要求4个字符,假设为Test@123 Verifying - Enter pass phrase for server.key: --再次确认服务器私钥的保护密码,即为Test@123
-
生成服务端证书请求文件。
--生成服务器证书请求文件server.req openssl req -config openssl.cnf -new -key server.key -out server.req Enter pass phrase for server.key: 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]:Abc Organizational Unit Name (eg, section) []:hello --Common Name可以随意命名 Common Name (eg, YOUR name) []:world Email Address []: --以下信息可以选择性填写 Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:
-
生成服务端证书。
--生成服务端/客户端证书时,修改openssl.cnf文件,设置basicConstraints=CA:FALSE vi openssl.cnf --修改demoCA/index.txt.attr中属性为no。 vi demoCA/index.txt.attr --对生成的服务器证书请求文件进行签发,签发后将生成正式的服务器证书server.crt openssl ca -config openssl.cnf -in server.req -out server.crt -days 3650 -md sha256 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: 2 (0x2) Validity Not Before: Feb 27 10:11:12 2017 GMT Not After : Feb 25 10:11:12 2027 GMT Subject: countryName = CN stateOrProvinceName = shanxi organizationName = Abc organizationalUnitName = hello commonName = world X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: EB:D9:EE:C0:D2:14:48:AD:EB:BB:AD:B6:29:2C:6C:72:96:5C:38:35 X509v3 Authority Key Identifier: keyid:84:F6:A1:65:16:1F:28:8A:B7:0D:CB:7E:19:76:2A:8B:F5:2B:5C:6A Certificate is to be certified until Feb 25 10:11:12 2027 GMT (3650 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
去掉私钥密码保护,方法如下:
--去掉服务器私钥的密码保护 openssl rsa -in server.key -out server.key --如果不去掉服务器私钥的密码保护需要使用gs_guc工具对存储密码进行加密保护 gs_guc encrypt -M server -K Test@123 -D ./ --gs_guc加密后会生成server.key.cipher,server.key.rand两个私钥密码保护文件
-
客户端证书,私钥的生成。
生成客户端证书和客户端私钥的方法和要求与服务器相同。
--生成客户端私钥 openssl genrsa -aes256 -out client.key 2048 --生成客户端证书请求文件 openssl req -config openssl.cnf -new -key client.key -out client.req --对生成的客户端证书请求文件进行签发,签发后将生成正式的客户端证书client.crt openssl ca -config openssl.cnf -in client.req -out client.crt -days 3650 -md sha256
去掉私钥密码保护,方法如下:
--去掉客户端私钥的密码保护 openssl rsa -in client.key -out client.key --如果不去掉客户端私钥的密码保护需要使用gs_guc工具对存储密码进行加密保护 gs_guc encrypt -M client -K Test@123 -D ./ gs_guc加密后会生成client.key.cipher,client.key.rand两个私钥密码保护文件。
将客户端密钥转化为DER格式,方法如下:
openssl pkcs8 -topk8 -outform DER -in client.key -out client.key.pk8 -nocrypt
-
吊销证书列表的生成。
如果需要吊销列表,可按照如下方法生成:
--首先创建crlnumber文件 echo '00'>./demoCA/crlnumber --吊销服务器证书 openssl ca -config openssl.cnf -revoke server.crt --生成证书吊销列表sslcrl-file.crl openssl ca -config openssl.cnf -gencrl -out sslcrl-file.crl
证书替换
操作场景
MogDB默认配置了SSL连接所需要的安全的证书、私钥,用户如果需要替换为自己的证书、私钥则可按照此方法进行替换。
**前提条件**
用户需要从CA认证中心申请到正式的服务器、客户端的证书和密钥。
**注意事项**
MogDB目前只支持X509v3的PEM格式证书。
**操作步骤**
-
准备证书、私钥。
服务端各个配置文件名称约定:
-
证书名称约定: server.crt。
-
私钥名称约定: server.key。
-
私钥密码加密文件约定: server.key.cipher、server.key.rand。
客户端各个配置文件名称约定:
- 证书名称约定: client.crt。
- 私钥名称约定: client.key。
- 私钥密码加密文件约定: client.key.cipher、client.key.rand。
- 根证书名称约定: cacert.pem。
- 吊销证书列表文件名称约定: sslcrl-file.crl。
-
-
制作压缩包。
压缩包名称约定: db-cert-replacement.zip。
压缩包格式约定: ZIP。
压缩包文件列表约定: server.crt、server.key、server.key.cipher、server.key.rand、client.crt、client.key、client.key.cipher、client.key. rand、cacert.pem。如果需要配置吊销证书列表,则列表中包含sslcrl-file.crl。
-
调用接口,执行替换。
a. 将制作好的压缩包db-cert-replacement.zip上传到MogDB用户下的任意路径。
例如: /home/xxxx/db-cert-replacement.zip。
b. 调用如下命令进行替换。
gs_om -t cert --cert-file= /home/xxxx/db-cert-replacement.zip
-
重启MogDB。
gs_om -t stop gs_om -t start
说明: 证书具有rollback功能,可以把上一次执行证书替换之前的证书,进行回退。可以使用gs_om -t cert -rollback进行远程调用该接口;使用gs_om -t cert -rollback -L进行本地调用该接口。以上一次成功执行证书替换后,被替换的证书版本为基础进行回退。