Mysql 授权和用户管理

mysql的几个权限管理的命令,很不常用,要用的时候往往都想不起来,在此记录一下以便自己查阅。


授权

  • 增加权限

    1
    GRANT UPDATE ON database.table TO 'user'@'hostname';

所有数据库所有权限:GRANT ALL ON *.* TO ‘user’@'localhost'

一个数据库增删改查权限:GRANT SELECT, INSERT, UPDATE, DELETE ON testdb.* TO 'user''@'%'

  • 查询权限

    1
    SHOW GRANTS FOR 'user'@'hostname'

查询自己的权限SHOW GRANTS;

  • 撤回权限

    1
    REVOKE ALL ON *.* FROM 'user'@'hostname';

revoke 跟 grant 的语法差不多,只需要把关键字 “to” 换成 “from” 即可

  • 刷新权限

    1
    FLUSH PRIVILEGES;
  • 注意事项
    • grant, revoke 用户权限后,该用户只有重新连接 MySQL 数据库,权限才能生效。
    • 授权相关的命令执行后都需要刷新权限才会生效。

用户管理

  • 添加用户

    1
    CREATE USER 'user'@'host' IDENTIFIED BY 'password';
  • 修改密码

    • mysql5.6及以下

    ~从MySQL 5.7.6开始不推荐使用PASSWORD()包裹密码, 并且将在以后的MySQL版本中删除

    ~但是mysql 5.6 必须使用PASSWORD()包裹密码

    ~mysql 5.6/5.7 都可以用下面语法更改密码

    1
    2
    3
    4
    5
    6
    # 更改自己的密码
    SET PASSWORD = PASSWORD('password');

    #更改指定用户的密码

    SET PASSWORD FOR 'user'@'host' = PASSWORD('password');
    • mysql5.7及以上

    ~SET PASSWORD语法不被弃用,但是ALTER USER是帐户更改的首选语句

    ~mysql 5.6不可用, 5.7可用

    1
    2
    3
    4
    5
    # 更改自己的密码
    ALTER USER USER() IDENTIFIED BY 'password';

    # 更改指定用户的密码
    ALTER USER 'user'@'host' IDENTIFIED BY 'password';
  • 删除用户

    1
    DROP USER 'user'@'%';
  • 注意事项

    • 帐户名的主机名部分(如果省略)默认为 ‘%’。

远程访问

  • 授权'user'@'%' 用户访问权限

    • 如果用户的’%’账户不存在会自动创建,
    • 如果是新建的账户,默认没有密码无法登陆,需要设置密码
    • 刷新权限
    1
    2
    3
    4
    5
    6
    # 授权远程用户
    GRANT ALL ON *.* TO 'user'@'%'

    # 完整的语句
    GRANT ALL PRIVILEGES ON *.* TO 'user'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
    FLUSH PRIVILEGES;
  • 修改 my.ini 中的 bind-address 配置为 0.0.0.0,重启 mysqld 生效