首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >成为优秀DBA工程师:PostgreSQL安全加固与日志分析全攻略

成为优秀DBA工程师:PostgreSQL安全加固与日志分析全攻略

作者头像
IT咸鱼
发布2025-05-20 18:56:44
发布2025-05-20 18:56:44
20800
代码可运行
举报
运行总次数:0
代码可运行

#一、为什么DBA需要掌握安全加固和日志分析?

作为数据库管理员(DBA),你的核心任务就是让数据库既安全又高效

  • 安全加固:就像给家门上锁,防止坏人偷数据。
  • 日志分析:相当于装监控摄像头,随时排查问题。 今天,我们从权限最小化配置pgBadger日志工具入手,手把手教你成为靠谱的DBA!

#二、配置PostgreSQL账户权限最小化策略

原则:只给用户最低限度的权限,就像只给钥匙开需要的门!

#1. 创建“最小权限”角色

比如,你想让用户report_user只能读数据,不能删改:

代码语言:javascript
代码运行次数:0
运行
复制
-- 创建只读角色  

CREATE ROLE read_only;  

-- 授予查询权限  

GRANTCONNECTON DATABASE mydb TO read_only;  

GRANT USAGE ON SCHEMA public TO read_only;  

GRANTSELECTONALL TABLES IN SCHEMA public TO read_only;  

关键点

  • SELECT:允许读数据,但不能修改。
  • •新创建的表默认不继承权限,需手动授权或设置默认权限。
#2. 精确分配权限

别偷懒用ALL PRIVILEGES!按需分配:

代码语言:javascript
代码运行次数:0
运行
复制
-- 只允许用户修改某张表  

GRANTUPDATEON orders TO order_manager;  

#3. 撤销冗余权限

如果用户被误加了权限,立刻回收:

代码语言:javascript
代码运行次数:0
运行
复制
-- 收回删除权限  

REVOKEDELETEON customers FROM sales_team;  


#三、如何查询冗余权限?

目标:找出用户“多带的钥匙”并清理!

#1. 检查用户权限清单
代码语言:javascript
代码运行次数:0
运行
复制
-- 查看所有用户权限  

SELECT*FROM information_schema.role_table_grants;  

#2. 识别多余的表权限

比如用户dev_user不该有orders表的DELETE权限:

代码语言:javascript
代码运行次数:0
运行
复制
SELECT grantee, table_name, privilege_type  

FROM information_schema.table_privileges  

WHERE grantee ='dev_user'

AND table_name ='orders'

AND privilege_type ='DELETE';  

发现异常?REVOKE收回权限!

#3. 检查角色继承关系

角色可能从其他角色继承多余权限:

代码语言:javascript
代码运行次数:0
运行
复制
-- 查看角色成员  

SELECT roleid, memberFROM pg_auth_members;  

如果发现dev_user属于高权限角色,及时调整。


#四、pgBadger日志分析工具:保姆级教程

pgBadger是PostgreSQL的“行车记录仪”,帮你揪出慢查询和性能问题!

#1. 安装pgBadger

方法一(简单版):

代码语言:javascript
代码运行次数:0
运行
复制
# Ubuntu/Debian  

sudo apt-get install pgbadger  

方法二(手动安装):

代码语言:javascript
代码运行次数:0
运行
复制
wget https://github.com/darold/pgbadger/archive/refs/tags/v12.0.tar.gz  

tar -zxvf v12.0.tar.gz  

cd pgbadger-12.0  

perl Makefile.PL  

make && sudo make install  

(安装后输入pgbadger --version验证)

#2. 配置PostgreSQL日志

修改postgresql.conf,开启详细日志:

代码语言:javascript
代码运行次数:0
运行
复制
# 日志格式设为CSV(方便解析)  

log_destination = 'csvlog'

logging_collector = on

log_directory = 'pg_log'

log_filename = 'postgresql-%Y-%m-%d.log'



# 记录关键信息  

log_checkpoints = on

log_connections = on

log_disconnections = on

log_lock_waits = on

log_min_duration_statement = 1000  -- 记录超过1秒的慢查询  

重启数据库生效pg_ctl restart

#3. 生成分析报告
代码语言:javascript
代码运行次数:0
运行
复制
# 分析当天日志  

pgbadger /var/lib/pgsql/data/pg_log/postgresql-*.log -o report.html  



# 分析指定时间段的日志  

pgbadger --begin='2025-04-20 00:00:00' --end='2025-04-24 23:59:59' *.log

报告内容解读

  • 慢查询Top 10:谁拖慢了数据库?
  • 高频查询:是否可优化或缓存?
  • 锁等待:哪些操作导致阻塞? (报告用浏览器打开,图表直观)
#4. 定时自动分析日志

用Crontab每天凌晨分析前一天日志:

代码语言:javascript
代码运行次数:0
运行
复制
0 2 * * * /usr/bin/pgbadger /var/lib/pgsql/data/pg_log/postgresql-$(date -d "yesterday" +"%Y-%m-%d").log -o /var/www/html/report.html  
#五、总结:DBA的持续优化之路
  1. 权限最小化:定期检查用户权限,避免“权限泛滥”。
  2. 日志分析:用pgBadger每周生成报告,主动发现问题。
  3. 安全与性能并重:加固是防线,日志是眼睛,缺一不可!

记住:优秀的DBA不是救火队员,而是防患于未然的架构师!

确保命令和配置在PostgreSQL 9.2.4及以上版本有效。建议在测试环境验证后上生产环境。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-04-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT咸鱼 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • #二、配置PostgreSQL账户权限最小化策略
    • #1. 创建“最小权限”角色
    • #2. 精确分配权限
    • #3. 撤销冗余权限
  • #三、如何查询冗余权限?
    • #1. 检查用户权限清单
    • #2. 识别多余的表权限
    • #3. 检查角色继承关系
  • #四、pgBadger日志分析工具:保姆级教程
    • #1. 安装pgBadger
    • #2. 配置PostgreSQL日志
    • #3. 生成分析报告
    • #4. 定时自动分析日志
  • #五、总结:DBA的持续优化之路
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档