如何在给定场景下给用户授权

创建账号

  • 用户名@<可访问控制列表>
    • % 表示可以从所有外部主机访问
    • 192.168.1.% 表示可以从 192.168.1 网段访问
    • localhost:DB 服务器本地访问
  • 使用 CREATE USER 命令建立用户

给定权限

  • show privileges; 可以查看所有支持的权限

    常见的用户权限

    | 类别 | 语句 | 说明 | | —- | —- | —- | | Admin | Create User | 建立新用户的权限 | | | Grant option | 授权的权限 | | | Super | 管理服务器的权限 | | DDL | Create | 新建 database,table 的权限 | | | Alter | 修改 table 结构的权限 | | | Drop | 删除 database 和 table 的权限 | | | Index | 建立和删除 index 的权限 | | DML | Select | 查询 table 数据的权限 | | | Insert | 向 table 插入数据的权限 | | | Update | 更新 table 中数据的权限 | | | Delete | 删除 table 中数据的权限 | | | Execute | 执行存储过程的权限 |

授权、撤权语句

  • 遵循最小权限原则
  • 使用 GRANT 命令对用户授权

    grant <权限名,可多个> on . to @;

  • 使用 REVOKE 命令对用户撤销权限

    revoke <权限名,可多个> on . to @;

    • 权限名、db_name、table_name 可以用 * 代替

查看权限

show grants for current_user; show grants for 你的用户; show grants for root@’localhost’;


如何保证数据库账号的安全

数据库用户管理流程规范

  1. 最小权限策略
  2. 密码强度策略
    1. 密码足够复杂
  3. 密码过期原则
    • 定时过期无用密码
    • alter user 'test'@'%' password expire;
  4. 限制历史密码重用原则
    1. 避免新密码和过期密码一样,create userpassword 选项
      1. alter user user() identified by '<password>'
    2. 需要版本要求
  • 查看

    select * from mysql.user;


如何从一个实例迁移数据库账号给另一个实例

版本一致

  • 备份 mysql 库,在目的实例恢复

    版本不一致

  • 使用 percona toolkit 的 pt-show-grants 创建用户建立和授权语句,导出脚本 sql

    • 到 db 上运行该 sql