postgres csv日志和查看用户权限

最近在使用postgres 时遇到的2个问题,顺便记录一下查到的比较好的资料。

怀疑postgres在执行SQL时报错,程序日志中有无明确异常信息。通过查看csv日志来确定是否SQL真的是执行时报错。

下面转自:https://www.cnblogs.com/kuang17/p/6902122.html?utm_source=itdadao&utm_medium=referral

  日志审计 

  审计是值记录用户的登陆退出以及登陆后在数据库里的行为操作,可以根据安全等级不一样设置不一样级别的审计,

  此处涉及的参数文件有:

  logging_collector      --是否开启日志收集开关,默认off,开启要重启DB

  log_destination    --日志记录类型,默认是stderr,只记录错误输出

  log_directory      --日志路径,默认是$PGDATA/pg_log, 这个目录最好不要和数据文件的目录放在一起, 目录需要给启动postgres的操作系统用户写权限.

  log_filename       --日志名称,默认是postgresql-%Y-%m-%d_%H%M%S.log

  log_file_mode   --日志文件类型,默认为0600

  log_truncate_on_rotation  --默认为off,设置为on的话,如果新建了一个同名的日志文件,则会清空原来的文件,再写入日志,而不是在后面附加。

  log_rotation_age   --保留单个文件的最大时长,默认是1d,也有1h,1min,1s,个人觉得不实用

  log_rotation_size  --保留单个文件的最大尺寸,默认是10MB

  log_error_verbosity --默认为default,verbose表示冗长的

  log_connections    --用户session登陆时是否写入日志,默认off

  log_disconnections --用户session退出时是否写入日志,默认off

  【推荐的日志配置】

  logging_collector = on
  log_destination = 'csvlog'
  log_truncate_on_rotation = on
  log_connections = on
  log_disconnections = on
  log_error_verbosity = verbose
  log_statement = ddl
  log_min_duration_statement = 60s
  log_checkpoints = on
  log_lock_waits = on
  deadlock_timeout = 1s

  1.记录级别

  记录用户登陆数据库后的各种操作,postgres日志里分成了3类,通过参数pg_statement来控制,默认的pg_statement参数值是none,即不记录,可以设置ddl(记录create,drop和alter)、mod(记录ddl+insert,delete,update和truncate)和all(mod+select)。

  log_statement = ddl

  一般的OLTP系统审计级别设置为ddl就够了,因为记录输出各种SQL对性能的影响还是蛮大的,安全级别高一点的也可以设置mod模式,有条件也可以不在数据库层面做,而是购买设备放在网络层监控解析。

  按不同情况进行配置审计级别:

  1)审计用户hm连到数据库hm 的所有SQL.

  alter role hm in database hm set log_statement='all';

  2) 审计用户hm 的所有SQL.

  alter role hm set log_statement='all';

  3) 审计任何用户连接到数据库hm 的所有SQL.

   alter database hm set log_statement='all';

  2.定位慢查询SQL

  可以设置一定时长的参数(log_min_duration_statement),来记录超过该时长的所有SQL,对找出当前数据库的慢查询很有效。 比如log_min_duration_statement = 2s,记录超过2秒的SQL,改完需要reload

  log_min_duration_statement = 2s

  3.监控数据库的checkpoint 

  当数据库进行一项大更新操作时,如果参数设置不当,会在日志里留下大量的告警信息,频繁的做checkpoint会导致系统变慢,不用设置都会有。

  但是不会记录系统正常的checkpoint,如果你想看系统一天之类发生了多少次checkpoint,以及每次checkpoint的一些详细信息,比如buffer,sync等,就可以通过设置log_checkpoints,该参数默认值是off。

  log_checkpoints = on

  4.监控数据库的锁 

  数据库的锁通常可以在pg_locks这个系统表里找,但这只是当前的锁表/行信息,如果你想看一天内有多少个超过死锁时间的锁发生,可以在日志里设置并查看,log_lock_waits 默认是off,可以设置开启。这个可以区分SQL慢是资源紧张还是锁等待的问题。

  log_lock_waits=on

  deadlock_timeout=1

  还有一些Debug功能,适合修改源码调试,一般的的系统上并不需要,暂时比较关注的就这些。

  5.可以在表上设置触发器,来审计

  6.可以使用插件pg_log_userqueries 来做,没有必要

  【注意事项】

  1. 超级用户可以修改这些配置项, 所以被审计的用户最好是普通用户. 否则用户连上来可以修改这些审计项.

  2. 程序用的数据库账号和个人用的数据库账号分开, 对于程序用的数据库账号可以只审计DDL操作, 而对于个人使用的数据库账号, 建议审计所有的SQL.

  3. 变量优先级(事务>会话>database/role>启动参数>配置文件)

  某些全局变量可以动态修改,例如本文提到的log_statement。修改后reload之后,所有会话都会读到最新的变量

还有一个问题是执行删除重新创建shcema时报没有superuser权限的错误。确定某个pg用户的权限时使用\du命令来查看。

需要superuser权限的操作有创建extension,创建shcema等。

还有些看到的命令。没有实际用过,先记录下。

COPY weather FROM '/home/user/weather.txt';
        批量将文本文件中内容导入到wether表

修改用户归属组
        Alter Group 组名称 add user 用户名称

