mysql 和 pg ip 白名单

前言,很重要

虽然mysql 和 pg都有 黑白名单的能力,但是服务器上依旧要严谨配置iptables、云服务器组等等吧,看环境

系列

https://blog.csdn.net/woaixuejinglzq/article/details/158892875?spm=1011.2124.3001.6209

mysql

  1. 仅允许特定 IP 访问

    假设你有一个用户 myuser,只想让它从 IP 地址 192.168.1.100 连接:

    sql 复制代码
    -- 如果用户不存在,创建用户并限定主机
    CREATE USER 'myuser'@'192.168.1.100' IDENTIFIED BY '你的密码';
    
    -- 如果用户已存在(假设原来是 myuser@'%'),需要删除原来的并重建,或直接修改权限
    -- 先查看现有用户
    SELECT host, user FROM mysql.user WHERE user = 'myuser';
    -- 删除允许所有IP的旧记录(谨慎操作)
    DROP USER 'myuser'@'%';
    -- 新建限定IP的用户
    CREATE USER 'myuser'@'192.168.1.100' IDENTIFIED BY '你的密码';
    
    -- 授予权限(例如授予所有权限)
    GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'192.168.1.100';
    FLUSH PRIVILEGES;
  2. 允许一个 IP 段(例如 192.168.1.0/24)访问

    MySQL 支持使用通配符:

    • %:匹配任意多个字符

    • _:匹配一个字符

    sql 复制代码
    -- 允许 192.168.1.0 - 192.168.1.255 整个网段
    CREATE USER 'myuser'@'192.168.1.%' IDENTIFIED BY '你的密码';
    GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'192.168.1.%';
    
    -- 也可以使用子网掩码格式(MySQL 8.0+ 支持)
    CREATE USER 'myuser'@'192.168.1.0/255.255.255.0' IDENTIFIED BY '你的密码';
  3. 允许本机访问

    sql 复制代码
    -- localhost 通常指通过 socket 连接
    CREATE USER 'myuser'@'localhost' IDENTIFIED BY '你的密码';
    -- 127.0.0.1 指通过 TCP/IP 回环地址连接
    CREATE USER 'myuser'@'127.0.0.1' IDENTIFIED BY '你的密码';
    复制代码

验证白名单:

sql 复制代码
-- 查看所有用户及其允许的 Host
SELECT host, user FROM mysql.user;

pg

改配置 /var/lib/postgresql/data/pg_hba.conf,注意,和上面引用文章的配置不是同一个

就类似这样改

sql 复制代码
# pg_hba.conf
local   all             all                                     trust

host    appdb    appuser    192.168.1.100/32  scram-sha-256
host    backup   backupuser 192.168.1.101/32  scram-sha-256
host    all      admin      10.0.0.0/24       cert
  • TYPE(第一列) : local - 只针对本地Unix域套接字连接(不是TCP/IP) host对应TCP/IP

  • DATABASE(第二列) : all - 匹配所有数据库

  • USER(第三列) : all - 匹配所有用户

  • address(第四列):如果是local,这一列是METHOND

  • METHOD(第五列) : trust - 无条件允许连接,无需密码

method常用值补充

password / md5 / scram-sha-256(密码认证)/ trust / reject

  • password: 明文密码传输(不安全)

  • md5: MD5加密密码(较安全,但已过时)

  • scram-sha-256: 最安全的密码认证方式(PostgreSQL 10+推荐)

perr

  • 仅用于local连接

  • 使用操作系统用户名进行认证

  • 要求PostgreSQL用户名与操作系统用户名一致

ident

  • 通过ident服务器获取客户端操作系统用户名

  • 通常与TCP wrappers配合使用

cert

  • 使用SSL客户端证书进行认证

  • 需要配置SSL

ldap / radius / pam(外部认证)

  • 通过LDAP、RADIUS或PAM进行认证

  • 适用于企业统一认证环境

sql 复制代码
host    all    all    192.168.1.0/24    ldap ldapserver=ldap.example.com

用到的小技巧

先备注一些基础的东西

第四列Address用的CIDR表示法,比如127.0.0.1/32 这是一个ipv4的写法

前面的127.0.0.1就代表ip了,/32则是表示子网掩码长度,也可以说是网络前缀位数

ipv4中,用32位二进制来表达一个ip然后每8位分割,

  • IPv4地址共32位(4个8位二进制数)

  • 127.0.0.1 的二进制:01111111.00000000.00000000.00000001

  • /32 意味着前32位是网络号 → 只有这一个地址

如果写成10.0.0.0/24 就代表10.0.0.0 - 10.0.0.255所有的ip,注意奥**10.0.0.0 10.0.0.255特殊的**,一般不会分配给设备

然后就是说正经技巧了

sql 复制代码
host    all    all    192.168.1.1/32    trust
host    all    all    192.168.1.2/31    trust  -- 2-3
host    all    all    192.168.1.4/30    trust  -- 4-7
host    all    all    192.168.1.8/29    trust  -- 8-15
host    all    all    192.168.1.16/28   trust  -- 16-31
host    all    all    192.168.1.32/27   trust  -- 32-63
host    all    all    192.168.1.64/26   trust  -- 64-127
host    all    all    192.168.1.128/25  trust  -- 128-255

这样就可以做到范围表达了,或者用reject来做

sql 复制代码
-- PostgreSQL按顺序匹配,第一个匹配的规则生效!
-- 所以这样的顺序不对:
host    all    all    192.168.1.0/24    trust    -- 这条会先匹配所有
host    all    all    192.168.1.0/32    reject   -- 永远不会执行

-- 正确的顺序(拒绝在前):
host    all    all    192.168.1.0/32    reject   -- 先拒绝 .0
host    all    all    192.168.1.0/24    trust    -- 再允许其他
相关推荐
程序员与背包客_CoderZ5 分钟前
高性能分布式KV存储引擎RocksDB入门与C/C++编码实战
c语言·开发语言·数据库·c++·分布式·分布式数据库·rocksdb
进击的_鹏7 分钟前
从零开始的 Redis 学习
服务器·数据库·c++·redis·缓存
实心儿儿20 分钟前
Linux —— 传输层协议TCP
linux·服务器·tcp/ip
隔窗听雨眠23 分钟前
当KES遇到多租户:金仓数据库多租户架构的隔离实践与部署指南
数据库·架构
JOker_Chu_43 分钟前
知识图谱详解:从图结构、关系建模到查询与应用
数据库·知识图谱·database·neo4j
tryCbest1 小时前
搭建企业知识库之Milvus 向量数据库
数据库·milvus
深圳市宝华视联1 小时前
Python 读取 IP 视频流简单 Demo
python·嵌入式硬件·opencv·网络协议·tcp/ip·实时音视频·嵌入式实时数据库
czhc11400756631 小时前
2026-08-24 博客:几个让你少踩坑的概念
数据库
ACP广源盛139246256732 小时前
Qwen3.8‑2.4T 开源落地@ACP#国产 Serdes 长距离视频传输芯片 GSV5800 在私有化 AI 服务中的价值与应用场景
大数据·数据库·人工智能·嵌入式硬件·矩阵·开源·音视频
oradh2 小时前
Oracle RMAN备份脚本、RMAN还原恢复测试、RMAN常用语句
数据库·oracle·rman备份脚本·rman还原恢复测试·rman常用语句