温馨提示×

Debian MariaDB如何管理用户与权限

小樊
38
2025-11-23 10:38:57
栏目: 云计算

Debian 上 MariaDB 用户与权限管理

一 基础准备与登录

  • Debian 上安装后,建议先运行安全初始化:sudo mysql_secure_installation,按向导移除匿名用户、禁止远程 root 登录、删除测试库等。多数 Debian 10+ 的 MariaDB 包将 root 设置为通过 unix_socket 插件认证,便于本地维护;若需基于密码的管理员账户,建议新建专用账户而非改动 root 认证方式。完成后可用 mysql -u root -p 登录验证。

二 用户账户管理

  • 账户由 ‘用户名’@‘主机’ 唯一标识,主机可使用通配符(如 % 表示任意主机,或 192.168.1.% 表示网段)。常用语句:
    • 创建:CREATE USER ‘alice’@‘localhost’ IDENTIFIED BY ‘StrongPass!’;
    • 修改密码:SET PASSWORD FOR ‘alice’@‘localhost’ = PASSWORD(‘NewPass!’);(当前用户可用 SET PASSWORD = PASSWORD(‘…’);)
    • 重命名:RENAME USER ‘alice’@‘localhost’ TO ‘alice’@‘192.168.1.10’;
    • 删除:DROP USER ‘alice’@‘localhost’;
    • 查看当前登录用户:SELECT USER(); 或 SELECT CURRENT_USER();
    • 列出账户:SELECT User,Host FROM mysql.user;(不同版本字段名可能略有差异)
  • 注意:账户主机部分必须与实际来源匹配,远程访问通常使用 ‘%’ 或具体 IP/网段

三 权限授予与撤销

  • 授权语法:GRANT 权限 ON 范围 TO ‘用户’@‘主机’ [WITH GRANT OPTION];
  • 撤销语法:REVOKE 权限 ON 范围 FROM ‘用户’@‘主机’;
  • 常用范围与权限级别:
    • 全局:ON .(所有库与表)
    • 库级:ON db1.*(某库下所有表)
    • 表级:ON db1.tbl(某表)
    • 常用权限:SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, REFERENCES, RELOAD, SHUTDOWN, PROCESS, FILE;需要让该账户再授权他人时加 WITH GRANT OPTION
  • 示例:
    • 只读某库:GRANT SELECT ON sales.* TO ‘rep’@‘%’;
    • 某库完全控制:GRANT ALL PRIVILEGES ON blog.* TO ‘blog’@‘192.168.1.%’ IDENTIFIED BY ‘BLogPass!’;
    • 允许再授权:GRANT ALL ON app.* TO ‘appadmin’@‘localhost’ WITH GRANT OPTION;
    • 撤销某库全部权限:REVOKE ALL PRIVILEGES ON shop.* FROM ‘bob’@‘%’;
    • 查看某账户权限:SHOW GRANTS FOR ‘bob’@‘%’;
  • 提示:REVOKE 的范围必须与 GRANT 的范围精确匹配,才能正确回收权限。

四 权限生效与远程访问配置

  • 权限变更通常通过 GRANT/REVOKE/SET PASSWORD 自动刷新到内存;如直接修改底层权限表或遇到不一致,可执行 FLUSH PRIVILEGES; 使变更立即生效。
  • 远程访问要点:
    • 创建允许远程的账户(如 ‘app’@‘%’),并授予所需库/表权限。
    • 在 MariaDB 配置中注释或调整 bind-address(如将 bind-address = 127.0.0.1 注释以监听所有地址),并确保防火墙放行 3306 端口。
    • 出于安全,仅授予最小必要权限,避免使用 ‘%’ 授予高权限账户,生产环境建议限定为应用服务器的 固定 IP/网段

五 安全与最佳实践

  • 遵循最小权限原则:应用账户只授予目标库/表的必要权限,避免使用 GRANT ALL ON . TO … 给非管理员账户。
  • 管理员账户:在 Debian 上保留 root@localhostunix_socket 认证,另建基于密码的专用管理员账户(如 admin@localhost)用于脚本/外部工具。
  • 定期审计:使用 SHOW GRANTS 与查询 mysql.user 检查账户与权限分配,及时清理不再使用的账户与主机。
  • 忘记 root 密码的恢复思路(仅在维护窗口操作):停止服务,使用 –skip-grant-tables 启动,登录后更新密码并重启;务必在恢复后移除该启动选项并恢复常规安全配置。

0