为组赋值权限
        grant 操作 On 表名称  to group 组名称

为用户复制SCHEMA权限
        grant all on SCHEMA 作用域名称 to 用户名称

查看客户端连接情况
        SELECT client_addr ,client_port,waiting,query_start,current_query FROM pg_stat_activity;

  查询正在执行SQL

SELECT 
    procpid, 
    start, 
    now() - start AS lap, 
    current_query 
FROM 
    (SELECT 
        backendid, 
        pg_stat_get_backend_pid(S.backendid) AS procpid, 
        pg_stat_get_backend_activity_start(S.backendid) AS start, 
       pg_stat_get_backend_activity(S.backendid) AS current_query 
    FROM 
        (SELECT pg_stat_get_backend_idset() AS backendid) AS S 
    ) AS S 
WHERE 
   current_query <> '' 
ORDER BY 
   lap DESC;

https://www.cnblogs.com/liyasen/p/6611020.html

[转帖]postgres csv日志和查看用户权限的更多相关文章

  1. postgres csv日志和查看用户权限

    最近在使用postgres 时遇到的2个问题,顺便记录一下查到的比较好的资料. 怀疑postgres在执行SQL时报错,程序日志中有无明确异常信息.通过查看csv日志来确定是否SQL真的是执行时报错. ...

  2. [MySQL]查看用户权限与GRANT用法

    摘自:http://apps.hi.baidu.com/share/detail/15071849 查看用户权限 show grants for 你的用户 比如:show grants for roo ...

  3. MySQL查看用户权限的两种方法

    http://yanue.net/post-96.html MySQL查看用户权限命令的两方法: 一. 使用MySQL grants MySQL grant详细用法见:http://yanue.net ...

  4. mariadb使用\s查看用户权限

    今天出现一个问题就是:给zabbix用户赋予权限 语句如下: grant all on zabbix.* to 'zabbix'@'%' identified by 'zabbix' 按照这样的说法应 ...

  5. [转]oracle中查看用户权限

    本文转自:http://www.cnblogs.com/QDuck/archive/2010/08/11/1797225.html 1.查看所有用户:   select * from dba_user ...

  6. sql server查看用户权限

    System.ServiceModel.FaultException: Server error. Detail: The EXECUTE permission was denied on the o ...

  7. MySQL系列--1.安装卸载与用户权限管理

    MySQL安装 1.Ubuntu18下安装MySQL sudo apt-get install mysql-server MySQL的版本为5.7.25 2.登录MySQL 采用mysql-serve ...

  8. Linux用户权限指令, 定时任务等指令

    一. 网卡配置详解 网络配置文件: /etc/sysconfig/network 网络接口配置文件: /etc/sysconfig/network-scripts/ifcfg-INTERFACE_NA ...

  9. Mysql 用户权限管理

    1. MySQL 权限介绍 mysql中存在4个控制权限的表,分别为user表,db表,tables_priv表,columns_priv表,我当前的版本mysql 5.7.22 . mysql权限表 ...

随机推荐

  1. 搭建自己的博客(十七):添加每日阅读量并使用highcharts通过图表显示

    之前写了单篇博客的阅读量统计,今天添加了博客总阅读量统计,并且使用highcharts图表显示. 1.变化的部分

  2. codeforces164A

    Variable, or There and Back Again CodeForces - 164A Life is not easy for the perfectly common variab ...

  3. 2019 ICPC 沈阳网络赛 J. Ghh Matin

    Problem Similar to the strange ability of Martin (the hero of Martin Martin), Ghh will random occurr ...

  4. (转)kafka 详解

    kafka入门:简介.使用场景.设计原理.主要配置及集群搭建(转) 问题导读: 1.zookeeper在kafka的作用是什么? 2.kafka中几乎不允许对消息进行"随机读写"的 ...

  5. 怎么新开一个组件并且配置路由?vue-cli

    首先要明白: 路由就是url路径,如果一个组件被引入到了另外一个组件,这个页面就包含这个组件了,所以这个被包含的组件不要去路由哪里配置了 第一步: 先写上想要添加的组件 2.组件的内容 3.路由的配置 ...

  6. 【Linux性能调优一】观大局:系统平均负载load average

    要测试linux系统性能及调优,首先要从全局检查linux的平均负载 1.什么是平均负载 load average 系统平均负载,平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数, ...

  7. docker install and minikube install

    1.选择国内的云服务商,这里选择阿里云为例 curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/ ...

  8. 微信小程序设置滚动条

    前言 又很久没有写东西了,上周开始将一个APP和一个网站的内容整合到微信小程序中,到这会儿终于搞得快结束了,才发现为啥我的小程序滚动视图没有滚动条,这是闹哪样,没有滚动条的滚动是没有灵魂的. 客官可移 ...

  9. legend3---17、如何抽象和复用控制器中的方法

    legend3---17.如何抽象和复用控制器中的方法 一.总结 一句话总结: 比如不同的控制器中都用了检查手机号是否已经注册,是否没注册这样的功能,我应该如何抽象和复用方法 新建一个处理手机号码的模 ...

  10. Hvie SQL 修改表名 注释 列名注释

    一.修改hive表注释 ALTER TABLE 数据库名.表名 SET TBLPROPERTIES('comment' = '新的表备注'); 二.修改hive表字段注释 ALTER TABLE 数据 ...