温馨提示×

Ubuntu MariaDB权限如何管理

小樊
41
2025-12-14 16:03:33
栏目: 云计算

Ubuntu 上 MariaDB 权限管理实操指南

一 基础准备与登录

  • Ubuntu 上以管理员身份登录 MariaDB:
    • 本地系统认证常用:sudo mariadb
    • 指定账户登录:sudo mysql -u root -p
  • 初次安装后建议运行安全初始化:sudo mysql_secure_installation,可移除匿名用户、禁止远程 root 登录、删除测试库等,提升安全性。
  • 注意:在 Ubuntu 上,包管理器安装的 MariaDB 默认 root 账户常与本机 socket 认证绑定,直接设置 root 密码可能带来维护风险;更推荐创建一个可密码登录的管理员账户用于日常管理。

二 用户与主机管理

  • 创建用户(按来源主机限定):
    • 仅本地:CREATE USER 'alice'@'localhost' IDENTIFIED BY 'StrongPass!';
    • 指定网段:CREATE USER 'bob'@'192.168.1.%' IDENTIFIED BY 'StrongPass!';
    • 任意主机(谨慎):CREATE USER 'charlie'@'%' IDENTIFIED BY 'StrongPass!';
  • 修改密码(推荐用专用语句):SET PASSWORD FOR 'alice'@'localhost' = PASSWORD('NewPass!');
  • 删除用户:DROP USER 'bob'@'192.168.1.%';
  • 列出账户:SELECT User, Host FROM mysql.user;
  • 主机字段说明:
    • localhost 仅本机通过 socket 连接;
    • % 表示任意主机(开放到公网风险高,建议限定为具体 IP/网段)。

三 授权与撤销

  • 基本语法:GRANT 权限 ON 范围 TO '用户'@'主机';REVOKE 权限 ON 范围 FROM '用户'@'主机';
  • 常用授权示例:
    • 某库全部权限:GRANT ALL PRIVILEGES ON sales.* TO 'alice'@'localhost';
    • 某库只读:GRANT SELECT ON sales.* TO 'bob'@'192.168.1.%';
    • 某表增删改查:GRANT SELECT, INSERT, UPDATE, DELETE ON sales.orders TO 'charlie'@'%';
    • 全局管理权限(谨慎):GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;
  • 使权限生效:FLUSH PRIVILEGES;
  • 撤销示例:
    • 撤销某库全部权限:REVOKE ALL PRIVILEGES ON sales.* FROM 'alice'@'localhost';
    • 撤销某表部分权限:REVOKE INSERT, UPDATE ON sales.orders FROM 'charlie'@'%';
  • 查看权限:SHOW GRANTS FOR 'alice'@'localhost';
  • 注意:撤销时必须使用与授权时一致的 范围主机;例如仅授予了 db1.*,用 REVOKE ... ON *.* 无法撤销其 db1 上的权限。

四 角色管理与最小权限

  • MariaDB 10.2+ 支持角色,便于批量授权与回收:
    • 创建角色:CREATE ROLE 'read_role';
    • 给角色授权:GRANT SELECT ON sales.* TO 'read_role';
    • 将角色授予用户:GRANT 'read_role' TO 'bob'@'192.168.1.%';
    • 激活角色(会话级):SET ROLE 'read_role';(或在配置中设为默认)
  • 安全建议:
    • 遵循 最小权限原则:开发只读账号仅授予 SELECT,写入账号按需授予 INSERT/UPDATE/DELETE,运维管理账号再考虑更高权限。
    • 限制来源主机:优先 localhost 或明确 IP/网段,避免使用 % 开放到公网。
    • 管理员分离:日常使用非 root 的管理员账号,必要时再用 WITH GRANT OPTION 精细授权。

五 远程访问与常见排错

  • 授权远程访问(示例):
    • 指定网段:GRANT ALL PRIVILEGES ON appdb.* TO 'app'@'192.168.10.%' IDENTIFIED BY 'StrongPass!';
    • 任意主机(谨慎):GRANT ALL PRIVILEGES ON appdb.* TO 'app'@'%' IDENTIFIED BY 'StrongPass!';
    • 使配置生效:FLUSH PRIVILEGES;
  • 系统层面放行端口(如使用防火墙):sudo ufw allow 3306/tcp(仅在确有远程需求时开启)。
  • 监听地址:检查 MariaDB 配置是否仅绑定 127.0.0.1,如需远程访问,确保配置允许监听外部地址并重启服务。
  • 连接测试:mysql -h 服务器IP -u app -p
  • 常见错误与要点:
    • 用户无法远程连接但本地可连:通常是授权 Host 不匹配(如授权了 localhost 而非 % 或具体 IP)。
    • 撤销无效:撤销时的 范围/主机 必须与授权时一致,否则不会生效。

0