Ubuntu 上 MariaDB 权限管理实操指南
一 基础准备与登录
- 安装与启动服务(如未安装):sudo apt update && sudo apt install mariadb-server;sudo service mysql start。完成后建议运行 sudo mysql_secure_installation 完成安全初始化(删除匿名用户、限制 root 远程、移除测试库等)。Ubuntu 上常见的是 root 通过 auth_socket 插件在本机免密登录,如需密码登录可调整认证方式。登录方式:sudo mysql(本机免密)或 mysql -u root -p(密码登录)。
二 用户与权限的核心命令
- 创建用户:CREATE USER ‘用户名’@‘主机’ IDENTIFIED BY ‘密码’; 主机可用 localhost(仅本机)、具体 IP(如 192.168.1.10)、或 %(任意主机)。远程访问务必使用与授权一致的 Host。
- 授予权限:GRANT 权限 ON 数据库.表 TO ‘用户’@‘主机’; 常用权限有 SELECT、INSERT、UPDATE、DELETE、CREATE、DROP、INDEX、ALTER 等;ALL 表示全部权限。范围可用 db.*、db.tbl、或 .(全库全表)。需要允许被授权者再授权时加 WITH GRANT OPTION。
- 刷新权限:执行 GRANT/REVOKE 后建议 FLUSH PRIVILEGES; 使变更立即生效。
- 撤销权限:REVOKE 权限 ON 数据库.表 FROM ‘用户’@‘主机’; 撤销粒度需与授予时一致(例如对 db.tbl 授权,撤销也要精确到 db.tbl)。
- 查看权限:SHOW GRANTS FOR ‘用户’@‘主机’; 用于核对账户实际权限。
- 删除用户:DROP USER ‘用户’@‘主机’; 避免使用 DELETE FROM mysql.user 直接删行。
三 常见场景示例
- 只读应用账号(仅本机):CREATE USER ‘app_r’@‘localhost’ IDENTIFIED BY ‘StrongPass!’; GRANT SELECT ON mydb.* TO ‘app_r’@‘localhost’; FLUSH PRIVILEGES;
- 读写应用账号(指定网段):CREATE USER ‘app_rw’@‘192.168.1.%’ IDENTIFIED BY ‘StrongPass!’; GRANT SELECT,INSERT,UPDATE,DELETE ON mydb.* TO ‘app_rw’@‘192.168.1.%’; FLUSH PRIVILEGES;
- 管理员账号(可再授权,谨慎):CREATE USER ‘admin’@‘localhost’ IDENTIFIED BY ‘StrongPass!’; GRANT ALL PRIVILEGES ON . TO ‘admin’@‘localhost’ WITH GRANT OPTION; FLUSH PRIVILEGES;
- 远程只读账号(任意主机):CREATE USER ‘report’@‘%’ IDENTIFIED BY ‘StrongPass!’; GRANT SELECT ON reporting.* TO ‘report’@‘%’; FLUSH PRIVILEGES; 注意:远程账号务必限制来源 IP 并采用强密码。
四 安全与运维要点
- 遵循最小权限原则:应用账号只授予所需库/表/权限,避免使用 . 与 WITH GRANT OPTION(除非必要)。
- 主机匹配要一致:创建用户用 ‘%’ 才能从任意主机连接;用 ‘192.168.1.%’ 仅允许该网段;用 ‘localhost’ 仅本机套接字连接。授权与创建时的 Host 必须匹配,否则会报访问被拒绝。
- 本机 root 安全:生产环境建议禁止 root 远程登录,仅允许本机管理;必要时再调整 root 认证插件与密码策略。
- 变更后核对:用 SHOW GRANTS 核对账户权限;涉及账户/权限调整后执行 FLUSH PRIVILEGES; 保证生效。
- 远程访问防护:仅开放必要来源 IP 与端口(默认 3306),并使用强密码与定期轮换策略。