Ubuntu MariaDB权限管理详解
导读:Ubuntu MariaDB 权限管理详解 一 核心概念与权限模型 账户由用户名@主机唯一确定,‘root’@‘localhost’与’root’@'%'是两个不同账户;主机部分可使用%、_、-等通配符进行匹配,如’app’@‘192.1...
Ubuntu MariaDB 权限管理详解
一 核心概念与权限模型
- 账户由用户名@主机唯一确定,‘root’@‘localhost’与’root’@'%'是两个不同账户;主机部分可使用%、_、-等通配符进行匹配,如’app’@‘192.168.1.%’。
- 权限验证分为两阶段:先验证能否连接(合法性),再按层级分配权限(全局→数据库→表→列)。
- 权限层级与范围:
- 全局级:ON .(如 CREATE USER、RELOAD、SHUTDOWN、SUPER 等管理权限)
- 数据库级:ON db_name.*(如 CREATE、DROP、ALTER、SELECT、INSERT 等)
- 表级:ON db_name.tbl(列级可在列上进一步细化)
- 特殊权限:USAGE表示“无权限”,常用于仅允许登录;GRANT OPTION允许把自身权限授予他人。
- 权限表与生效:账户与权限信息保存在mysql库的多张表中(如 user、db、tables_priv、columns_priv 等);执行 GRANT/REVOKE/SET PASSWORD 通常会隐式刷新内存权限,也可显式执行 FLUSH PRIVILEGES 使变更立即生效。
二 常用管理命令速查
- 登录数据库
- 本地:sudo mysql -u root -p
- 账户管理
- 创建:CREATE USER ‘u’@‘host’ IDENTIFIED BY ‘pwd’;
- 修改密码:SET PASSWORD FOR ‘u’@‘host’ = PASSWORD(‘pwd’); (或 ALTER USER)
- 重命名:RENAME USER ‘u1’@‘h1’ TO ‘u2’@‘h2’;
- 删除:DROP USER ‘u’@‘host’;
- 授权与撤销
- 授权:GRANT priv_list ON what TO ‘u’@‘host’ [WITH GRANT OPTION];
- 撤销:REVOKE priv_list ON what FROM ‘u’@‘host’;
- 查看与生效
- 查看权限:SHOW GRANTS FOR ‘u’@‘host’;
- 刷新权限:FLUSH PRIVILEGES;
- 在线会话与进程
- 查看会话:SHOW PROCESSLIST; (远程可用 mysqladmin -u admin -p processlist)
三 典型场景与命令示例
- 创建只读用户(本地)
- 创建并授权:CREATE USER ‘rd’@‘localhost’ IDENTIFIED BY ‘RdPass!23’;
- 授予权限:GRANT SELECT ON sales. TO ‘rd’@‘localhost’; *
- 验证:SHOW GRANTS FOR ‘rd’@‘localhost’;
- 创建应用用户(应用服务器网段)
- 创建并授权:CREATE USER ‘app’@‘192.168.10.%’ IDENTIFIED BY ‘AppPass!45’;
- 授予常用 DML:GRANT SELECT, INSERT, UPDATE, DELETE ON appdb. TO ‘app’@‘192.168.10.%’; *
- 管理员账户(谨慎授予)
- 创建并授权:CREATE USER ‘admin’@‘localhost’ IDENTIFIED BY ‘Adm!2025’;
- 授予全局权限:GRANT ALL PRIVILEGES ON . TO ‘admin’@‘localhost’ WITH GRANT OPTION;
- 撤销与删除
- 撤销部分权限:REVOKE INSERT, UPDATE ON appdb. FROM ‘app’@‘192.168.10.%’; *
- 彻底删除:DROP USER ‘app’@‘192.168.10.%’;
- 使变更生效
- 显式刷新:FLUSH PRIVILEGES; (多数 DCL 会自动刷新)
四 远程访问与 Ubuntu 系统配置
- 创建远程账户:优先限定网段,如 ‘app’@‘203.0.113.%’;仅在可信网络才使用 ‘app’@‘%’。
- 配置监听与绑定地址:编辑 /etc/mysql/mariadb.conf.d/50-server.cnf,确保 bind-address 允许应用所在网段访问(如注释掉或设为 0.0.0.0 以监听所有地址,务必配合防火墙与访问控制)。
- 防火墙放行:Ubuntu 常用 UFW,如 sudo ufw allow 3306/tcp;云主机还需在安全组放行 3306。
- 文件系统与目录权限:确保数据目录(常见为 /var/lib/mysql)属主为 mysql:mysql,如 sudo chown -R mysql:mysql /var/lib/mysql;配置文件目录(如 /etc/mysql)建议 root:root 且权限 755。
- 重启服务:sudo systemctl restart mariadb。
- 连接测试:从应用主机执行 mysql -h < DB_HOST> -P 3306 -u app -p。
五 安全基线与实践建议
- 最小权限原则:仅授予完成工作所需权限;避免对普通应用授予 FILE、PROCESS、SUPER、GRANT OPTION 等高危权限。
- 限制登录来源:如非必要,禁止 root@‘%’;为应用创建专用户并限定 host。
- 清理默认与匿名对象:安装后移除匿名用户、删除或限制对test库的访问。
- 导入导出安全:
- 建议禁用或限制 local_infile:SHOW VARIABLES LIKE ‘local_infile’; 如需禁用,在配置中设 local_infile=0 并重启。
- 设置 secure_file_priv 为固定目录(如 /var/lib/mysql-files),避免任意路径读写:SHOW VARIABLES LIKE ‘secure_file_priv’;
- 系统级加固:
- 数据目录权限建议 700:chmod 700 /var/lib/mysql;
- 清理或重定向 ~/.mysql_history 以降低凭据泄露风险。
- 定期审计:
- 核查高权限账户:SELECT user,host FROM mysql.user WHERE file_priv=‘Y’ OR process_priv=‘Y’ OR super_priv=‘Y’;
- 核查对 mysql 系统库有写权限的账户;核查异常来源主机与账户。
- 密码策略:启用并定期评估 validate_password 插件策略(如长度、复杂度)。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu MariaDB权限管理详解
本文地址: https://pptw.com/jishu/757930.html
