当前位置: 首页 > news >正文

MySQL用户和授权

开放MySQL白名单

可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务:

test: # iptables-save | grep 3306

-A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT

-A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp --dport 3306 -j ACCEPT

-A mp_srv_whitelist -s 172.16.4.17/32 -p tcp -m tcp --dport 3306 -j ACCEPT

-A mp_srv_whitelist -s 172.16.9.16/32 -p tcp -m tcp --dport 3306 -j ACCEPT

新增用户以及授权

创建只读用户,并授权特定的表:

-- 创建用户以及设置密码,其中%表示任意客户端

CREATE USER 'read_admin'@'%' IDENTIFIED BY 'Admin123!@#';

-- 授予特定表的SELECT权限

GRANT SELECT ON aa.t_terminal TO 'read_admin'@'%';

GRANT SELECT ON aa.t_assert TO 'read_admin'@'%';

GRANT SELECT ON bb.t_user TO 'read_admin'@'%';

GRANT SELECT ON bb.t_user_group TO 'read_admin'@'%';

-- 为了支持联表,建议始终授权临时表的权限

GRANT CREATE TEMPORARY TABLES ON *.* TO 'read_admin'@'%';

-- 刷新权限

FLUSH PRIVILEGES;

在过程中主要遇到两个问题:

1、在服务器上已经增加了用户和授权,但是客户仍被拒绝

        这是因为会话没有更新,最新的授权需要重新登录获取

2、所有表的授权已经增加,但是客户无法联表查询

        这一点之前是没有想到的,后续增加了临时表权限解决。也很好理解,联表查询的实现是MySQL内部生成临时表处理,所以需要授权该权限。

另外,可以通过以下命令查询某个用户的权限,以下是没有授权临时表和授权了临时表的权限查询结果对比:

  • 未授权临时表权限

mysql> SHOW GRANTS FOR 'read_admin'@'%';

+----------------------------------------------------------------+

| Grants for read_admin@%                                        |

+----------------------------------------------------------------+

| GRANT USAGE ON *.* TO 'read_admin'@'%'                         |

| GRANT SELECT ON `nm`.`t_assert` TO 'read_admin'@'%' |

| GRANT SELECT ON `aas`.`t_user_group` TO 'read_admin'@'%'     |

| GRANT SELECT ON `aas`.`t_user` TO 'read_admin'@'%'           |

| GRANT SELECT ON `nm`.`t_terminal` TO 'read_admin'@'%'     |

+----------------------------------------------------------------+

  • 已授权临时表权限

mysql> SHOW GRANTS FOR 'read_admin'@'%';

+----------------------------------------------------------------+

| Grants for read_admin@%                                        |

+----------------------------------------------------------------+

| GRANT CREATE TEMPORARY TABLES ON *.* TO 'read_admin'@'%'       |

| GRANT SELECT ON `nm`.`t_assert` TO 'read_admin'@'%' |

| GRANT SELECT ON `aas`.`t_user_group` TO 'read_admin'@'%'     |

| GRANT SELECT ON `aas`.`t_user` TO 'read_admin'@'%'           |

| GRANT SELECT ON `nm`.`t_terminal` TO 'read_admin'@'%'     |

+----------------------------------------------------------------+

测试联表查询:

SELECT * FROM aa.t_terminal t LEFT JOIN bb.t_user a ON t.account = a.account limit 1;

注意事项总结:

  1. 如果是HA环境,需要主备数据库上都执行,因为这类非业务数据是不会自动同步的!!!
  2. 在创建用户和授权时,需要使用root账户
  3. 客户端和服务端初次连接时,会将该用户的权限信息保存在会话中,如果后续权限发生变化不会更新当前会话中的权限,所以做以上操作后,相关客户端最好是重新登录以获取最新的权限。
  4. 建议始终授权临时表的权限,防止客户需要联表查询时候再次处理

相关文章:

  • Verilog编程技巧01——如何编写三段式状态机
  • C++ 设计模式 《小明的奶茶加料风波》
  • gitlab CI/CD本地部署配置
  • leetcode78. 子集
  • 使用 Coze 工作流一键生成抖音书单视频:全流程拆解与技术实现
  • Komiko 视频到视频功能炸裂上线!
  • LHA9924芯片可代替AD7190,CS5530
  • Java封装:面向对象编程的核心原则
  • 口罩佩戴检测算法AI智能分析网关V4工厂/工业等多场景守护公共卫生安全
  • ROS1: 使用rosbag的方式将点云topic保存为pcd文件
  • 易思维报考上市:国投基金清仓退出,郭寅“套现”超6500万元
  • vue组件的data为什么是函数?
  • CMake控制VS2022项目文件分组
  • ardupilot 开发环境eclipse 中import 缺少C++
  • python字符串方法
  • 从零实现STL哈希容器:unordered_map/unordered_set封装详解
  • GNSS终端授时方式-合集:PPS、B码、NTP、PTP、单站授时,共视授时
  • 利用ProtoBuf 实现网络版通讯录
  • SpringAI 1.0.0 正式版——利用Redis存储会话(ChatMemory)
  • 电脑开不了机,主板显示67码解决过程
  • python不用框架做动态网站/seo外包大型公司
  • 佛山专业的网站建设公司/百度网络营销中心app
  • 网站建设详细/seo搜索引擎优化实训
  • 网站搜索框代码怎么做/快速排名seo软件
  • 建站快车金牌代理商/长沙哪家网络公司做网站好
  • 2015年做那个网站能致富/免费推广网站推荐