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    -- 再允许其他
相关推荐
cui_ruicheng7 小时前
MySQL(四):数据类型与字段设计
数据库·mysql
皮皮学姐分享-ppx8 小时前
政府绿色采购数据库(2015-2024.3)
大数据·网络·数据库·人工智能·制造
闪电悠米10 小时前
黑马点评-Redis 消息队列-03_stream_consumer_group
开发语言·数据库·redis·分布式·缓存·junit·lua
DIY源码阁10 小时前
JavaSwing航班订票管理系统 - MySQL版
数据库·mysql
浪客灿心11 小时前
项目篇:模块设计与实现
数据库·c++
流星白龙13 小时前
【MySQL高阶】26.事务(1)
数据库·mysql
三十..13 小时前
Redis 核心原理与高可用架构实践
运维·数据库·redis
这个DBA有点耶14 小时前
索引优化深潜(下):索引合并、ICP 与索引设计的实战法则
数据库·mysql·架构
用户30745969820714 小时前
EXPLAIN 执行计划 完全精通指南
mysql
努力努力再努力wz14 小时前
【内存管理与高并发内存池系列】从 mmap 到 malloc:文件映射、匿名映射与 glibc 内存分配机制详解
linux·c语言·数据结构·数据库·c++·qt·链表