城阳做网站找哪家,域名会跳转怎么进原网站,9uu最新域址永久,公司设计网站需要包含什么资料前言#xff1a;
很多时候我们想让数据库日志打印详细一点#xff0c;但是又担心会对数据库本身产生一些不可控的影响#xff0c;还会担心数据库产生的庞大的日志导致主机资源不太够用的影响。那么今天我们就通过讲解给单个用户设置 log_statement来解决以上这些问题。
注…
前言
很多时候我们想让数据库日志打印详细一点但是又担心会对数据库本身产生一些不可控的影响还会担心数据库产生的庞大的日志导致主机资源不太够用的影响。那么今天我们就通过讲解给单个用户设置 log_statement来解决以上这些问题。
注目前在国外网址还没有找到关于log_statement设置mod级别但是又不想insert操作不记录日志的屏蔽方案欢迎大家一起沟通该问题。
1.用户登录登出记录
设置log_disconnections和log_connections参数
--开启用户登录记录日志信息postgres# alter system set log_connections to on;
ALTER SYSTEM
postgres# select pg_reload_conf();pg_reload_conf
----------------t
(1 row)
postgres# show log_connections ;log_connections
-----------------on
(1 row)--开启用户登出记录日志信息
postgres# alter system set log_disconnections to on;
ALTER SYSTEM
postgres# select pg_reload_conf();pg_reload_conf
----------------t
(1 row)
postgres# show log_disconnections;log_connections
-----------------on
(1 row)
后台日志输入:
2024-02-21 17:27:49.760 CST,,,18921,[local],65d5c215.49e9,1,,2024-02-21 17:27:49 CST,,0,LOG,00000,connection received: host[local],,,,,,,,,,not initialized
2024-02-21 17:27:49.761 CST,yewu,dtdb,18921,[local],65d5c215.49e9,2,authentication,2024-02-21 17:27:49 CST,7/3286,0,LOG,00000,connection authorized: useryewu databasedtdb application_namepsql,,,,,,,,,,client backend
2024-02-21 17:27:49.764 CST,antdb,antdb,18766,[local],65d5b944.494e,5,idle,2024-02-21 16:50:12 CST,,0,LOG,00000,disconnection: session time: 0:37:37.095 userantdb databaseantdb host[local],,,,,,,,,psql,client backend
2024-02-21 17:27:53.531 CST,yewu,dtdb,18921,[local],65d5c215.49e9,3,idle,2024-02-21 17:27:49 CST,,0,LOG,00000,disconnection: session time: 0:00:03.772 useryewu databasedtdb host[local],,,,,,,,,psql,client backend 我们可以看到后台日志打印的非常详细会显示用户登录时间、用户名、连接数据库、会话ID、连接地址local:指从数据库本地登录、登录是否成功、登出是否成功等
日志记录有两个主要点
1.我们看到最后一行日志里开始时间记录2024-02-21 17:27:53.531这个时间是切换数据库或是执行SQL的时间点而中间也有一段时间记录2024-02-21 17:27:49这个时间是数据库开启事务时间或是通过客户端连接到数据库时间。这里是我通过psql命令连接到数据库时间为2024-02-21 17:27:49.760所以在最后一行推出日志中显示的时间2024-02-21 17:27:49如果想要计算用户登录时长可以直接使用这两个时间差做结果。
2.如果用户通过\c database username方式进行数据库切换做操作后退出数据库数据库后台日志会记录切换前后数据库登出日志。
2.单独设置用户日志记录级别
通过以下方式设置某个用户日志级别
ALTER USER [user] SET log_statement TO [none|ddl|mod|all];情况1单独记录某个用户DDL和DML操作适用于单独审计某几个用户
postgres# alter user audit_user set log_statement to mod;
ALTER ROLE
查询结果
postgres# select rolname,rolconfig from pg_roles where rolnameaudit_user;rolname | rolconfig
----------------------------------audit_user | {log_statementmod}
(1 row)情况2不想让某个用户记录日志屏蔽某个用户日志
postgres# alter user audit_user set log_statement to none;
ALTER ROLE
查询结果
postgres# select rolname,rolconfig from pg_roles where rolnameaudit_user;rolname | rolconfig
----------------------------------audit_user | {log_statementnone}
(1 row)情况3单独记录某个用户所有操作
postgres# alter user audit_user set log_statement to all;
ALTER ROLE
查询结果
postgres# select rolname,rolconfig from pg_roles where rolnameaudit_user;rolname | rolconfig
----------------------------------audit_user | {log_statementall}
(1 row)取消用户日志级别
情况1单独记录某个用户DDL和DML操作适用于单独审计某几个用户
postgres# alter user audit_user set log_statement to DEFAULT;
ALTER ROLE
查询结果
postgres# select rolname,rolconfig from pg_roles where rolnameaudit_user;rolname | rolconfig
----------------------------------audit_user |
(1 row)
参考国外地址Per-user log settings - PostgreSQL wiki