将Linux普通用户加入mysql用户组是否安全?
将普通用户加入
mysql用户组的安全性分析 该操作存在较高安全风险,不建议直接使用此方法实现需求,核心风险点如下:
/var/lib/mysql/目录下存储的不止你需要查看的表空间文件,还包含MySQL全量敏感数据:用户密码哈希、binlog运行日志、未加密的全库表数据、事务日志等核心内容。加入mysql组后该用户将拥有组权限对应的文件读权限,可直接绕开MySQL自身的权限校验体系,哪怕该用户没有MySQL实例的登录权限,也可以直接拷贝走所有库的完整数据。- 如果对应目录/文件对
mysql组开放了写权限(默认部分运行时文件存在组写权限),该用户还可以直接篡改、删除数据库文件,导致数据损坏、丢失,甚至可以通过篡改日志植入恶意操作。
安全实现查看表文件大小的替代方案
你可以通过以下几种权限可控的方案满足需求,不需要修改用户组:
- 方案1:通过
visudo配置精确的sudo授权
仅给指定用户开放用mysql身份执行对应路径下查看大小命令的权限,编辑sudoers文件添加以下规则:
配置后用户执行你的普通用户名 ALL=(mysql) NOPASSWD: /usr/bin/du -sh /var/lib/mysql/目标库名/*, /usr/bin/ls -lh /var/lib/mysql/目标库名/sudo -u mysql du -sh /var/lib/mysql/目标库名/*即可查看文件大小,权限控制精确到具体命令和路径,不会泄露其他数据。 - 方案2:通过MySQL内置查询获取表大小
如果该普通用户拥有目标库的查询权限,可直接在MySQL中执行SQL获取表大小,完全不需要接触服务器文件:
该方案完全在MySQL权限体系内运行,安全性最高。SELECT table_name, ROUND(((data_length + index_length)/1024/1024), 2) AS `表大小(MB)` FROM information_schema.TABLES WHERE table_schema = '你的目标库名'; - 方案3:通过ACL做细粒度文件权限控制
使用Linux的ACL能力给指定用户单独开放对应路径的权限,不需要调整属组属主:# 授予进入目录的执行权限+读权限 setfacl -m u:普通用户名:rx /var/lib/mysql/ setfacl -m u:普通用户名:rx /var/lib/mysql/目标库名/ # 授予目标库下文件的读权限 setfacl -m u:普通用户名:r /var/lib/mysql/目标库名/*
内容的提问来源于stack exchange,提问作者reynoldsnlp
相关产品推荐
相关产品推荐

