温馨提示×

Ubuntu MariaDB权限管理详解

小樊
41
2025-11-26 23:09:48
栏目: 云计算

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_infileSHOW VARIABLES LIKE ‘local_infile’; 如需禁用,在配置中设 local_infile=0 并重启。
    • 设置 secure_file_priv 为固定目录(如 /var/lib/mysql-files),避免任意路径读写:SHOW VARIABLES LIKE ‘secure_file_priv’;
  • 系统级加固:
    • 数据目录权限建议 700chmod 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 插件策略(如长度、复杂度)。

0