温馨提示×

Debian MariaDB权限如何设置

小樊
49
2025-11-15 11:44:37
栏目: 云计算

Debian 上 MariaDB 权限设置实操指南

一 环境准备与登录

  • 安装并启动服务
    • 执行:sudo apt update && sudo apt install mariadb-server -y
    • 启动与开机自启:sudo systemctl start mariadb && sudo systemctl enable mariadb
  • 安全初始化
    • 执行:sudo mysql_secure_installation(设置 root 密码、删除匿名用户、禁止 root 远程登录等)
  • 登录数据库
    • 本地:sudo mysql -u root -p
    • 如为 Debian 9 且出现 ERROR 1698 (28000),可用系统 root 直接登录:sudo mysql(该版本默认使用 unix_socket 认证),随后建议创建带密码的管理员用户并禁用 root 远程登录。

二 用户与权限核心操作

  • 创建用户(按来源主机区分)
    • 本地:CREATE USER 'app'@'localhost' IDENTIFIED BY 'StrongPass!';
    • 指定网段:CREATE USER 'app'@'192.168.1.%' IDENTIFIED BY 'StrongPass!';
    • 任意主机(谨慎):CREATE USER 'app'@'%' IDENTIFIED BY 'StrongPass!';
  • 授予权限(最小权限原则)
    • 单库全部:GRANT ALL PRIVILEGES ON mydb.* TO 'app'@'192.168.1.%';
    • 多库通配:GRANT SELECT,INSERT,UPDATE,DELETE ON shop_%.* TO 'app_rw'@'192.168.1.%';
    • 只读全局(慎用):GRANT SELECT ON *.* TO 'readonly'@'localhost';
    • 允许再授权:GRANT ALL ON mydb.* TO 'admin'@'localhost' WITH GRANT OPTION;
  • 使权限生效:FLUSH PRIVILEGES;
  • 查看与回收
    • 查看:SHOW GRANTS FOR 'app'@'192.168.1.%';
    • 回收:REVOKE DELETE,UPDATE ON mydb.* FROM 'app'@'192.168.1.%';
  • 删除用户:DROP USER 'app'@'192.168.1.%';
  • MariaDB 10.2+ 可用角色简化管理
    • 创建角色:CREATE ROLE 'read_role';
    • 授权角色:GRANT SELECT ON mydb.* TO 'read_role';
    • 授予用户:GRANT 'read_role' TO 'app'@'192.168.1.%';

三 远程访问与防火墙

  • 修改绑定地址(仅当需要远程时)
    • 编辑:sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
    • bind-address = 127.0.0.1 改为 bind-address = 0.0.0.0(或注释掉该行)
    • 重启:sudo systemctl restart mariadb
  • 防火墙放行
    • UFW:sudo ufw allow 3306/tcp
    • firewalld:sudo firewall-cmd --add-port=3306/tcp --permanent && sudo firewall-cmd --reload
  • 云服务器安全组
    • 在控制台放行 TCP 3306,并仅允许可信来源网段。

四 常见场景示例

  • 应用专用账户(推荐)
    • 创建:CREATE USER 'app'@'192.168.1.%' IDENTIFIED BY 'StrongPass!';
    • 授权:GRANT SELECT,INSERT,UPDATE,DELETE ON myapp.* TO 'app'@'192.168.1.%';
    • 生效:FLUSH PRIVILEGES;
  • 只读报表账户
    • 创建:CREATE USER 'report'@'192.168.1.50' IDENTIFIED BY 'RptPass!';
    • 授权:GRANT SELECT ON analytics.* TO 'report'@'192.168.1.50';
    • 生效:FLUSH PRIVILEGES;
  • 管理员账户(本机维护)
    • 创建:CREATE USER 'dba'@'localhost' IDENTIFIED BY 'DBAPass!';
    • 授权:GRANT ALL PRIVILEGES ON *.* TO 'dba'@'localhost' WITH GRANT OPTION;
    • 生效:FLUSH PRIVILEGES;
  • 安全提示
    • 避免使用 'root'@'%';远程账户尽量限定为 IP 段;为账户设置强密码并定期轮换;变更权限后务必执行 FLUSH PRIVILEGES;

五 忘记 root 密码的恢复步骤

  • 停止服务:sudo systemctl stop mariadb
  • 无权限模式启动:sudo mysqld_safe --skip-grant-tables --skip-networking &
  • 登录并修改密码:mysql -u root
    • MariaDB 10.2+:ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass!';
    • 旧版本:UPDATE mysql.user SET Password=PASSWORD('NewStrongPass!') WHERE User='root' AND Host='localhost';
    • 生效:FLUSH PRIVILEGES;
  • 关闭无权限进程并重启:sudo mysqladmin -u root -p shutdown 然后 sudo systemctl start mariadb
  • 使用新密码登录验证。

0