MySQL 8.0.23 数据库用户管理、权限分配和远程连接

这个目前应该是MySQL比较新的版本了,教程仅在Linux平台上验证通过,其他平台请自证。提供步骤和思路方便快速分析和定位问题。

一、数据库用户管理

  1. 创建新用户并指定密码
    创建非root用户和设置密码

      # 用root用户登录分配jackmin用户的本地mysql账户
      create user 'jackmin'@'localhost' identified with mysql_native_password by '5201314!';
      flush privileges; # 刷新下,不然无法生效
    
  2. 重置用户的密码

    # 用5201314!密码登录
    mysql -u jackmin -p
    # 用root用户修改jackmin的密码
    alter user 'jackmin'@'localhost' identified by '5209999!';
    # 退出mysql后用旧密码登录失败,新jackmin密码5209999!登录成功
    mysql -u jackmin -p
    use mysql; # 但提示Access denied需要配置权限,见3
    
  3. 删除该用户

    drop user 'jackmin'@'localhost';
    
  4. 设置用户是否可以远程访问或指定ip访问

    3.1. 用root用户查看用户和host关系

    use mysql;
    # root用户查看jackmin用户和host关系
    select user, host from user where user='jackmin';
    +---------+-----------+
    | user    |   host    |
    +---------+-----------+
    | jackmin | localhost |
    +---------+-----------+
    

    3.2. 设置允许指定ip或允许远程访问(任意ip)

    # 用指定ip访问
    update user set host='xxx.xx.xx.x' where user='jackmin'; 
    # 允许远程(任意ip)访问
    update user set host='%' where user='jackmin';
    

二、用户权限分配

  1. 给用户分配权限(操作和资源)

    1.1. 给用户仅分配 查询 操作权限,针对数据库test_db操作tbl_1表(有个数据库叫test_db由root创建,内含tbl_1和tbl_2表)

    # 用root用户给jackmin分配权限
    grant select on test_db.tbl_1 to 'jackmin'@'localhost';
    # 如果jackmin用户可以给其他用户赋权(不超过自身拥有的权利:查询)
    grant select on test_db.tbl_1 to 'jackmin'@'localhost' with grant option;
    flush privileges;
    # 退出mysql尝试用jackmin登录访问test_db和tbl_1、tbl_2
    # 查看权限
    show grants for jackmin;
    use test_db;
    show tables; # 我们只能看到tbl_1; 而看不到 tbl_2
    # 尝试查询
    select * from tbl_1; # 可以
    select * from tbl_2; # 不可以
    # 尝试插入tbl_1
    insert into tbl_1 value("2","titlename1", "username1");# INSERT command denied to user 'jackmin'@'localhost' for table 'tbl_1'
    # 除查询外无其他操作权限
    

    1.2. 给用户分配所有权限,针对所有test_db数据库的所有表

    # 用root用户给jackmin增加权限insert
    grant select, insert on test_db.tbl_1 to 'jackmin'@'localhost';
    # 用root用户给jackmin增加test_db的所有表的所有权限
    grant all privileges on test_db.* to 'jackmin'@'localhost';
    flush privileges;
    

    1.3. 撤销权限

    # root用户撤销对某个资源的操作权限
    revoke privileges on test_db.tbl_1 from 'jackmin'@'localhost';
    # root用户撤销所有权限
    revoke all privileges on *.* from 'jackmin'@'localhost';
    # 查看用户权限或者用jackmin用户登录,权限撤销成功
    show grants for jackmin;
    

    1.4. 查看用户权限

    show grants for jackmin;
    

三、配置用户允许远程连接

根据需求在完成理解前面步骤后,接下来需要配置允许远程连接(生产环境请通过ssh隧道方式,且mysql配置文件bind-address为特定ip或本机)

  1. 用户配置
    首先配置用户支持远程登录,简单改user表里面的host为'%'或特定ip(生产上可通过ssh隧道,host为指定跳板机ip这样更安全,也不修改配置文件)

    update user set host='%' where user='jackmin';
    
  2. mysql配置

    修改mysql配置文件,注释掉bind-address或改为0.0.0.0,表示监听所有客户端连接

    保存后重启mysqld服务

  3. 服务器配置

    服务器防火墙和iptables规则允许3306端口的访问;通过查看

    iptables -Lsudo ufw allow 3306

  4. 云服务器安全组配置

    主要是云服务器的安全组配置出入站规则,放行3306端口


最后,感谢您的阅读,由于时间仓促,文章内容难免有不妥之处,欢迎交流和指正~~
Mark一下 惟月慎行 再也不会迷路了^_^!

你可能感兴趣的:(MySQL 8.0.23 数据库用户管理、权限分配和远程连接)