审计

Greenplum数据库有能力审计很多事件,包括系统的启动和关闭、Segment数据库失效、导致错误的SQL语句以及所有的连接尝试和断开连接。Greenplum数据库还记录SQL语句和关于SQL语句的信息,并且可以以多种方式配置来记录不同细节的审计信息。log_error_verbosity配置参数控制写入到服务器日志中的每一条消息的细节多少。类似地,log_min_error_statement参数允许管理员配置为SQL语句记录的细节层次,而log_statement参数确定要被审计的SQL语句的种类。当可审计事件由Greenplum数据库外部的主体发起时,Greenplum数据库会为所有可审计事件记录用户名。

Greenplum数据库通过只允许具有适当角色的管理员在日志文件上执行操作来防止对审计记录的未授权修改和删除。日志以一种使用逗号分隔值(CSV)的专有格式存储。每个Segment和Master都存储有自己的日志文件,不过这些都可以由管理员从远程访问。Greenplum数据库还通过log_truncate_on_rotation参数授权对旧日志文件的覆盖。这是一个本地参数并且必须在每个Segment和Master的配置文件中设置。

Greenplum提供了一个名为gp_toolkit的管理方案,用户可以用它来查询日志文件、系统目录和操作环境得到系统状态信息。包括用法在内的更多信息,请参考Greenplum数据库参考指南中的gp_tookit管理方案附录。

查看数据库服务器的日志文件

Greenplum数据库中的每一个数据库实例(Master和Segment)都是一个运行着的PostgreSQL数据库服务器,它们都有自己的服务器日志文件。每天的日志文件被创建在Master和每个Segment的数据目录下的pg_log目录中。

服务器日志文件被写为逗号分隔值(CSV)格式。不是所有的日志项在所有的日志域中都有值。例如,只有与查询工作者进程相关的日志项才会有slice_id值。一个特定查询的相关日志项可以通过其会话标识符(gp_session_id)和命令标识符(gp_command_count)确定。

# 域名 数据类型 描述
1 event_time timestamp with time zone 日志项被写到日志中的时间
2 user_name varchar(100) 数据库用户名
3 database_name varchar(100) 数据库名
4 process_id varchar(10) 系统进程ID(带前缀“p”)
5 thread_id varchar(50) 线程计数(带前缀“th”)
6 remote_host varchar(100) 在Master上,是客户端机器的主机名/地址。在Segment上,是Master的主机名/地址。
7 remote_port varchar(10) Segment或Master的端口号
8 session_start_time timestamp with time zone 会话连接打开的时间
9 transaction_id int Master上的顶层事务ID。这个ID是任何子事务的父亲。
10 gp_session_id text 会话标识符号(带前缀“con”)
11 gp_command_count text 会话内部的命令编号(带前缀“cmd”)
12 gp_segment text Segment内容标识符(对主Segment带前缀“seg”,镜像Segment带前缀“mir”)。Master的内容id总是-1。
13 slice_id text 切片id(查询计划被执行的部分)
14 distr_tranx_id text 分布式事务ID
15 local_tranx_id text 本地事务ID
16 sub_tranx_id text 子事务ID
17 event_severity varchar(10) 值包括:LOG、ERROR、FATAL、PANIC、DEBUG1、DEBUG2
18 sql_state_code varchar(10) 与日志消息相关的SQL状态代码
19 event_message text 日志或者错误消息文本
20 event_detail text 与错误或者警告消息相关的详细消息文本
21 event_hint text 与错误或者警告消息相关的提示消息文本
22 internal_query text 内部产生的查询文本
23 internal_query_pos int 指向内部产生的查询文本中的光标
24 event_context text 产生消息的上下文
25 debug_query_string text 带有完整细节的用户提供的查询字符串,用于调试。这个字符串可能会由于内部使用而修改。
26 error_cursor_pos int 指向查询字符串中的光标
27 func_name text 产生这个消息的函数
28 file_name text 产生消息的内部代码文件
29 file_line int 产生消息的内部代码文件的行号
30 stack_trace text 与这个消息相关的栈跟踪文本

