• [迁移系列] RDS-DRS-DWS数据复制链路优化方案比对
    背景介绍• 随着业务的发展,RDS的负载在逐渐增长,同时还会有新的RDS到DWS的表级同步链路需求• 随着链路数量的增加,RDS上的资源在数据同步上消耗越来越大• 为了提高系统的可靠性,建议采用增加中间库方案来优化数据复制链路方案一:通过主库实现表级同步方案解释:• 表级同步的全量同步和增量同步都是从RDS生产库上获取数据• 同步的全量阶段,对源端RDS生产库上有一定压力,可在业务低峰期实施优势:• 无需额外的RDS实例和DRS链路,成本较低• 生产库有HA机制,如果主库挂了,备库承接同步任务的源端角色,保证了同步链路的可靠性• 执行online ddl时,数据同步没有时延劣势:• 全量阶段或者同步任务较多时,对生产库有一定压力方案二:通过备库全量主库增量实现表级同步方案解释:• 表级同步的全量同步从生产备库实例,增量同步从RDS生产库主实例获取数据优势:• 无需额外的RDS实例和DRS链路,成本较低执行online ddl时,数据同步没有时延劣势:• 对于生产主库的可靠性有影响方案三:通过中间库实现表级同步方案解释:• 创建一个RDS中间库,利用DRS的在线迁移能力,一次性从RDS生产库获取全量数据,并实时从RDS生产库同步增量数据• 所有到DWS的表级同步任务,都从RDS中间库实施全量+增量同步优势:• 所有表级同步任务都从RDS中间库抽取数据,对RDS生产库没有任何影响• 满足一定条件,从RDS生产库到DWS的无时延• DRS在线迁移阶段有限流能力,所以全量迁移阶段对RDS生产库影响较小劣势:• 增加了一个DRS在线迁移任务和一个RDS中间库(主备),成本增加• 如果在RDS生产库上做online DDL会导致RDS中间库的时延较大方案四:通过只读节点实现表级同步方案解释:• 在RDS生产库上创建一个只读实例,在RDS生产库只读实例上打开log_slave_update参数• 所有到DWS的表级同步任务,都从RDS生产库只读上实施全量+增量同步优势:• 所有表级同步任务都从RDS生产库只读上抽取数据,对RDS生产库没有任何影响劣势:• 增加了一个RDS生产库只读(单机),成本增加• 只读节点挂掉,需要修复只读节点,并重试任务,影响表级同步链路的可靠性• 需要在只读节点上后台修改log_slave_update参数,属于非标操作• 如果在RDS生产库上做online DDL会导致RDS生产库只读的时延较大
  • [技术干货] GaussDB(DWS)发生数据倾斜不要慌,一文教你轻松获取表倾斜率
    【摘要】 GaussDB(DWS)自身提供pgxc_get_table_skewness来查询倾斜情况,但实际实践过程中,该视图存在性能问题,而且本身的倾斜率计算有问题,实践过程中,该函数获取的倾斜率在不高的情况下,存在倾斜情况。本文基于项目实践提供一个快速获取整库或整schema的表倾斜率与空间大小获取方法。GaussDB(DWS)是MPP并行架构,若表的数据存在倾斜情况,会引起一系列性能问题,影响用户体验,严重时可能会引起系统故障。因此能快速获取倾斜的表并整改是GaussDB(DWS)运维管理人员比较关注的事情。需求描述    GaussDB(DWS)自身提供pgxc_get_table_skewness视图来查询倾斜情况,但实际实践过程中,该视图存在性能问题,且该视图的倾斜率计算有问题。实践过程中,该视图获取的某个表的倾斜率在不高的情况下(例如0.03),但实际上该表是存在倾斜情况的。同时在很多时候我们需要获取一个schema下所有表的倾斜率,以排查倾斜问题,pgxc_get_table_skewness在产品文档中也描述是一个性能较差的视图。因此项目实践过程中急需一个性能好且能表达倾斜情况的函数或视图。设计思路    GaussDB(DWS)有获取每个DN的空间大小函数table_distribution,通过该函数,我们能快速获取每个DN的大小,同时可以根据每个DN的大小,来获取表的倾斜情况:skewness = (max(dnsize) - avg(dnsize))*100/max(dnsize)该倾斜率公式计算表的最大DN空间大小与平均DN空间大小的占比,能准确反映倾斜率,乘100为表现百分比。实现过程    根据倾斜公式,我们得出以下SQL,该SQL能快速获取schema所有表的倾斜情况,下面以public为例:select schemaname,tablename,sum(dnsize)/1024^3 dnsize_gb,(max(dnsize) - avg(dnsize))*100/nullif(max(dnsize),0) skewness_factor from ( select schemaname ,tablename ,(regexp_split_to_array(tbl_dis,'[\,\(\)]+'))[4]::bigint as vprocname ,(regexp_split_to_array(tbl_dis,'[\,\(\)]+'))[5]::bigint as dnsize from ( select nspname as schemaname ,relname as tablename ,table_distribution(nspname,relname)::text as tbl_dis from pg_class a inner join pg_namespace b on a.relnamespace = b.oid and a.relkind = 'r' and b.oid not in (100) ) ) where schemaname= 'public' group by 1,2 order by 3 desc;    结果样例如下,通过例子,可以看出来,test13这个表2GB,且发生严重的倾斜97%,同时store_sales1一个70GB的大表也存在倾斜情况58%与GaussDB(DWS)的pgxc_get_table_skewness视图结果比对   使用GaussDB(DWS) 的系统视图pgxc_get_table_skewness,比较难看出来store_sales1存在倾斜情况。此处我们使用的是系统视图pgxc_get_table_skewness获取select * from PGXC_GET_TABLE_SKEWNESS where schemaname = 'public' and tablename in ('store_sales1','test13');从结果上看,skewratio字段,test13表能看出来存在严重倾斜情况,而store_sales1的skewratio值只有0.031,看不出来存在倾斜情况。但事实上该表是存在一定倾斜的我们通过table_skewness看每个DN的数据分布验证,发现store_sales1的确存在一定倾斜。总结:GaussDB(DWS)的倾斜率获取视图pgxc_get_table_skewness的结果,虽能反映严重倾斜的表,但存在倾斜的大表则比较难看出来。同时该函数存在一定的性能问题,较多表的情况下基本执行不出来。本文提供的倾斜率获取办法能比较准确反映表的倾斜情况且能叫快速获取整schema所有的表的倾斜率方法;该方法在测试过程中,数据量越大,表越多,执行的时间会越慢,测试一个schema约3800张表,共40TB左右的数据,在5分钟左右获取所有表的空间大小与倾斜率。但本文提供的方法只能对单个schema操作,对整个数据库获取表空间大小与倾斜率,实测无法执行成功。若对时效性不要求的话,可以每天固定一个时间,已跑批的形式,获取一个库的所有表清单,使用table_distribution函数,一次一个表地获取表的空间信息,使用多并发执行,这样的方式能在一定时间内将所有表的空间情况执行完成。例如:对整库有10万张表的情况,可以使用100个并发同时执行 insert into table_size_info select * from table_distribution('schema.table'); 这样的方式将10万张表的DN空间信息获取完成,然后使用本文的公式汇总获取每个表的倾斜率与空间总大小。想了解GuassDB(DWS)更多信息,欢迎微信搜索“GaussDB DWS”关注微信公众号,和您分享最新最全的PB级数仓黑科技,后台还可获取众多学习资料~转载来自:https://bbs.huaweicloud.com/blogs/266743
  • [技术干货] 从原理到实践,手把手带你轻松get数仓双集群容灾
    摘要:GaussDB(DWS)的容灾方案是一个双集群同步的架构,即两套独立集群定期同步数据以达到容灾的目的。目前数据同步的方式是通过roach(GaussDB(DWS)备份、恢复工具)定期做增量备份和恢复同步。本文通过介绍双集群的架构、log结构、典型问题分析来介绍双集群容灾的问题分析方法。双集群原理GaussDB(DWS) 的容灾方案是一个双集群同步的架构,即两套独立集群定期同步数据以达到容灾的目的。目前数据同步的方式是通过roach(GaussDB(DWS)备份、恢复工具)定期做增量备份和恢复同步。双集群框架是一个复杂的分布式系统,在出现问题时,如何快速准确的定位问题及恢复服务是一个非常紧迫的问题,这个问题在云上会更突出。本文通过介绍双集群的架构、log结构、分析步骤来介绍双集群容灾的问题分析方法。首先介绍一下双集群的部署方案原理,从部署架构和重要参数两个方面先介绍一下背景知识,便于更好理解问题分析的方法。架构简介1. 逻辑架构示例下图是一个同构的双集群部署示意图,主备集群都是3c3d, 主集群的主结点部署双集群框架脚本,定期进行备份操作,备集群的主结点定期恢复备份集。基础数据需要进行一全量备份,之后增量备份。2. 部署架构下图是接上图的部署架构,涉及双集群同步脚本(SyncDataToStby.py), 备份程序(GaussRoach.py, gs_roach)三个二进制文件备份侧调用关系:SyncDataToStby.py -> GaussRoach.py -> gs_roach恢复侧调用关系:SyncDataToStby.py -> GaussRoach.py -> gs_roach了解调用关系和咱们分析问题有直接的关系。SyncDataToStby.py 是整个双集群的调用起始,控制着双集群的正常运行,正常情况下是长驻内存的进程,如果异常退出后,后台会有crontab的来重新拉起双集群脚本: crontab -> SyncDataToStby.py -> GaussRoach.py -> gs_roach主要参数简介参数名作用备注username执行双集群脚本的OS用户,设置成GaussDB(DWS)集群相同的OS用户primary-env主集群的环境变量文件standby-env备集群的环境变量文件full-backup-exec-time-interval全量备份的间隔时间,当前默认N/A,只进行一次全量备份,分钟为单位。backup-exec-time-interval备份间隔时间,增量备份的间隔时间,分钟为单位。primary-host-ip主集群主结点的ipcompression-level=1compression-type=2压缩算法primary-media-destinationprimary-metadata-destination主集群的备份目录restore-interval恢复的时间间隔,分钟为单位restore-host-ip备集群的主结点iprestore-media-destinationrestore-metadata-destination备集群备份目录问题定位众所周知,系统的各种log是我们了解运行机制,了解问题现场的有力工具,同样双集群的问题分析也依赖于log的分析,首先认识一下双集群对应的日志:log 目录结构由上节的逻辑图及部署图,每个二进制对应的log文件如下图所示,对应二进制的信息查找对应的log。如上图,双集群的日志也是存放到$GAUSSLOG这个目录,并且有自己独立的目录 roach, 由这个目录同样是备份/恢复的对应的log路径。我们按调用关系从上到下的角度来介绍1. frame目录    存放 SyncDataToStby.py 生成的log,涉及到双集群调度,备份集清理,状态显示,配置文件及命令行参数解析的功能。2. controller目录    存放 GaussRoach.py 生成的log,涉及到备份、恢复准备工作一些操作,备份、恢复参数解析,备份集群的处理,错误处理等3. agent目录    存放 gs_roach工具 生成的log,涉及到gs_roach 连接gaussdb/gtm/cm发起备份/恢复,生成备份集/恢复备份集等操作。     gs_roach工具功能:在备份侧完成将cn/dn/gtm/cm的数据文件按顺序打包成备份文件的功能,并生成备份集元信息文件; 恢复侧根据元信息文件将备份集文件解压到对应cn/dn/gtm/cm的数据目录中。    定位步骤1. 确定问题在备份侧还是恢复侧,查找双集群主结点上Sync日志,确定出错的模块2. 确定出错的层次,由于双集群执行过程是一个上下层调用及时序关系的方式,具体顺序参考:crontab -> SyncDataToStby.py -> GaussRoach.py -> gs_roach3. 在各个模块都有较详细的日志描述过程,具体问题具体分析,大体有如下几个方面1)配置出错,用户、环境变量文件2)备份集群路径权限问题3)由于集群状态非Normal导致备份失败4)结点故障及备份集损坏导致恢复失败4. 后续文章会按模块及错误类型来详细描述问题定位步骤小结GaussDB(DWS)的双集群容灾功能是一个独立的复杂的分布式系统,涉及到三层工具的使用,因此在问题定位时会造成一些困惑。定位的方法需要先去理解架构,运行机制,然后根据时序关系去对应结点分析日志。后续会从各个模块的角度介绍一些典型的问题及修复方法。 想了解GuassDB(DWS)更多信息,欢迎微信搜索“GaussDB DWS”关注微信公众号,和您分享最新最全的PB级数仓黑科技,后台还可获取众多学习资料哦~转载来自:https://bbs.huaweicloud.com/blogs/264523
  • [技术干货] 关于GaussDB(DWS)多租户管理,这些你一定要知道
    一、多租户的背景及意义多租户为满足客户混合负载处理需求而生,通过提供两层用户机制,分层资源隔离,满足客户对计算和存储资源的自主控制需求。两级用户分别关联不同的资源池和存储空间,实现多租户下资源分组管理。二、GaussDB(DWS)的多租户目前GaussDB(DWS)的多租户能够进行隔离的资源包括:CPU资源、内存资源、IO资源、存储资源。GaussDB的多租户通过绑定资源池来实现,具体原理如下图所示:借助上图说明多租户的管控方式,见往下三、四、五章节。三、控制组设置通过设置控制组可以进行以下几方面的资源隔离:(1)设置CPU核数和控制组CPU份额,进行CPU资源管理;(2)设置异常规则来对异常作业进行终止或降级;1、class控制组        创建名称为“class_a”的子Class控制组,CPU资源配额分别为Class的40%。        gs_cgroup -c -S class_a -s 402、workload控制组        创建子Class控制组“class_a”下名称为“workload_a1”的Workload控制组,CPU资源配额分别为“class_a”控制组的20%。        gs_cgroup -c -S class_a -G workload_a1 -g 203、异常规则        设置“class_a”下属“workload_a1”的作业阻塞到1200秒或执行2400秒时执行终止动作。        gs_cgroup -S class_a -G workload_a1 -E "blocktime=1200,elapsedtime=2400" -a支持的控制组异常规则:异常阈值类型说明取值范围(0表示取消设置)支持的异常操作blocktime作业的阻塞时间,单位秒。包括全局并发排队以及局部并发排队的总时间。0~UINT_MAXabortelapsedtime作业的已被执行时间,单位秒。从开始执行到当前所消耗的时间。0~UINT_MAXabortallcputime作业在所有DN上执行时所耗费的CPU总时间,单位秒。0~UINT_MAXabort,penaltycpuskewpercent作业在DN上执行时的CPU时间的倾斜率,依赖于qualificationtime的设置。0~100abort,penaltyqualificationtime检查作业执行cpu倾斜率的间隔时间,单位秒,需同cpuskewpercent一起设置。0~UINT_MAXnonespillsize作业在DN上下盘的数据量,单位MB。0~UINT_MAXabortbroadcastsize作业在DN上算子大表广播数据量,单位MB。0~UINT_MAXabort 四、资源池设置通过设置资源池属性可以进行以下几方面的资源隔离:(1)通过设置mem_percent、memory_limit进行内存资源管理;(2)通过设置io_limits、io_priority进行IO管控;(3)通过设置active_statements、max_dop进行并发管控;(4)可以设置指定的控制组,进行CPU和异常规则的管理;(5)设置资源池异常规则;1、组资源池创建名称为“resource_pool_a”的组资源池关联到了“class_a”控制组。        CREATE RESOURCE POOL resource_pool_a WITH (control_group='class_a');2、业务资源池(1)创建名称为“resource_pool_a1”的业务资源池关联到了“workload_a1”控制组        CREATE RESOURCE POOL resource_pool_a1 WITH (control_group='class_a:workload_a1');(2)更新一个资源池,其控制组指定为"DefaultClass"组下属的"High" Timeshare Workload控制组。        ALTER RESOURCE POOL pool1 WITH (CONTROL_GROUP="High");(3)修改资源池“resource_pool_a1”的内存比例为可用内存大小的20%,即设置MEM_PERCEN的取值为20。        ALTER RESOURCE POOL resource_pool_a1 WITH (MEM_PERCENT=20);3、可设置的资源池属性属性属性值说明mem_percent0最大占用内存百分比。0代表不限制。control_groupDefaultClass:Medium资源池关联的控制组。active_statements-1资源池允许的最大并发数。-1和0代表不限制。max_dop-1资源池允许的简单作业最大并发数。-1和0代表不限制memory_limitdefault使用该资源池的作业估算内存上限。default表示最大为资源池内存一半,unlimited表示不限制。io_limits0每秒触发IO的次数上限。行存单位是万次/s,列存是次/s。0表示不控制。io_priorityNoneIO利用率高达90%时,重消耗IO作业进行IO资源管控时关联的优先级等级。None表示不控制。4、可设置的资源池异常规则异常阈值类型说明取值范围(0表示取消设置)支持的异常操作mem_limit作业在单实例上使用内存上限。32MB~max_dynamic_memoryabort 五、用户设置通过设置用户属性进行存储空间管控:1、创建组用户关联组资源池        CREATE USER tenant_a RESOURCE POOL 'resource_pool_a' PASSWORD 'Gauss_234';2、创建业务用户关联业务资源池        CREATE USER tenant_a1 RESOURCE POOL 'resource_pool_a1' USER GROUP 'tenant_a' PASSWORD 'Gauss_234';3、通过设置用户属性(PERM SPACE、TEMP SPACE、SPILL SPACE)可以进行存储空间管控:(1)修改用户“tenant_space_test”永久表空间限额不受限制。        ALTER USER tenant_space_test PERM SPACE 'unlimited';(2)修改用户“tenant_space_test”临时表空间限额为100G。        ALTER USER tenant_space_test TEMP SPACE '100G';(3)修改用户“tenant_space_test”算子落盘空间限额为200G。         ALTER USER tenant_space_test SPILL SPACE '200G';六、总结上文主要介绍了多租户技术的架构和使用方法,通过租户关联控制组和资源池,多租户的设置有效隔离了CPU资源、内存资源、IO资源和存储资源,提供了有力的混合负载管理能力。想了解GuassDB(DWS)更多信息,欢迎微信搜索“GaussDB DWS”关注微信公众号,和您分享最新最全的PB级数仓黑科技~转载来自:https://bbs.huaweicloud.com/blogs/255880
  • [技术干货] 【安全无小事】你应该知道的数仓安全——加密函数
    【摘要】 数据加密是防止未授权访问和防护数据泄露的有效技术。介绍了密码算法的基本原理和GaussDB(DWS)数仓的加密函数,包括哈希函数gs_hash,对称密码算法gs_encrypt/gs_decrypt。举例说明了加密函数的使用场景。数据加密作为有效防止未授权访问和防护数据泄露的技术,在各种信息系统中广泛使用。作为信息系统的核心,GaussDB(DWS)数仓也提供数据加密功能,包括透明加密和使用SQL函数加密。透明加密在你应该知道的数仓安全——透明加密一文中已有介绍。本文讨论SQL函数加密。技术背景密码学中密码算法可以分为三类:哈希函数、对称密码算法和非对称密码算法。哈希函数哈希函数又称为摘要算法,对于数据data,Hash函数会生成固定长度的数据,即Hash(data)=result。这个过程是不可逆的,即Hash函数不存在反函数,无法由result得到data。在不应保存明文场景,比如口令(password)属于敏感信息,系统管理员用户也不应该知道用户的明文口令,就应该使用哈希算法,存储口令的单向哈希值。实际使用中会加入盐值和迭代次数,避免相同口令生成相同的哈希值,以防止彩虹表攻击。对称密码算法对称密码算法使用相同的密钥来加密和解密数据。对称密码算法分为分组密码算法和流密码算法。分组密码算法将明文分成固定长度的分组,用密钥对每个分组加密。由于分组长度固定,当明文长度不是分组长度的整数倍时,会对明文做填充处理。由于填充的存在,分组密码算法得到的密文长度会大于明文长度。流密码算法将明文逐比特与密钥流运算。流密码算法不需要填充,得到的密文长度等于明文长度。非对称密码算法非对称密码算法,又称为公钥密码算法。算法使用两个密钥:公钥和私钥。公钥向所有人公开,私钥保密。非对称密码算法应用于密钥协商、数字签名、数字证书等领域。技术实现GaussDB(DWS)主要提供了哈希函数和对称密码算法。哈希函数支持sha256, sha384, sha512和国密sm3。对称密码算法支持aes128, aes192, aes256和国密sm4。哈希函数md5(string)将string使用MD5加密,并以16进制数作为返回值。MD5的安全性较低,不建议使用。gs_hash(hashstr, hashmethod)以hashmethod算法对hashstr字符串进行信息摘要,返回信息摘要字符串。支持的hashmethod:sha256, sha384, sha512, sm3。testdb=# SELECT gs_hash('GaussDB(DWS)', 'sha256'); gs_hash ------------------------------------------------------------------ cc2d1b97c6adfba44bbce7386516f63f16fc6e6a10bd938861d3aba501ac8aab (1 row)对称密码算法gs_encrypt(encryptstr, keystr, cryptotype, cryptomode, hashmethod)采用cryptotype和cryptomode组成的加密算法以及hashmethod指定的HMAC算法,以keystr为密钥对encryptstr字符串进行加密,返回加密后的字符串。支持的cryptotype:aes128, aes192, aes256, sm4。支持的cryptomode:cbc。支持的hashmethod:sha256, sha384, sha512, sm3。testdb=# SELECT gs_encrypt('GaussDB(DWS)', '1234', 'aes128', 'cbc', 'sha256'); gs_encrypt -------------------------------------------------------------------------------------------------------------------------- AAAAAAAAAADlzZYiNQK1uB+p1gza4Lu3Moj3HdP4E1uJmqfDYBaXDLMt7RZoE0YVx9h2dMRYBQ5fhFNqqM49sUkeS72o8kX5vWRQvfW3fuocGyp+b+lX9A== (1 row)gs_decrypt(decryptstr, keystr,cryptotype, cryptomode, hashmethod)采用cryptotype和cryptomode组成的加密算法以及hashmethod指定的HMAC算法,以keystr为密钥对decryptstr字符串进行解密,返回解密后的字符串。解密使用的keystr必须保证与加密时使用的keystr一致才能正常解密。testdb=# SELECT gs_decrypt('AAAAAAAAAADlzZYiNQK1uB+p1gza4Lu3Moj3HdP4E1uJmqfDYBaXDLMt7RZoE0YVx9h2dMRYBQ5fhFNqqM49sUkeS72o8kX5vWRQvfW3fuocGyp+b+lX9A==', '1234', 'aes128', 'cbc', 'sha256'); gs_decrypt -------------- GaussDB(DWS) (1 row)效果分析有个student表,有id,name和score三个属性。name可以使用哈希函数加密保存,score可以使用对称密码算法保存。testdb=# create table student (id int, name text, score text); CREATE TABLE testdb=# insert into student values (1, gs_hash('alice', 'sha256'), gs_encrypt('95', '12345', 'aes128', 'cbc', 'sha256')); INSERT 0 1 testdb=# insert into student values (2, gs_hash('bob', 'sha256'), gs_encrypt('92', '12345', 'aes128', 'cbc', 'sha256')); INSERT 0 1 testdb=# insert into student values (3, gs_hash('peter', 'sha256'), gs_encrypt('98', '12345', 'aes128', 'cbc', 'sha256')); INSERT 0 1没有密钥的用户即使拥有了select权限也无法看到name和score这两列加密数据。testdb=# select * from student; id | name | score ----+------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------- 1 | 2bd806c97f0e00af1a1fc3328fa763a9269723c8db8fac4f93af71db186d6e90 | AAAAAAAAAAB26RmKZdGciLdOM1Z0sjsHg6Qh1b8taF3cY5KDVm+faJK5AT9tjufkr3Wogj3tIpFfiIEb6+miGqPHWcmKnFsArAMoBG9pPDawGs1Qze7xGg== 2 | 81b637d8fcd2c6da6359e6963113a1170de795e4b725b84d1e0b4cfd9ec58ce9 | AAAAAAAAAAB26RmKZdGciLdOM1Z0sjsHZOHH7URkyme6r8Hfh1k0UsVbgbREjFMkgB52w+7GtUGqGgUik07ghajSD9PMIDLd/49wBCVROm2/HSOw6jzbxA== 3 | 026ad9b14a7453b7488daa0c6acbc258b1506f52c441c7c465474c1a564394ff | AAAAAAAAAAB26RmKZdGciLdOM1Z0sjsHwv6p/OAfDUyVULAqpaHIrYJYMcqLmQSj3K/REyavfMoKB7hgUpEPXfHRutWur37bru68jjt5XcBHFBjZeMgowA== (3 rows)拥有密钥的用户可以通过解密查看到加密数据。testdb=# select id, gs_decrypt(score, '12345', 'aes128', 'cbc', 'sha256') from student; id | gs_decrypt ----+------------ 1 | 95 2 | 92 3 | 98 (3 rows)总结数据加密是防止未授权访问和防护数据泄露的有效技术。介绍了密码算法的基本原理和GaussDB(DWS)数仓的加密函数,包括哈希函数gs_hash,对称密码算法gs_encrypt/gs_decrypt。举例说明了加密函数的使用场景。想了解GuassDB(DWS)更多信息,欢迎微信搜索“GaussDB DWS”关注微信公众号,和您分享最新最全的PB级数仓黑科技~转载来自:https://bbs.huaweicloud.com/blogs/251514
  • [运维管理] GaussDB A 8.0.0.1是否存在获取中文首字母的函数?生僻字的情况怎么处理?oracle 通过F_NLSSORT实现
    【操作步骤&问题现象】GaussDB A 8.0.0.1是否存在获取中文首字母的函数?生僻字的情况怎么处理?oracle 通过F_NLSSORT实现,GaussDB A怎么实现?
  • [实践系列] DWS性能点赞
    前期试用了DWS 总体来讲,很容易上手,操作了官网:交通卡口通行车辆分析 实践,分分钟搞定,执行效率还是非常高的,虽然只有3节点,8亿多的数据处理的还是很速度,sql on hadoop 很方便,还在不断摸索实践中,官网文档,论坛精华帖,学到了很多东西,为华为云点赞,祝愿更多的企业用上DWS数仓
  • [其他系列] GaussDB(DWS)环境部署-DBM下发POD区数据库流程
    1. 确保自己拥有CMDB、DBM权限。2. 上传标准欧拉镜像:镜像地址:http://wiki.inhuawei.com/pages/viewpage.action?pageId=89009308注:注意所用欧拉镜像版本,当前DBM平台支持的为欧拉2.8以下python2的版本;         如果是python3版本可能会有问题,建议咨询平台同事确定。1). 使用op_svc_mgmt账号登录obs2).创建桶(已存在跳过)         注:不建议桶名为dws,后续上传gsql工具也会创建dws桶3). 上传——结束。 3. 创建私有镜像及DBM数据库所需ECS1). 登录console平台;2). 镜像服务;3). 创建私有云镜像;4). 选择之前上传的欧拉镜像文件;5).选择架构、系统盘大小、名称(没有标准,可以区分就好);6). 点击创建,创建成功后如下图所示;——结束4. DBM数据库所需ECS1). 弹性云服务器(ECS);2). 根据部署指导手册和局点情况选择cpu架构、规格;3). 根据部署指导手册,镜像没有特殊要求,选择系统盘和数据盘,一套dbm数据库需要主备两台机器;4). 选择网络,manage_vpc15). 填写名字和密码,没有特殊规定,自己设计区分好、记录好;6). 创建;7). 创建成功后如下所示,切记一套dbm数据库是主备两台机器;——结束5. ECS绑定浮动ip1). 选择虚拟私有云2). 选择之前创建ecs时的网络manage_vpc1;3). 点击子网标签下的子网名称; 4). 虚拟ip点击申请虚拟ip地址,自动分配即可 5). 申请完虚拟ip后,绑定之前创建的dbm数据库主备机器;绑定完成可以检查一下;         注:一套主备绑定一个ip,即一个数据库对应一个ip;——结束  6. 对创建的ECS安装agent1). 普罗网页运维服务,进入CloudAutoDeploy-SDK,选择部署管理>>运维平台初始部署   >>Agent部署 2). 下载模板、填写自己创建的dbm ecs机器的信息,可参考下图    root_key 和 user_key 是创建ecs时的密码3). 成功如下图所示——结束7. 挂树1). 进入CMDB、先进行主机位置信息订正;2). 完成订正后,进入服务管理,将机器挂到CLOUDDB/EI-DB/下对应分支上,如下所示;——结束 8. 手动分区,配置yum源1). 到创建的ecs机器上执行该脚本 (见附件)       sh auto_disk_mysqldb.sh 2). 配置yum源[base]name=EulerOS-2.0SP8 basebaseurl=http://mirrors.internal.huaweigovcloud.com/Euler2.8/enabled=1gpgcheck=0gpgkey=http://mirrors.internal.huaweigovcloud.com/Euler2.8/[cloudmiddware]name=cloud middle softwarebaseurl=http://mirrors.internal.huaweigovcloud.com/CloudMiddleWare/enabled=1gpgcheck=0——结束   9. DBM已有主机上线方式创建进入CloudDBMgmt页面,选择数据库实例创建,选择部署的区域,对应的数据库类型;选择已有主机,填写相关信息,创建。 若创建失败,请咨询平台负责人,咨询前可以先排查一下自己镜像版本。——结束
  • [开发应用] 【DWS 8.1.0】【data studio出错】无法连接dn
    【功能模块】【操作步骤&问题现象】在data studio上执行脚本出错[0][SQLErrorCode:6321]ERROR: Failed to send command to Datanodes dn_6753_6754[13367148]Line Number:12这种错误是什么原因导致的?【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [问题求助] 请问目前gaussdb支持行存压缩吗?
    请问目前gaussdb支持行存压缩吗?
  • [问题求助] 数据发生倾斜后,gaussdb能够自动修复吗?
    数据发生倾斜后,gaussdb能够自动修复吗?
  • [存储] GaussDB(DWS)业务容错利器—物理细粒度备份恢复技术
    1技术概述1.1 价值及主要内容      随着信息技术的发展,人类进入大数据时代,数据量呈现爆炸式的增长,金融领域数据承载核心业务,即便遭遇各种软硬件错误或灾难,也需要具备找回和快速恢复业务能力,因此备份恢复能力成为数仓的最关键能力之一。华为的GaussDB(DWS)支持了物理细粒度备份恢复能力。用户可自定义备份整集群或部分数据库元素,并进行灵活的单、多表恢复,有效缩减备份数据所需的时间窗口和存储空间,同时聚焦于用户业务场景的关键表的备份恢复。      物理细粒度备份恢复目前主要支持的2大场景:一、从细粒度化的集群级全量备份集中恢复单/多表;二、备份指定的schema全量数据,并可从该备份集中恢复单/多表;2技术方案原理2.1 NBU备份恢复方案      Roach为GaussDB(DWS)数据库备份工具,支持多种备份恢复类型及方案。对于Roach通用架构,每个集群节点都有Roach agent进程负责本节点的数据备份。第一个节点额外有一个Roach master进程负责分布式集群备份。Roach提供非侵入式的备份到NBU方案,物理细粒度备份恢复同样基于此框架,因此首先对此进行介绍说明。Roach client插件部署至NBU Media Server机器中,用于接收Roach agent发送的备份数据,并转发至NBU 服务器中。      NBU集群部署模式如下:图1 NBU集群部署模式      非侵入式NBU备份方案架构:图2 NBU非侵入式部署方案      如上图所示(3节点GaussDB(DWS)集群为例),NBU备份数据流向为:Roach agent将压缩数据向Roach client分片传输;Roach agent调用NBU客户端XBSA接口,请求NBU备份;NBU client将此请求转发至NBU Master Server;NBU master服务器负责分配存储到哪个NBU media服务器;Roach client将调用xbsa接口将备份数据传输至NBU Media Server;Media Server将备份数据存储至挂载的磁带机或磁盘上2.2 细粒度元信息生成方案      为了能够从备份集中细粒度地恢复单表或多表,首先需要获取所有数据库下schema、表的元信息DDL,将其持久化并备份到介质。需要说明的是,由于元信息DDL导出时间较长,设计中采用DDL导出备份与数据备份并行的方式,以提升性能:Roach获取DDL的设计思路如下所示——图3 物理细粒度备份恢复获取元数据方案      备份过程中,为支持细粒度恢复,通过表名映射到元信息,进而找到所有关联表的物理文件、事务信息,需要获取并备份一个映射map,map按数据库元素层次逐层获取,主要包括:Agent --> Instance –> Database –> Schema ->Table –> Related Relations      实际的执行中,将为每个物理节点、实例,并行进行映射元信息查询和存储,设计逻辑如下:图4  细粒度备份恢复文件映射MAP获取 2.3 数据备份生产-消费者模型      GaussDB(DWS)的细粒度化全量备份实现于Roach备份工具。Roach集群级全量备份,通过与GaussDB(DWS)Kernel交互,在pg_start_backup()执行后依次备份行存数据文件、WAL文件,执行pg_stop_backup()后备份列存数据文件。这一系列备份流程在完整的事务保证下,确保数据落磁盘,并被有序地备份到NBU管理的介质路径下。       细粒度数据备份的过程,首先依靠2.2中从系统表查询得到的MAP整理待备份物理文件列表,具体到每个库、schema、table,逐层递进,最终得到一张表所依赖的所有关联文件最小集合,创建的备份块最小逻辑粒度为schema,同一个schema下的表,会连续地向同一个逻辑块写,物理上按segment配置(通常为4G)进行切割。具体的备份数据写入介质,依靠如下生产-消费者模型,实例下的数据文件被数据写线程(生产者)按块读取,压缩后写入buffer中,发送数据线程(消费者)则从buffer中获取数据块,调用XBSA标准的API接口,流式地将数据写入到介质层,由NBU Master分配Media Server,最终落盘;数据追加写的过程中,若超过段文件segement size上限,则会切割备份文件,从而形成file_0.rch,file_1.rch等备份压缩文件。该生产-消费者模型如下图所示:图5 物理细粒度数据备份到介质生产者-消费者模型2.4 细粒度恢复多表方案      当前支持从集群级全量备份集、或schema级别备份集中做多表细粒度恢复,这两种主要场景核心技术思想一致,场景支持情况如下:支持单次从集群级全量备份集中恢复单表或多表,恢复表的名称列表写入一个配置文件,配置文件名由恢复参数—table-list指定;集群级全量备份集恢复单/多表,指定待恢复的表可跨多个schema;恢复时可指定恢复到原表或新表,新表可与原表在不同schema,但需要在同一个database,表名可为新表名;指定的恢复目标schema可以存在,也可以不存在,恢复时新建出来,恢复的新表由—restore-target-list指定的文件配置,若希望全部恢复到原表名,则—table-list和—restore-target-list可指定同一配置文件;若恢复时指定的恢复目标表存在(原表名或新表名),那么恢复可指定—clean参数先drop cascade级联删除该表(视图、索引、权限等一并删除)再恢复,不带该参数,则需要用户手动确认后drop,再进行恢复,这主要是为了应对备份和恢复时前表名相同,但表定义不同的场景。细粒度是在线恢复,不清理数据也不停集群,恢复完成后表可直接使用,无build等额外时间消耗。      下图展示了恢复时的主要方案设计:图6 细粒度在线恢复单/多表逻辑图      恢复时的步骤简述如下:Step1:接收各节点的各实例对应的工作进程Roach Agent数据请求后,Roach Client与NBU介质建连,开始List检索并获取文件,发给Roach Client;Step2:Roach Client与各节点的Roach Agent,通过TCP连接转发待恢复数据,包含元数据和实例数据,实例获取后存入buffer;Step3:Roach读入待恢复的表信息列表,构造恢复落盘文件的filter过滤器,只恢复目标表备份文件;Step4:根据恢复回来的DDL,解析到待恢复表元信息,并根据元信息,将中间临时tmp表、恢复最终目标表创建出来;Step5:根据新建tmp表,创建元信息map,并与原备份表的map信息一一映射,过滤文件落盘;Step6:将备份的数据文件relfilenode交换到新建的tmp表relfilenode;Step7:查询tmp表的数据,插入数据到最终目标表。3细粒度备份恢复技术应用实测3.1 测试环境3.2 细粒度恢复用例的执行      这里给出部分典型场景的用例执行情况:Schema级别备份,恢复单/多表      验证点:指定schema备份成功;从schema备份集中恢复多表至目标table;数据构造执行Schema级别备份:      python $GPHOME/script/GaussRoach.py -t backup --master-port 9500 --media-destination nbu_policy --media-type NBU --metadata-destination  $GAUSSHOME/roachbackup/metadata --physical-fine-grained  --schemaname public --dbname test_tpch1 --parallel-process 3 --nbu-on-remote --nbu-media-list /home/omm/media.list --client-port 9200从该Schema 备份集中指定恢复customer(列存表)、public.nation(行存表)至liding11.customer11、liding22.nation22执行恢复指定多表:      python  $GPHOME/script/GaussRoach.py -t restore --master-port 9500 --media-destination  nbu_policy --media-type NBU --metadata-destination  $GAUSSHOME/roachbackup/metadata --physical-fine-grained --backup-key  20201226_101715  --dbname test_tpch1 --table-list /home/omm/table.list --parallel-process 3 --restore-target-list /home/omm/target.list --clean  --nbu-on-remote --nbu-media-list /home/omm/media.list --client-port 9200数据校验4技术总结       本文主要从技术价值、应用场景、技术原理、技术实测展示几个维度对GaussDB(DWS)物理细粒度备份恢复技术进行了剖析,可以看到物理细粒度备份恢复是对于已有全量数据备份恢复的一个有效的增强,客户可以以更灵活地方式规划自己的冷热数据,选择更小的逻辑粒度进行备份或恢复,节省宝贵的备份存储空间和cpu资源的同时,也更少地对在线业务带来冲击。在恢复层面,不同于旧有的集群级全量恢复需要停集群和清理数据,细粒度在线恢复不影响任何在线业务,也不会因恢复前清理集群带来可能的数据损失风险,因此该技术拥有较为广阔的前景和深远的意义。转载来自:华为云数仓GaussDB(DWS)
  • [行业资讯] 多篇论文入选SIGMOD,华为云GaussDB底气何来?
    6月20日-25日,2021 ACM SIGMOD 在西安举行。22日,华为GaussDB内核首席架构师任阳将受邀参会并分享华为新一代自研分布式数据库GaussDB的最新探索和研究成果,展示GaussDB相关论文入选SIGMOD等国际顶级学术会议的成果。数据库创新从来不是一蹴而就,而是千锤百炼后的厚积薄发,是百尺竿头更进一步,国产数据库的崛起和发展如此,华为云GaussDB也是如此。围绕AI-Native课题研究,今年华为云GaussDB相关论文被入选SIGMOD国际顶级会议,其研究论文《Learned Cardinality Estimation for Similarity Queries》提出使用DNN进行基数预测,为了解决DNN训练问题,创新地提出了模型分割和数据分割解决方法,同时在此基础上提出了使用该方法进行连接操作结果集预测。该方法在BMS、GloVe300、ImageNetde等数据集上取得了很好的效果。作为数据库领域公认的最具学术影响力地位的国际性学术会议,SIGMOD与ICDE、VLDB并称为国际数据库三大顶级会议。华为云GaussDB基于AI-Native理念,近年在SIGMOD、VLDB等会议上发表了数篇论文,如《Interactively Discovering and Ranking Desired Tuples without Writing SQL Queries》,《Query Performance Prediction for Concurrent Queries using Graph Embedding》,《QTune: A Query-Aware Database Tuning System with Deep Reinforcement Learning》以及《An End-to-End Learning-based Cost Estimator》等,分别就数据库优化器相关问题提出了AI技术解决方案,在RBO、CBO基础之上提出了基于AI技术的AI优化器,简称为AIBO(AI Based Optimizer),使得数据库中从数据分布估计、代价估计、执行计划选择等各个阶段均使用AI技术,在该领域取得了很好的突破。华为历来重视与高校、合作伙伴共建良好生态关系,积极促进数据库领域开源、开放、融合、创新发展。在同清华大学数据库组的合作中,华为进一步围绕AI-Native理念,在GaussDB的开源版本openGauss社区中,使用AI技术对数据库的众多模块进行了重构,例如使用MCTS方式代替数据库优化器中基于规则的逻辑重写,使用Tree-LSTM代替原始的基于直方图的代价估计,使用深度强化学习方式代替原始的Greedy/Genetic算法。同时为了提升数据库自治能力,先后提出使用Extreme Value Theory进行数据库异常检测,使用LSTM+KNN的方式进行系统异常诊断,使用Tree-LSTM方式进行SQL诊断,使用深度强化学习及RNN的方式进行系统自调优,物化视图推荐及索引推荐,使用GNN的方式进行系统性能预测。相关技术陆续在实际生产系统中使用,例如索引推荐功能,在客户负载性能提升的基础上,消除了83%的索引冗余,索引空间磁盘占用率降低70%。此外,华为在同清华以及CCF数据库专委会的合作中,陆续产生众多的科研成果,先后在SIGMOD、VLDB、ICDE上发表论文36篇,CCF-华为数据库创新研究计划总共资助20项数据库相关研究课题,成果覆盖数据库多模、云数据库、数据库全密态处理、图数据库等,极大的活跃了openGauss开源社区以及国内数据库研究发展。6月22日,在本次SIGMOD 2021大会上,华为GaussDB内核首席架构师任阳将会带来《华为自研分布式数据库》主题分享,内容覆盖华为自研分布式数据库的发展和使用现状,以及GaussDB极致性能、混合负载、高安全等特性,更多精彩,敬请关注!嘉宾简介:2014年9月至2019年10月,担任分布式分析型数据库架构师与系统组组长,完成华为公司自研超大规模并行数据仓库产品设计与实现,完成GaussDB(DWS)数据仓库在工商银行的规模商用。之后担任华为GaussDB自研分布式数据库首席架构师及内核系统组组长,在性能、混合负载能力、容灾能力、安全能力以及易运维能力方面构筑数据库内核核心竞争力。议题简介:本议题将会介绍华为自研分布式数据库的发展和使用状况,并围绕高性能、高可用、混合负载、安全以及易运维五大特性进行技术介绍,向大家全方位展示GaussDB分布式数据库。当前GaussDB分布式数据库及其开源版本openGauss相继在国内头部银行客户上线并规模使用。  点击链接预约直播:https://live.bilibili.com/21945422 
  • [问题求助] 【甘肃妇幼产品】【DWS】连接报错
    【功能模块】DWS【操作步骤&问题现象】1、DWS无法连接【截图信息】【日志信息】(可选,上传日志内容或者附件)联系人姓名:周健联系人电话:18662965342联系人邮箱:zhoujian001@chinasofti.com
  • [进阶宝典] 【云小课】GaussDB(DWS)数据落盘安全吗?来直面三大灵魂拷问!
    GaussDB(DWS)作为一款运行在华为云上的核心数据仓库,客户大量的数据存储在DWS的数据节点中,DWS不仅拥有海量数据查询的极致性能,在安全方面还需要有加固防护措施。当前数据库都是多个用户共同访问数据,这些数据都具有重要价值,关系到用户的核心资产和用户隐私,如何禁止别有用心的用户窃取以及黑客攻击,本课程给您提供数据的安全管理方法。云数仓安全层层防护云数仓外部:由华为云的云安全管理产品保驾护航。如:Anti-DDoS、DDoS、Web应用防火墙、漏洞扫描服务、企业主机安全、数据加密服务、SSL证书管理、云堡垒机等。云数仓内部:主要通过三权分立、行级访问控制、审计管理三种方式进行防护。这三方式结合到数据开发实际场景中,简单可以概括为(1)谁能看?(2)能看啥?(3)看没看? 下面我们从这三个方面一一介绍:(1)谁能看?通过DWS三权分立模型,将管理员分成三类:系统管理员,安全管理员和审计管理员,不存在“一手遮天”的管理员,当某个管理员密码泄露时,使数据库破坏降到最低。从此各司其职,安全管理员负责用户,审计管理员负责日志审计,系统管理员负责系统运维。表1 三权分立管理员名称能否创建用户能否查看审计日志是否有系统管理员权限系统管理员否否是安全管理员是否否审计管理员否是否开启三权分立后,对象权限变化如下表说明:表1 未开启三权分立对象名称系统管理员安全管理员|审计管理员表空间对表空间有创建、修改、删除、访问、分配操作的权限。不具有对表空间进行创建、修改、删除、分配的权限,访问需要被赋权。表对所有表有所有的权限。仅对自己的表有所有的权限,对其他用户的表无权限。索引可以在所有的表上建立索引。仅可以在自己的表上建立索引。模式对所有模式有所有的权限。仅对自己的模式有所有的权限,对其他用户的模式无权限。函数对所有的函数有所有的权限。仅对自己的函数有所有的权限,对其他用户放在public这个公共模式下的函数有调用的权限,对其他用户放在其他模式下的函数无权限。自定义视图对所有的视图有所有的权限。仅对自己的视图有所有的权限,对其他用户的视图无权限。系统表和系统视图可以查看所有系统表和视图。只可以查看部分系统表和视图。表1 开启三权分立对象名称系统管理员安全管理员|审计管理员表空间无变化无变化。表权限缩小。只对自己的表有所有权限,对其他用户放在属于各自模式下的表无权限。无变化。索引权限缩小。只可以在自己的表上建立索引。无变化。模式权限缩小。只对自己的模式有所有的权限,对其他用户的模式无权限。无变化。函数权限缩小。只对自己的函数有所有的权限,对其他用户放在属于各自模式下的函数无权限。无变化。自定义视图权限缩小。只对自己的视图及其他用户放在public模式下的视图有所有的权限,对其他用户放在属于各自模式下的视图无权限。无变化。系统表和系统视图无变化。无变化。开启方法:录GaussDB(DWS) 管理控制台。在左侧导航树中,单击“集群管理”。在集群列表中,单击指定集群的名称,然后单击“安全设置”,打开三权分立开关。依次设置安全管理员用户名、密码、审计管理员用户、密码。单击“应用”。在弹出的“保存配置”窗口中,选择是否勾选“立即重启集群”,然后单击“是”,重启后生效。(2)能看啥?行级访问控制特性是将数据库访问控制精确到数据表行级别,使数据库达到行级访问控制的能力。不同用户执行相同的SQL查询操作,读取到的结果是不同的。即同一张表,不同用户只能查看自身相关的数据信息,不能查看其他用户的数据信息。GaussDB(DWS)主要通过“ALTER TABLE tablename ENABLE ROW LEVEL SECURITY”语法实现行级访问控制,示例如下:创建用户alice, bob, peter。CREATE ROLE alice PASSWORD 'Gauss@123'; CREATE ROLE bob PASSWORD 'Gauss@123'; CREATE ROLE peter PASSWORD 'Gauss@123';创建表public.all_data,包含不同用户数据信息。CREATE TABLE public.all_data(id int, role varchar(100), data varchar(100));向数据表插入数据。INSERT INTO all_data VALUES(1, 'alice', 'alice data'); INSERT INTO all_data VALUES(2, 'bob', 'bob data'); INSERT INTO all_data VALUES(3, 'peter', 'peter data');将表all_data的读取权限赋予alice,bob和peter用户。GRANT SELECT ON all_data TO alice, bob, peter;打开行访问控制策略开关。ALTER TABLE all_data ENABLE ROW LEVEL SECURITY;创建行访问控制策略,当前用户只能查看用户自身的数据。CREATE ROW LEVEL SECURITY POLICY all_data_rls ON all_data USING(role = CURRENT_USER);查看表详细信息。 \d+ all_data Table "public.all_data" Column | Type | Modifiers | Storage | Stats target | Description --------+------------------------+-----------+----------+--------------+------------- id | integer | | plain | | role | character varying(100) | | extended | | data | character varying(100) | | extended | | Row Level Security Policies: POLICY "all_data_rls" USING (((role)::name = "current_user"())) Has OIDs: no Distribute By: HASH(id) Location Nodes: ALL DATANODES Options: orientation=row, compression=no, enable_rowsecurity=true切换至用户alice,执行SQL"SELECT * FROM all_data"SET ROLE alice PASSWORD 'Gauss@123'; SELECT * FROM all_data; id | role | data ----+-------+------------ 1 | alice | alice data (1 row) EXPLAIN(COSTS OFF) SELECT * FROM all_data; QUERY PLAN ---------------------------------------------------------------- Streaming (type: GATHER) Node/s: All datanodes -> Seq Scan on all_data Filter: ((role)::name = 'alice'::name) Notice: This query is influenced by row level security feature (5 rows)切换至用户peter,执行SQL"SELECT * FROM .all_data"SET ROLE peter PASSWORD 'Gauss@123'; SELECT * FROM all_data; id | role | data ----+-------+------------ 3 | peter | peter data (1 row) EXPLAIN(COSTS OFF) SELECT * FROM all_data; QUERY PLAN ---------------------------------------------------------------- Streaming (type: GATHER) Node/s: All datanodes -> Seq Scan on all_data Filter: ((role)::name = 'peter'::name) Notice: This query is influenced by row level security feature (5 rows)(3)看没看?GaussDB(DWS) 支持对特定数据库操作记录审计日志,包括:日志保留策略、用户越权访问、存储过程以及对数据库对象的DML、SELECT、COPY和DDL操作。审计日志配置后,当GaussDB(DWS) 集群状态异常,或根据业务需要,用户可以查询审计信息确定故障原因或定位历史操作记录。配置方法:登录GaussDB(DWS) 管理控制台。单击“集群管理”。在集群列表中,单击指定集群的名称,然后单击“安全设置”。在“审计配置”区域中,设置审计日志保留策略。表1 审计日志保留策略参数名说明审计日志保留策略设置审计日志保留策略,支持如下两种策略:“空间优先”:表示当单个节点的审计日志超过1G后,将自动淘汰审计日志。“时间优先”:表示在“审计日志最小保存时间(天)”内会保留审计日志,超过时间后,根据存储容量限制(单个节点1G),对审计日志进行自动淘汰。审计日志最小保存时间(天)当“审计日志保留策略”设置为“时间优先”策略时,该参数有效。可选天数为0~730天,默认值为90天。根据需要设置以下操作的审计开关。表1 审计项参数名说明审计用户越权访问操作表示是否记录用户的越权访问操作,默认关闭。审计DML操作表示是否对数据表的INSERT、UPDATE和DELETE操作进行记录,默认关闭。审计SELECT操作表示是否对SELECT操作进行记录,默认关闭。审计存储过程执行表示是否在执行存储过程和自定义函数的时候记录操作信息,默认关闭。审计COPY操作表示是否对COPY操作进行记录,默认关闭。审计DDL操作表示是否对指定数据库对象的CREATE、DROP和ALTER操作进行记录。除“Database”、“Schema”和“User”默认启用记录,其他默认关闭。GaussDB(DWS) 默认还开启了以下的关键审计项。表1 关键审计项参数名说明关键审计项记录用户登录成功、登录失败和注销的信息。记录数据库启动、停止、恢复和切换审计信息。记录用户锁定和解锁功能信息。记录用户权限授予和权限回收信息。记录SET操作的审计功能。设置是否开启审计日志转储功能。单击“应用”。查看审计日志:只有拥有AUDITADMIN属性的用户才有查看权限,查询格式如下:pg_query_audit(timestamptz startime,timestamptz endtime,audit_log)查询审计记录。SELECT * FROM pg_query_audit('2015-07-15 08:00:00','2015-07-15 09:47:33');查询结果如下: time | type | result | username | database | client_conninfo | object_name | detail_info | node_name | thread_id | local_port | remote_port ------------------------+---------------+--------+----------+----------------+-----------------+----------------+---------------------------------------------------------------+-----------+---------------------------------+------------+------------- 2015-07-15 08:03:55+08 | login_success | ok | dbadmin | gaussdb | gs_clean@::1 | gaussdb | login db(gaussdb) success,the current user is:dbadmin | cn_5003 | 139808902997776@490233835920483 | 9000 | 55805该条记录表明,用户ommdbadmin在2021-02-23 21:49:57.82+08登录数据库gaussdb。其中client_conninfo字段在log_hostname启动且IP连接时,字符@后显示反向DNS查找得到的主机名。查询所有CN节点审计记录。SELECT * FROM pgxc_query_audit('2019-01-10 17:00:00','2019-01-10 19:00:00') where type = 'login_success' and username = 'user1';查询结果如下: time | type | result | username | database | client_conninfo | object_name | detail_info | node_name | thread_id | local_port | remote_port ------------------------+---------------+--------+----------+----------+-----------------+-------------+------------------------------------------------------+--------------+---------------------------------+- -----------+------------- 2019-01-10 18:06:08+08 | login_success | ok | user1 | gaussdb | gsql@[local] | gaussdb | login db(gaussdb) success,the current user is:user1 | coordinator1 | 139965149210368@600429968516954 | 17560 | null 2019-01-10 18:06:22+08 | login_success | ok | user1 | gaussdb | gsql@[local] | gaussdb | login db(gaussdb) success,the current user is:user1 | coordinator1 | 139965149210368@600429982697548 | 17560 | null 2019-01-10 18:06:54+08 | login_success | ok | user1 | gaussdb | gsql@[local] | gaussdb | login db(gaussdb) success,the current user is:user1 | coordinator2 | 140677694355200@600430014804280 | 17562 | null (3 rows)查询结果显示,用户user1在CN1和CN2的成功登录记录。了解更多华为云数据仓库GaussDB(DWS),请猛戳
总条数:2746 到第 页
上滑加载中