From fee461830bbb6db051532515f1c1044e20bdf8d9 Mon Sep 17 00:00:00 2001 From: spaceoddity91719 Date: Thu, 21 Apr 2022 16:33:45 +0800 Subject: [PATCH] =?UTF-8?q?3.0=E5=AE=89=E5=85=A8=E6=8C=87=E5=8D=97+release?= =?UTF-8?q?=20note=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../v3.0/about-mogdb/mogdb-release-notes.md | 2 - .../v3.0/about-mogdb/mogdb-release-notes.md | 4 +- .../1-client-access-authentication.md | 59 ++++---- .../2-managing-users-and-their-permissions.md | 24 +++- .../security/3-configuring-database-audit.md | 133 +++++++++--------- .../4-setting-encrypted-equality-query.md | 4 +- .../security/5-setting-a-ledger-database.md | 22 +-- .../security/6-transparent-data-encryption.md | 88 ++++++++++++ product/zh/docs-mogdb/v3.0/toc.md | 1 + product/zh/docs-mogdb/v3.0/toc_secure.md | 1 + 10 files changed, 210 insertions(+), 128 deletions(-) create mode 100644 product/zh/docs-mogdb/v3.0/security-guide/security/6-transparent-data-encryption.md diff --git a/product/en/docs-mogdb/v3.0/about-mogdb/mogdb-release-notes.md b/product/en/docs-mogdb/v3.0/about-mogdb/mogdb-release-notes.md index 29239b73..b944731c 100644 --- a/product/en/docs-mogdb/v3.0/about-mogdb/mogdb-release-notes.md +++ b/product/en/docs-mogdb/v3.0/about-mogdb/mogdb-release-notes.md @@ -104,8 +104,6 @@ MogDB version 3.0 is further enhanced based on MogDB version 2.1 and incorporate - Ordinary indexes for such scenarios require the creation of multiple indexes, which can have a significant impact on space usage and insertion and update speed - At this point, you can create a BLOOM index uniformly on all these fields that may be used for query, to obtain a balance of space and query speed, 10GB table scan can be completed in about 1s -##### 2.5.3.3 Reduces the difficulty of migrating PostgreSQL applications that use such indexes to MogDB -
## 3. Modified Defects diff --git a/product/zh/docs-mogdb/v3.0/about-mogdb/mogdb-release-notes.md b/product/zh/docs-mogdb/v3.0/about-mogdb/mogdb-release-notes.md index 1c5dd6f2..4a2cf20b 100644 --- a/product/zh/docs-mogdb/v3.0/about-mogdb/mogdb-release-notes.md +++ b/product/zh/docs-mogdb/v3.0/about-mogdb/mogdb-release-notes.md @@ -92,7 +92,7 @@ MogDB 3.0版本基于MogDB 2.1版本进一步增强,并合入了openGauss 3.0. #### 2.5.3 PostgreSQL兼容增强 -##### 2.5.3.1 新增BRIN INDEX (PostgreSQL 9.5开始支持) +##### 2.5.3.1 新增BRIN INDEX(PostgreSQL 9.5开始支持) - 数据块范围的索引,相比于精准的BTREE索引,BRIN INDEX提供了一个以较小空间消耗获得一个相对较快查询速度的平衡 - 1GB的表,无索引,查询单条4s;BTREE索引200MB空间,查询4ms;BRIN索引800K,查询58ms; @@ -104,8 +104,6 @@ MogDB 3.0版本基于MogDB 2.1版本进一步增强,并合入了openGauss 3.0. - 普通索引应对此类场景,需要创建多个索引,对于空间占用和插入更新速度都会有较大影响 - 此时可以在所有这些可能用于查询的字段上统一创建一个BLOOM索引,获得空间和查询速度的平衡,10GB表的扫描可以1s左右完成 -##### 2.5.3.3 降低了使用此类索引的PostgreSQL应用迁移到MogDB的难度 -
## 3. 修复缺陷 diff --git a/product/zh/docs-mogdb/v3.0/security-guide/security/1-client-access-authentication.md b/product/zh/docs-mogdb/v3.0/security-guide/security/1-client-access-authentication.md index 45e07cc7..79828d6f 100644 --- a/product/zh/docs-mogdb/v3.0/security-guide/security/1-client-access-authentication.md +++ b/product/zh/docs-mogdb/v3.0/security-guide/security/1-client-access-authentication.md @@ -167,7 +167,7 @@ MogDB支持SSL标准协议(TLS 1.2),SSL协议是安全性更高的协议 **操作步骤** -MogDB在MogDB部署完成后,默认已开启SSL认证模式。服务器端证书,私钥以及根证书已经默认配置完成。用户需要配置客户端的相关参数。 +MogDB在服务器部署完成后,默认已开启SSL认证模式。服务器端证书,私钥以及根证书已经默认配置完成。用户需要配置客户端的相关参数。 配置SSL认证相关的数字证书参数,具体要求请参见[表4](#表1.3.1)。 @@ -226,8 +226,8 @@ MogDB在MogDB部署完成后,默认已开启SSL认证模式。服务器端证 | :------------ | :-------------------- | :-------------------| | 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_cert_file | 指定服务器证书文件,包含服务器端的公钥。服务器证书用以表明服务器身份的合法性,公钥将发送给对端用来对数据进行加密。 | 请以实际的证书名为准,其相对路径是相对于数据目录的。
**默认值** : server.crt | +| ssl_key_file | 指定服务器私钥文件,用以对公钥加密的数据进行解密。 | 请以实际的服务器私钥名称为准,其相对路径是相对于数据目录的。
**默认值** : server.key | | ssl_ca_file | CA服务器的根证书。此参数可选择配置,需要验证客户端证书的合法性时才需要配置。 | 请以实际的CA服务器根证书名称为准。
**默认值** : cacert.pem | | ssl_crl_file | 证书吊销列表,如果客户端证书在该列表中,则当前客户端证书被视为无效证书。 | 请以实际的证书吊销列表名称为准。
**默认值** : 空,表示没有吊销列表。 | | ssl_ciphers | SSL通讯使用的加密算法。 | 本产品支持的加密算法的详细信息请参见[表4](#表1.3.4)。
**默认值:** ALL,表示允许对端使用产品支持的所有加密算法,但不包含ADH、LOW、EXP、MD5算法。 | @@ -236,7 +236,7 @@ MogDB在MogDB部署完成后,默认已开启SSL认证模式。服务器端证 在客户端配置SSL认证相关的环境变量,详细信息请参见[表6](#表1.3.3)。 > ![img](https://cdn-mogdb.enmotech.com/docs-media/icon/icon-note.gif) **说明:** -> 客户端环境变量的路径以_/home/omm_为例,在实际操作中请使用实际路径进行替换。 +> 客户端环境变量的路径以“\_/home/omm\_”为例,在实际操作中请使用实际路径进行替换。 **表 6** 客户端参数 @@ -276,40 +276,29 @@ MogDB在MogDB部署完成后,默认已开启SSL认证模式。服务器端证 SSL传输支持一系列不同强度的加密和认证算法。用户可以通过修改postgresql.conf中的ssl_ciphers参数指定数据库服务器使用的加密算法。目前本产品SSL支持的加密算法如[表7](#表1.3.4)所示。 -**表 7** 加密算法 - -| 加密强度 | 安全程度 | 加密算法描述 | -| :------- | :------- | :------------------------ | -| 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 | +**表 7** 加密算法套件 + +| OpenSSL套件名 | **IANA套件名** | 安全程度 | +| :---------------------------- | :-------------------------------------- | :------- | +| ECDHE-RSA-AES128-GCM-SHA256 | TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 | HIGH | +| ECDHE-RSA-AES256-GCM-SHA384 | TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 | HIGH | +| ECDHE-ECDSA-AES128-GCM-SHA256 | TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 | HIGH | +| ECDHE-ECDSA-AES256-GCM-SHA384 | TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 | HIGH | +| DHE-RSA-AES128-GCM-SHA256 | TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 | HIGH | +| DHE-RSA-AES256-GCM-SHA384 | TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 | HIGH | > ![img](https://cdn-mogdb.enmotech.com/docs-media/icon/icon-note.gif) **说明:** > -> - SSL目前只支持加密强度在strong以上的加密算法。 -> -> - 配置参数ssl_ciphers的默认值为ALL,表示支持上表中的所有加密算法。如果对加密算法没有特殊要求,建议用户使用该默认值。 +> - 目前只支持上表中的6种加密算法套件。 > -> - 如指定以上多种加密,加密算法之间需要使用分号分割。 +> - 配置参数ssl_ciphers的默认值为ALL,表示支持上表中的所有加密算法。如果对加密算法没有特殊要求,建议用户使用该默认值。为保持前向兼容保留了DHE算法套件,非兼容场景不推荐使用。 > -> 如在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_ciphers为上表中OpenSSL套件名称,加密算法套件之间需要使用分号分割,如在postgresql.conf设置: ssl_ciphers='ECDHE-RSA-AES128-GCM-SHA256;ECDHE-ECDSA-AES128-GCM-SHA256' > > - SSL连接认证不仅增加了登录(创建SSL环境)及退出过程(清理SSL环境)的时间消耗,同时需要消耗额外的时间用于加解密所需传输的内容,因此对性能有一定影响。特别的,对于频繁的登录登出,短时查询等场景有较大的影响。 > > - 在证书有效期小于7天的时候,连接登录会在日志中产生告警提醒。 +>
@@ -545,7 +534,7 @@ Linux环境安装了openssl组件。 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 @@ -607,22 +596,22 @@ Linux环境安装了openssl组件。 5. 生成服务端证书私钥。 ```bash - # 生成服务器私钥文件server.key + # 生成服务端私钥文件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: - # 服务器私钥的保护密码,假设为Test@123 + # 服务端私钥的保护密码,假设为Test@123 Verifying - Enter pass phrase for server.key: - # 再次确认服务器私钥的保护密码,即为Test@123 + # 再次确认服务端私钥的保护密码,即为Test@123 ``` 6. 生成服务端证书请求文件。 ```bash - # 生成服务器证书请求文件server.req + # 生成服务端证书请求文件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 @@ -706,7 +695,7 @@ Linux环境安装了openssl组件。 8. 客户端证书,私钥的生成。 - 生成客户端证书和客户端私钥的方法和要求与服务器相同。 + 生成客户端证书和客户端私钥的方法和要求与服务端相同。 ```bash # 生成客户端私钥 diff --git a/product/zh/docs-mogdb/v3.0/security-guide/security/2-managing-users-and-their-permissions.md b/product/zh/docs-mogdb/v3.0/security-guide/security/2-managing-users-and-their-permissions.md index 29e7d364..ba2f6460 100644 --- a/product/zh/docs-mogdb/v3.0/security-guide/security/2-managing-users-and-their-permissions.md +++ b/product/zh/docs-mogdb/v3.0/security-guide/security/2-managing-users-and-their-permissions.md @@ -89,7 +89,7 @@ mogdb=# ALTER USER joe OPRADMIN; ### 安全策略管理员 -安全策略管理员是指具有POLADMIN属性的帐户,具有创建资源标签,脱敏策略和统一审计策略的权限。 +安全策略管理员是指具有POLADMIN属性的帐户,具有创建资源标签、脱敏策略和统一审计策略的权限。 要创建新的安全策略管理员,请以系统管理员用户身份连接数据库,并使用带POLADMIN选项的CREATE USER语句或ALTER USER语句进行设置。 @@ -232,6 +232,10 @@ mogdb=# ALTER USER joe POLADMIN; 无变化。 +> 须知: +> +> PG_STATISTIC系统表和PG_STATISTIC_EXT系统表存储了统计对象的一些敏感信息,如高频值MCV。进行三权分立后系统管理员仍可以通过访问这两张系统表,得到统计信息里的这些信息。 +
## 用户 @@ -283,6 +287,10 @@ mogdb=# CREATE USER user_independent WITH INDEPENDENT IDENTIFIED BY "1234@abc"; 针对该用户的对象,系统管理员和拥有CREATEROLE属性的安全管理员在未经其授权前,只能进行控制操作(DROP、ALTER、TRUNCATE),无权进行INSERT、DELETE、SELECT、UPDATE、COPY、GRANT、REVOKE、ALTER OWNER操作。 +> 须知: +> +> PG_STATISTIC系统表和PG_STATISTIC_EXT系统表存储了统计对象的一些敏感信息,如高频值MCV。进行三权分立后系统管理员仍可以通过访问这两张系统表,得到统计信息里的这些信息。 + **永久用户** MogDB提供永久用户方案,即创建具有PERSISTENCE属性的永久用户。 @@ -340,7 +348,7 @@ MogDB提供了一组默认角色,以gs_role_开头命名。它们提供对特 - 内置角色默认没有LOGIN权限,不设预置密码; -- gsql元命令\\du和**\\dg**不显示内置角色的相关信息,但若显示指定了pattern为特定内置角色则会显示。 +- gsql元命令\\du和**\\dg**不显示内置角色的相关信息,但若显示指定了pattern为特定内置角色则会显示; - 三权分立关闭时,初始用户、具有SYSADMIN权限的用户和具有内置角色ADMIN OPTION权限的用户有权对内置角色执行GRANT/REVOKE管理。三权分立打开时,初始用户和具有内置角色ADMIN OPTION权限的用户有权对内置角色执行GRANT/REVOKE管理。例如: @@ -355,7 +363,7 @@ MogDB提供了一组默认角色,以gs_role_开头命名。它们提供对特 Schema又称作模式。通过管理Schema,允许多个用户使用同一数据库而不相互干扰,可以将数据库对象组织成易于管理的逻辑组,同时便于将第三方应用添加到相应的Schema下而不引起冲突。 -每个数据库包含一个或多个Schema。数据库中的每个Schema包含表和其他类型的对象。数据库创建初始,默认具有一个名为public的Schema,且所有用户都拥有此Schema的usage权限,只有系统管理员和初始化用户可以在public Schema下创建函数、存储过程和同义词对象,其他用户即使赋予create权限后也不可以创建上述三种对象。可以通过Schema分组数据库对象。Schema类似于操作系统目录,但Schema不能嵌套。 +每个数据库包含一个或多个Schema。数据库中的每个Schema包含表和其他类型的对象。数据库创建初始,默认具有一个名为public的Schema,且所有用户都拥有此Schema的usage权限,只有系统管理员和初始化用户可以在public Schema下创建函数、存储过程和同义词对象,其他用户即使赋予create权限后也不可以创建上述三种对象。可以通过Schema分组数据库对象。Schema类似于操作系统目录,但Schema不能嵌套。默认只有初始化用户可以在pg_catalog模式下创建对象。 相同的数据库对象名称可以应用在同一数据库的不同Schema中,而没有冲突。例如,a_schema和b_schema都可以包含名为mytable的表。具有所需权限的用户可以访问数据库的多个Schema中的对象。 @@ -469,7 +477,7 @@ CREATE USER创建用户的同时,系统会在执行该命令的数据库中, 用户可以在数据表创建行访问控制(Row Level Security)策略,该策略是指针对特定数据库用户、特定SQL操作生效的表达式。当数据库用户对数据表访问时,若SQL满足数据表特定的Row Level Security策略,在查询优化阶段将满足条件的表达式,按照属性(PERMISSIVE | RESTRICTIVE)类型,通过AND或OR方式拼接,应用到执行计划上。 -行级访问控制的目的是控制表中行级数据可见性,通过在数据表上预定义Filter,在查询优化阶段将满足条件的表达式应用到执行计划上,影响最终的执行结果。当前受影响的SQL语句包括SELECT,UPDATE,DELETE。 +行级访问控制的目的是控制表中行级数据可见性,通过在数据表上预定义Filter,在查询优化阶段将满足条件的表达式应用到执行计划上,影响最终的执行结果。当前受影响的SQL语句包括SELECT、UPDATE、DELETE。 示例: 某表中汇总了不同用户的数据,但是不同用户只能查看自身相关的数据信息,不能查看其他用户的数据信息。 @@ -546,6 +554,10 @@ mogdb=# EXPLAIN(COSTS OFF) SELECT * FROM public.all_data; (5 rows) ``` +>须知: +> +>PG_STATISTIC系统表和PG_STATISTIC_EXT系统表存储了统计对象的一些敏感信息,如高频值MCV。进行三权分立后系统管理员仍可以通过访问这两张系统表,得到统计信息里的这些信息。 +
## 设置安全策略 @@ -766,7 +778,7 @@ DROP ROLE 初始化数据库、创建用户、修改用户时需要指定密码。密码必须要符合复杂度(password_policy)的要求,否则会提示用户重新输入密码。 - 参数password_policy设置为1时表示采用密码复杂度校验,默认值。 - - 参数password_policy设置为0时表示不采用任何密码复杂度校验,设置为0会存在安全风险,不建议设置为0,即使需要设置也要将所有MogDB节点中的password_policy都设置为0才能生效。 + - 参数password\_policy设置为0时表示不采用密码复杂度校验,但需满足密码不能为空并且只包含有效字符,有效字符范围为大写字母(A-Z)、小写字母(a-z)、数字(0-9)及特殊字符详见[表4](#表2.9.3.1)。设置为0会存在安全风险,不建议设置为0,即使需要设置也要将所有MogDB节点中的password\_policy都设置为0才能生效。 配置password_policy参数。 @@ -806,7 +818,7 @@ DROP ROLE > > - 包含数字(0-9)的最少个数(password_min_digital) > - > - 包含特殊字符的最少个数(password_min_special)(特殊字符的列表请参见[表3](#表2.9.3.1)。 + > - 包含特殊字符的最少个数(password_min_special)(特殊字符的列表请参见[表4](#表2.9.3.1)。 > > - 密码的最小长度(password_min_length) > diff --git a/product/zh/docs-mogdb/v3.0/security-guide/security/3-configuring-database-audit.md b/product/zh/docs-mogdb/v3.0/security-guide/security/3-configuring-database-audit.md index a67f27db..6e9e2daf 100644 --- a/product/zh/docs-mogdb/v3.0/security-guide/security/3-configuring-database-audit.md +++ b/product/zh/docs-mogdb/v3.0/security-guide/security/3-configuring-database-audit.md @@ -25,70 +25,71 @@ date: 2021-03-04 **表 1** 配置审计项 -| 配置项 | 描述 | -| :-------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------- | +| 配置项 | 描述 | +| :-------------------------------------- | :----------------------------------------------------------- | | 用户登录、注销审计 | 参数: audit_login_logout
默认值为7,表示开启用户登录、退出的审计功能。设置为0表示关闭用户登录、退出的审计功能。不推荐设置除0和7之外的值。 | -| 数据库启动、停止、恢复和切换审计 | 参数: audit_database_process
默认值为1,表示开启数据库启动、停止、恢复和切换的审计功能。 | -| 用户锁定和解锁审计 | 参数: audit_user_locked
默认值为1,表示开启审计用户锁定和解锁功能。 | -| 用户访问越权审计 | 参数: audit_user_violation
默认值为0,表示关闭用户越权操作审计功能。 | -| 授权和回收权限审计 | 参数: audit_grant_revoke
默认值为1,表示开启审计用户权限授予和回收功能。 | -| 数据库对象的CREATE,ALTER,DROP操作审计 | 参数: audit_system_object
默认值为12295,表示只对DATABASE、SCHEMA、USER、DATA SOURCE这四类数据库对象的CREATE、ALTER、DROP操作进行审计。 | -| 具体表的INSERT、UPDATE和DELETE操作审计 | 参数: audit_dml_state
默认值为0,表示关闭具体表的DML操作(SELECT除外)审计功能。 | -| SELECT操作审计 | 参数: audit_dml_state_select
默认值为0,表示关闭SELECT操作审计功能。 | -| COPY审计 | 参数: audit_copy_exec
默认值为0,表示关闭copy操作审计功能。 | -| 存储过程和自定义函数的执行审计 | 参数: audit_function_exec
默认值为0,表示不记录存储过程和自定义函数的执行审计日志。 | -| SET审计 | 参数: audit_set_parameter
默认值为1,表示记录set操作审计日志 | - -安全相关参数及默认值请参见[表2](#表3.1.2)。 - -**表 2** 安全相关参数及默认值 - -| 参数名 | 默认值 | 说明 | -| :-------------------------- | :--------- | :----------------------------------------------------------- | -| ssl | on | 指定是否启用SSL连接。 | -| require_ssl | off | 指定服务器端是否强制要求SSL连接。 | -| ssl_ciphers | ALL | 指定SSL支持的加密算法列表。 | -| ssl_cert_file | server.crt | 指定包含SSL服务器证书的文件的名称。 | -| ssl_key_file | server.key | 指定包含SSL私钥的文件名称。 | -| ssl_ca_file | cacert.pem | 指定包含CA信息的文件的名称。 | -| ssl_crl_file | NULL | 指定包含CRL信息的文件的名称。 | -| password_policy | 1 | 指定是否进行密码复杂度检查。 | -| password_reuse_time | 60 | 指定是否对新密码进行可重用天数检查。 | -| password_reuse_max | 0 | 指定是否对新密码进行可重用次数检查。 | -| password_lock_time | 1 | 指定帐户被锁定后自动解锁的时间。 | -| failed_login_attempts | 10 | 如果输入密码错误的次数达到此参数值时,当前帐户被锁定。 | -| password_encryption_type | 2 | 指定采用何种加密方式对用户密码进行加密存储。 | -| password_min_uppercase | 0 | 密码中至少需要包含大写字母的个数。 | -| password_min_lowercase | 0 | 密码中至少需要包含小写字母的个数。 | -| password_min_digital | 0 | 密码中至少需要包含数字的个数。 | -| password_min_special | 0 | 密码中至少需要包含特殊字符的个数。 | -| password_min_length | 8 | 密码的最小长度。
说明:
在设置此参数时,请将其设置成不大于password_max_length,否则进行涉及密码的操作会一直出现密码长度错误的提示。 | -| password_max_length | 32 | 密码的最大长度。
说明:
在设置此参数时,请将其设置成不小于password_min_length,否则进行涉及密码的操作会一直出现密码长度错误的提示。 | -| password_effect_time | 90 | 密码的有效期限。 | -| password_notify_time | 7 | 密码到期提醒的天数。 | -| audit_enabled | on | 控制审计进程的开启和关闭。 | -| audit_directory | pg_audit | 审计文件的存储目录。 | -| audit_data_format | binary | 审计日志文件的格式,当前仅支持二进制格式(binary)。 | -| audit_rotation_interval | 1d | 指定创建一个新审计日志文件的时间间隔。当现在的时间减去上次创建一个审计日志的时间超过了此参数值时,服务器将生成一个新的审计日志文件。 | -| audit_rotation_size | 10MB | 指定审计日志文件的最大容量。当审计日志消息的总量超过此参数值时,服务器将生成一个新的审计日志文件。 | -| audit_resource_policy | on | 控制审计日志的保存策略,以空间还是时间限制为优先策略,on表示以空间为优先策略。 | -| audit_file_remain_time | 90 | 表示需记录审计日志的最短时间要求,该参数在audit_resource_policy为off时生效。 | -| audit_space_limit | 1GB | 审计文件占用磁盘空间的最大值。 | -| audit_file_remain_threshold | 1048576 | 审计目录下审计文件的最大数量。 | -| audit_login_logout | 7 | 指定是否审计数据库用户的登录(包括登录成功和登录失败)、注销。 | -| audit_database_process | 1 | 指定是否审计数据库启动、停止、切换和恢复的操作。 | -| audit_user_locked | 1 | 指定是否审计数据库用户的锁定和解锁。 | -| audit_user_violation | 0 | 指定是否审计数据库用户的越权访问操作。 | -| audit_grant_revoke | 1 | 指定是否审计数据库用户权限授予和回收的操作。 | -| audit_system_object | 12295 | 指定是否审计数据库对象的CREATE、DROP、ALTER操作。 | -| audit_dml_state | 0 | 指定是否审计具体表的INSERT、UPDATE、DELETE操作。 | -| audit_dml_state_select | 0 | 指定是否审计SELECT操作。 | -| audit_copy_exec | 0 | 指定是否审计COPY操作。 | -| audit_function_exec | 0 | 指定在执行存储过程、匿名块或自定义函数(不包括系统自带函数)时是否记录审计信息。 | -| audit_set_parameter | 1 | 指定是否审计SET操作。 | -| enableSeparationOfDuty | off | 指定是否开启三权分立。 | -| session_timeout | 10min | 建立连接会话后,如果超过此参数的设置时间,则会自动断开连接。 | -| auth_iteration_count | 10000 | 认证加密信息生成过程中使用的迭代次数。 | +| 数据库启动、停止、恢复和切换审计 | 参数: audit_database_process
默认值为1,表示开启数据库启动、停止、恢复和切换的审计功能。 | +| 用户锁定和解锁审计 | 参数: audit_user_locked
默认值为1,表示开启审计用户锁定和解锁功能。 | +| 用户访问越权审计 | 参数: audit_user_violation
默认值为0,表示关闭用户越权操作审计功能。 | +| 授权和回收权限审计 | 参数: audit_grant_revoke
默认值为1,表示开启审计用户权限授予和回收功能。 | +| 数据库对象的CREATE、ALTER、DROP操作审计 | 参数: audit_system_object
默认值为12295,表示只对DATABASE、SCHEMA、USER、DATA SOURCE这四类数据库对象的CREATE、ALTER、DROP操作进行审计。 | +| 具体表的INSERT、UPDATE和DELETE操作审计 | 参数: audit_dml_state
默认值为0,表示关闭具体表的DML操作(SELECT除外)审计功能。 | +| SELECT操作审计 | 参数: audit_dml_state_select
默认值为0,表示关闭SELECT操作审计功能。 | +| COPY审计 | 参数: audit_copy_exec
默认值为0,表示关闭copy操作审计功能。 | +| 存储过程和自定义函数的执行审计 | 参数: audit_function_exec
默认值为0,表示不记录存储过程和自定义函数的执行审计日志。 | +| SET审计 | 参数: audit_set_parameter
默认值为1,表示记录set操作审计日志 | +| 事务ID记录 | 参数:audit_xid_info
默认值为0,表示关闭审计日志记录事务ID功能 | + +安全相关参数及说明请参见[表2](#表3.1.2)。 + +**表 2** 安全相关参数及说明 + +| 参数名 | 说明 | +| :-------------------------- | :----------------------------------------------------------- | +| ssl | 指定是否启用SSL连接。 | +| require_ssl | 指定服务器端是否强制要求SSL连接。 | +| ssl_ciphers | 指定SSL支持的加密算法列表。 | +| ssl_cert_file | 指定包含SSL服务器证书的文件的名称。 | +| ssl_key_file | 指定包含SSL私钥的文件名称。 | +| ssl_ca_file | 指定包含CA信息的文件的名称。 | +| ssl_crl_file | 指定包含CRL信息的文件的名称。 | +| password_policy | 指定是否进行密码复杂度检查。 | +| password_reuse_time | 指定是否对新密码进行可重用天数检查。 | +| password_reuse_max | 指定是否对新密码进行可重用次数检查。 | +| password_lock_time | 指定帐户被锁定后自动解锁的时间。 | +| failed_login_attempts | 如果输入密码错误的次数达到此参数值时,当前帐户被锁定。 | +| password_encryption_type | 指定采用何种加密方式对用户密码进行加密存储。 | +| password_min_uppercase | 密码中至少需要包含大写字母的个数。 | +| password_min_lowercase | 密码中至少需要包含小写字母的个数。 | +| password_min_digital | 密码中至少需要包含数字的个数。 | +| password_min_special | 密码中至少需要包含特殊字符的个数。 | +| password_min_length | 密码的最小长度。说明:在设置此参数时,请将其设置成不大于password_max_length,否则进行涉及密码的操作会一直出现密码长度错误的提示 | +| password_max_length | 密码的最大长度。说明:在设置此参数时,请将其设置成不小于password_min_length,否则进行涉及密码的操作会一直出现密码长度错误的提示。 | +| password_effect_time | 密码的有效期限。 | +| password_notify_time | 密码到期提醒的天数。 | +| audit_enabled | 控制审计进程的开启和关闭。 | +| audit_directory | 审计文件的存储目录。 | +| audit_data_format | 审计日志文件的格式,当前仅支持二进制格式(binary)。 | +| audit_rotation_interval | 指定创建一个新审计日志文件的时间间隔。当现在的时间减去上次创建一个审计日志的时间超过了此参数值时,服务器将生成一个新的审计日志文件。 | +| audit_rotation_size | 指定审计日志文件的最大容量。当审计日志消息的总量超过此参数值时,服务器将生成一个新的审计日志文件。 | +| audit_resource_policy | 控制审计日志的保存策略,以空间还是时间限制为优先策略,on表示以空间为优先策略。 | +| audit_file_remain_time | 表示需记录审计日志的最短时间要求,该参数在audit_resource_policy为off时生效。 | +| audit_space_limit | 审计文件占用磁盘空间的最大值。 | +| audit_file_remain_threshold | 审计目录下审计文件的最大数量。 | +| audit_login_logout | 指定是否审计数据库用户的登录(包括登录成功和登录失败)、注销。 | +| audit_database_process | 指定是否审计数据库启动、停止、切换和恢复的操作。 | +| audit_user_locked | 指定是否审计数据库用户的锁定和解锁。 | +| audit_user_violation | 指定是否审计数据库用户的越权访问操作。 | +| audit_grant_revoke | 指定是否审计数据库用户权限授予和回收的操作。 | +| audit_system_object | 指定是否审计数据库对象的CREATE、DROP、ALTER操作。 | +| audit_dml_state | 指定是否审计具体表的INSERT、UPDATE、DELETE操作。 | +| audit_dml_state_select | 指定是否审计SELECT操作。 | +| audit_copy_exec | 指定是否审计COPY操作。 | +| audit_function_exec | 指定在执行存储过程、匿名块或自定义函数(不包括系统自带函数)时是否记录审计信息。 | +| audit_set_parameter | 指定是否审计SET操作。 | +| enableSeparationOfDuty | 指定是否开启三权分立。 | +| session_timeout | 建立连接会话后,如果超过此参数的设置时间,则会自动断开连接。 | +| auth_iteration_count | 认证加密信息生成过程中使用的迭代次数。 | **操作步骤** @@ -177,10 +178,14 @@ date: 2021-03-04 mogdb=# select * from pg_query_audit('2021-03-04 08:00:00','2021-03-04 17:00:00'); time | type | result | userid | username | database | client_conninfo | object_name | detail_info | node_name | thread_id | local_port | remote_port ------------------------+----------------+--------+--------+-----------+-----------+-------------------------+-------------------+--------------+-------------------+---------------------------------+------------+------------- - 2021-03-04 08:00:08+08 | login_success | ok | 10 | omm | mogdb | gsql@::1 | mogdb | login db(postgres) success,the current user is:omm | dn_6001_6002_6003 | 140477687527168@668131208211425 | 17778 | 46946 + 2021-03-04 08:00:08+08 | login_success | ok | 10 | omm | mogdb | gsql@::1 | mogdb | login db(postgres) success,SSL=Off | dn_6001_6002_6003 | 140477687527168@668131208211425 | 17778 | 46946 ``` 该条记录表明,用户omm在time字段标识的时间点登录数据库mogdb。其中client_conninfo字段在log_hostname启动且IP连接时,字符@后显示反向DNS查找得到的主机名。 + + > 说明: + > + > 对于登录操作的记录,审计日志detail_info结尾会记录SSL信息,SSL=on表示客户端通过SSL连接,SSL=off表示客户端没有通过SSL连接。
diff --git a/product/zh/docs-mogdb/v3.0/security-guide/security/4-setting-encrypted-equality-query.md b/product/zh/docs-mogdb/v3.0/security-guide/security/4-setting-encrypted-equality-query.md index 730bfbb2..f07da67f 100644 --- a/product/zh/docs-mogdb/v3.0/security-guide/security/4-setting-encrypted-equality-query.md +++ b/product/zh/docs-mogdb/v3.0/security-guide/security/4-setting-encrypted-equality-query.md @@ -123,7 +123,7 @@ date: 2021-10-11 ### 连接密态数据库 -具体JDBC连接参数参考[基于JDBC开发](1-development-based-on-jdbc-overview)章节介绍。JDBC支持密态数据库相关操作,需要设置enable_ce=1,示例如下。 +连接密态数据库需要使用驱动包gsjdbc4.jar,具体JDBC连接参数参考[基于JDBC开发](1-development-based-on-jdbc-overview)章节介绍。JDBC支持密态数据库相关操作,需要设置enable_ce=1,示例如下。 ```java public static Connection getConnect(String username, String passwd) @@ -266,7 +266,7 @@ pstmt.close(); mogdb(# id_number int, mogdb(# name text, mogdb(# credit_card varchar(19) encrypted with (column_encryption_key = ImgCEK1, encryption_type = DETERMINISTIC) - mogdb(# ) with (orientation=row) distribute by hash(id_number); + mogdb(# ) with (orientation=row); CREATE TABLE ``` diff --git a/product/zh/docs-mogdb/v3.0/security-guide/security/5-setting-a-ledger-database.md b/product/zh/docs-mogdb/v3.0/security-guide/security/5-setting-a-ledger-database.md index 95e504e2..57ff4cb4 100644 --- a/product/zh/docs-mogdb/v3.0/security-guide/security/5-setting-a-ledger-database.md +++ b/product/zh/docs-mogdb/v3.0/security-guide/security/5-setting-a-ledger-database.md @@ -79,7 +79,7 @@ date: 2021-10-11 Location Nodes: ALL DATANODES Options: orientation=row, compression=no History table name: ledgernsp_usertable_hist - + mogdb=# \d+ blockchain.ledgernsp_usertable_hist; Table "blockchain.ledgernsp_usertable_hist" Column | Type | Modifiers | Storage | Stats target | Description @@ -91,16 +91,14 @@ date: 2021-10-11 Indexes: "gs_hist_16388_index" PRIMARY KEY, btree (rec_num int4_ops) TABLESPACE pg_default Has OIDs: no - Distribute By: HASH(rec_num) - Location Nodes: ALL DATANODES Options: internal_mask=263 ``` - + > ![img](https://cdn-mogdb.enmotech.com/docs-media/icon/icon-note.gif) **说明:** > > - 防篡改表不支持非行存表、临时表、外表、unlog表、非行存表均无防篡改属性。 > - 防篡改表在创建时会自动增加一个名为hash的系统列,所以防篡改表单表最大列数为1599。 - + 3. 修改防篡改用户表数据。 例如,对防篡改用户表执行INSERT/UPDATE/DELETE。 @@ -115,7 +113,7 @@ date: 2021-10-11 2 | bob | 8fcd74a8a6a4b484 3 | peter | f51b4b1b12d0354b (3 rows) - + mogdb=# UPDATE ledgernsp.usertable SET name = 'bob2' WHERE id = 2; UPDATE 1 mogdb=# SELECT *, hash FROM ledgernsp.usertable ORDER BY id; @@ -125,15 +123,7 @@ date: 2021-10-11 2 | bob2 | 437761affbb7c605 3 | peter | f51b4b1b12d0354b (3 rows) - - mogdb=# SELECT *, hash FROM ledgernsp.usertable ORDER BY id; - id | name | hash - ----+-------+------------------ - 1 | alex | 1f2e543c580cb8c5 - 2 | bob2 | 437761affbb7c605 - 3 | peter | f51b4b1b12d0354b - (3 rows) - + mogdb=# DELETE FROM ledgernsp.usertable WHERE id = 3; DELETE 1 mogdb=# SELECT *, hash FROM ledgernsp.usertable ORDER BY id; @@ -226,7 +216,7 @@ date: 2021-10-11 ```sql mogdb=# SELECT *, hash FROM ledgernsp.usertable; - + id | name | hash ----+------+------------------ 1 | alex | 1f2e543c580cb8c5 diff --git a/product/zh/docs-mogdb/v3.0/security-guide/security/6-transparent-data-encryption.md b/product/zh/docs-mogdb/v3.0/security-guide/security/6-transparent-data-encryption.md new file mode 100644 index 00000000..f7a7919d --- /dev/null +++ b/product/zh/docs-mogdb/v3.0/security-guide/security/6-transparent-data-encryption.md @@ -0,0 +1,88 @@ +--- +title: 设置透明数据加密(TDE) +summary: 设置透明数据加密(TDE) +author: Guo Huan +date: 2022-04-21 +--- + +# 设置透明数据加密(TDE) + +## 概述 + +透明数据加密(Transparent Data Encryption),是数据库在将数据写入存储介质时对数据进行加密,从存储介质中读取数据时自动解密,防止攻击者绕过数据库认证机制直接读取数据文件中的数据,以解决静态数据泄露问题。该功能对于应用层几乎透明无感知,用户可根据需要决定是否启用透明数据加密功能。 + +## 前提条件 + +- 需要由密钥管理服务KMS对数据加密密钥提供保护,数据库可以正常访问KMS服务。KMS服务可在[华为云数据加密服务DEW](https://www.huaweicloud.com/product/dew.html)申请开通。 +- 需要将GUC参数[enable_tde](27.1-security-configuration#enable_tde)设置为on,开启数据库透明数据加密开关。同时需正确设置数据库实例主密钥ID参数[tde_cmk_id](27.1-security-configuration#tde_cmk_id)。 + +## 背景信息 + +当前版本主要实现对接华为云KMS服务,支持表级密钥存储,实现对行存表加密,规格约束如下: + +- 支持heap存储行存表加密。 +- 不支持列存表加密,不支持物化视图加密,不支持ustore存储引擎加密。 +- 不支持索引和Sequence加密,不支持XLOG日志加密,不支持MOT内存表加密,不支持系统表加密。 +- 用户在创建表时可以指定加密算法,加密算法一旦指定不可更改。如果创建表时设置enable_tde为on,但是不指定加密算法encrypt_algo,则默认使用AES_128_CTR加密算法。 +- 如果在创建表时未开启加密功能或指定加密算法,后续无法再切换为加密表。 +- 对于已分配加密密钥的表,切换表的加密和非加密状态,不会更换密钥和加密算法。 +- 数据密钥轮转只有开启表加密功能时才支持轮转。 +- 不支持单数据库实例跨region的多副本主备同步,不支持单数据库实例跨region的扩容,不支持跨region的备份恢复、数据库实例容灾和数据迁移场景。 +- 混合云场景如果使用华为云KMS和管控面功能,则可以支持透明数据加密,其他KMS服务如果接口不兼容则无法支持。 +- 加密表的查询性能比不加密时会有所劣化,对于性能有较高要求的情况下需谨慎开启加密功能。 + +## 密钥管理机制 + +透明数据加密功能中数据的加密和解密都依赖于安全可靠的密钥管理机制。本功能采用三层密钥结构实现密钥管理机制,即根密钥(RK)、主密钥(CMK)和数据加密密钥(DEK)。主密钥由根密钥加密保护,数据加密密钥由主密钥加密保护。数据加密密钥用于对用户数据进行加密和解密,每个表对应一个数据加密密钥。根密钥和主密钥保存在KMS服务中,数据加密密钥通过向KMS服务申请创建,创建成功可同时返回密钥明文和密文。数据加密密钥明文在内存中会使用hash表进行缓存减少访问KMS频次以提升性能,密钥明文只存在内存中使用不会落盘,并且支持自动淘汰机制删除不常使用的密钥明文,只保存最近1天内使用的密钥明文。数据加密密钥密文保存在数据库中并落盘持久化。对用户表数据加解密时,如果内存中没有对应密钥明文则需向KMS申请对数据密钥解密后再使用。 + +## 表级加密方案 + +允许用户在创建表时指定是否对表进行加密和使用的加密算法,加密算法支持AES_128_CTR和SM4_CTR两种算法,算法一旦指定不可更改。对于创建表时指定为加密的表,数据库会自动为该表申请创建数据加密密钥,并将加密算法、密钥密文和对应主密钥ID等参数使用”keyword=value”格式保存在pg_class系统表中的reloptions字段中。 + +对于加密表,允许用户切换表的加密状态,即将加密表切换为非加密表,或将非加密表切换为加密表。如果在创建表时未使能加密功能,后续无法再切换为加密表。 + +对于加密表,支持数据加密密钥轮转。密钥轮转后,使用旧密钥加密的数据仍使用旧密钥解密,新写入的数据使用新密钥加密。密钥轮转时不更换加密算法。 + +对于行存表,每次加解密的最小数据单元为一个8K大小的page页面,每次对page页面加密时会通过安全随机数接口生成IV值,并将IV值和密钥密文、主密钥ID等信息保存在页面中一起写入存储介质。对于加密表由于page页面中需要保存加密密钥信息,相比不加密时占用存储空间膨胀约2.5%。 + +## 创建加密表 + +登录数据库,创建加密表tde_test1,加密状态为开启,指定加密算法为AES_128_CTR: + +``` +mogdb=# CREATE TABLE tde_test (a int, b text) with (enable_tde = on, encrypt_algo = 'AES_128_CTR'); +``` + +创建加密表tde_test2,加密状态为开启,不指定加密算法,则加密算法默认为AES_128_CTR: + +``` +mogdb=# CREATE TABLE tde_test2 (a int, b text) with (enable_tde = on); +``` + +创建加密表tde_test3,加密状态为关闭,指定加密算法为SM4_CTR: + +``` +mogdb=# CREATE TABLE tde_test3 (a int, b text) with (enable_tde = off, encrypt_algo = 'SM4_CTR'); +``` + +## 切换加密表加密开关 + +登录数据库,将加密表tde_test1的加密开关置为off: + +``` +mogdb=# ALTER TABLE tde_test1 SET (enable_tde=off); +``` + +将加密表tde_test1的加密开关置为on: + +``` +mogdb=# ALTER TABLE tde_test1 SET (enable_tde=on); +``` + +## 对加密表进行密钥轮转 + +登录数据库,对加密表tde_test1进行密钥轮转: + +``` +mogdb=# ALTER TABLE tde_test1 ENCRYPTION KEY ROTATION; +``` \ No newline at end of file diff --git a/product/zh/docs-mogdb/v3.0/toc.md b/product/zh/docs-mogdb/v3.0/toc.md index 9137954c..2f71bf53 100644 --- a/product/zh/docs-mogdb/v3.0/toc.md +++ b/product/zh/docs-mogdb/v3.0/toc.md @@ -173,6 +173,7 @@ + [设置数据库审计](/security-guide/security/3-configuring-database-audit.md) + [设置密态等值查询](/security-guide/security/4-setting-encrypted-equality-query.md) + [设置账本数据库](/security-guide/security/5-setting-a-ledger-database.md) + + [设置透明数据加密(TDE)](/security-guide/security/6-transparent-data-encryption.md) + 性能优化指南 + 系统优化指南 + [操作系统参数调优](/performance-tuning/1-system/1-optimizing-os-parameters.md) diff --git a/product/zh/docs-mogdb/v3.0/toc_secure.md b/product/zh/docs-mogdb/v3.0/toc_secure.md index cdf1a079..6119b166 100644 --- a/product/zh/docs-mogdb/v3.0/toc_secure.md +++ b/product/zh/docs-mogdb/v3.0/toc_secure.md @@ -9,3 +9,4 @@ + [设置数据库审计](/security-guide/security/3-configuring-database-audit.md) + [设置密态等值查询](/security-guide/security/4-setting-encrypted-equality-query.md) + [设置账本数据库](/security-guide/security/5-setting-a-ledger-database.md) ++ [设置透明数据加密(TDE)](/security-guide/security/6-transparent-data-encryption.md) -- Gitee