Greenplum提供一个名为gplogfilter的工具,它能被用来在一个Greenplum数据库日志文件中搜索匹配指定条件的项。这个工具默认会搜索位于默认日志位置的Greenplum的Master日志文件。例如,要显示Master日志文件的最后三行:

$ gplogfilter -n 3

用户还可以通过gpssh工具运行gplogfilter来立刻搜索所有的Segment日志文件。例如,要显示每个Segment日志文件的最后三行:

$ gpssh -f seg_host_file
  => source /usr/local/greenplum-db/greenplum_path.sh
  => gplogfilter -n 3 /gpdata/gp*/pg_log/gpdb*.csv

下面是Greenplum与安全相关的审计(或者日志)服务器配置参数,它们可以在postgresql.conf配置文件中设置:

域名 值范围 默认 描述
log_connections Boolean off 这会对服务器日志输出一行详细描述每个成功的连接。某些客户端程序(如psql)在决定是否要求口令时会尝试连接两次,因此重复的“connection received”消息并非总是表示问题。
log_disconnections Boolean off 在一个客户端会话终止时,这会在服务器日志中输出一行,其中会包括该会话的持续时间。
log_statement NONE DDL MOD ALL ALL 控制那些SQL语句会被记录。DDL记录所有数据定义命令,如CREATE、ALTER和DROP命令。MOD记录所有DDL语句外加INSERT、UPDATE、DELETE、TRUNCATE以及COPY FROM。如果PREPARE和EXPLAIN ANALYZE语句中如果包含有适当类型的命令,它们也会被日志记录。
log_hostname Boolean off 连接日志消息默认只显示连接主机的IP地址。把这个选项打开会导致主机名也被记录。注意这依赖于用户的主机名解析设置,而且这有可能会带来不可忽视的性能损失。
log_duration Boolean off 致使每一个满足log_statement的完成语句的持续时间被记录。
log_error_verbosity TERSE DEFAULT VERBOSE DEFAULT 为被记录的每条消息控制写入到服务器日志的细节多少。
log_min_duration_statement 毫秒数, 0, -1 -1 如果语句的持续时间大于等于指定的毫秒数,则在一个日志行中记录该语句和它的持续时间。将这个参数设置为0将打印出所有的语句及其持续时间。-1禁用这一特性。例如,如果用户将它设置为250,那么所有运行时间大于等于250ms的SQL语句将被记录。在跟踪应用中的未优化查询时,启用这一选项非常有用。
log_min_messages DEBUG5 DEBUG4 DEBUG3 DEBUG2 DEBUG1 INFO NOTICE WARNING ERROR LOG FATAL PANIC NOTICE 控制哪些消息级别会被写入到服务器日志。每个级别包括其后的所有级别。级别越靠后,发送到日志的消息就越少。
log_rotation_age 任意有效的时间表达式(数字和单位) 1d 决定个体日志文件的最大生存时间。在这个时间过去之后,一个新的日志文件将被创建。设置为零可禁用新日志文件基于时间创建。
log_statement_stats Boolean off 对每个查询,写入查询解析器、规划器和执行器的整体性能统计信息到服务器日志中。这是一种粗糙的画像手段。
log_truncate_on_rotation Boolean off 截断(重写)而不是追加到任何现存的同名日志文件。仅当一个新文件由于基于时间的轮转而被打开时,截断才会发生。例如,使用这个设置配合gpseg#-%H.log这样的log_filename会导致产生24个每小时的日志文件,然后循环地重写它们。关闭这一设置时,预先已经存在的文件在所有的情况下都会被追加内容。

上级主题: 安全性配置指南

当前内容版权归GreenPlum和翻译组所有,若有侵权请联系删除下架 修订时间: 2024-09-15 21:48:05

results matching ""

    No results matching ""