MYSQL用户、权限管理(如何创建用户,给用户授权,远程登录)
作者:mmseoamin日期:2024-04-27

文章目录

  • 前言
  • 一、用户管理
    • 1.用户信息
    • 2.创建用户
    • 3.删除用户
    • 4.修改密码
    • 二、权限管理
      • 1.权限管理概念
      • 2.给用户授权
      • 3.回收权限

        前言

        MySQL的权限简单的理解就是MySQL允许你做你权利以内的事情,不可以越界。MySQL服务器通过权限表来控制用户对数据库的访问,权限表存放在mysql数据库中,由mysql_install_db脚本初始化。

        存储账户权限信息表主要有:user、db、tables_priv、columns_priv、procs_priv、proxies_priv这六张表(5.6版本之前还有host表,现在已经把host内容整合进user表)


        一、用户管理

        1.用户信息

        MySQL中的用户,都存储在系统数据库mysql的user表中:

        MYSQL用户、权限管理(如何创建用户,给用户授权,远程登录),在这里插入图片描述,第1张

        字段解释:
        host: 表示这个用户可以从哪个主机登陆,如果是localhost,表示只能从本机登陆
        user: 用户名
        authentication_string: 用户密码通过password函数加密后的
        *_priv: 用户拥有的权限
        

        2.创建用户

        语法:
        create user '用户名'@'登陆主机/ip' identified by '密码';
        

        下面我们创建一个用户:

        MYSQL用户、权限管理(如何创建用户,给用户授权,远程登录),在这里插入图片描述,第2张

        这时我们便可以用新用户登录了!

        3.删除用户

        语法:
        drop user '用户名'@'主机名'
        

        我们不能直接删除用户名,因为它默认是%,表示所有地方可以登陆的用户:

        MYSQL用户、权限管理(如何创建用户,给用户授权,远程登录),在这里插入图片描述,第3张

        我们要删除的是从主机登录的用户:

        MYSQL用户、权限管理(如何创建用户,给用户授权,远程登录),在这里插入图片描述,第4张

        4.修改密码

        自己改自己密码:
        set password=password('新的密码');
        set password for '用户名'@'主机名'=password('新的密码');
        

        我们可以看到密码的字符串发生了变化,代表我们修改密码成功:

        MYSQL用户、权限管理(如何创建用户,给用户授权,远程登录),在这里插入图片描述,第5张

        二、权限管理

        1.权限管理概念

        MYSQL用户权限管理主要有以下作用:

        1. 可以限制用户访问哪些库、哪些表
        2. 可以限制用户对哪些表执行SELECT、CREATE、DELETE、DELETE、ALTER等操作
        3. 可以限制用户登录的IP或域名
        4. 可以限制用户自己的权限是否可以授权给别的用户

        用户操作MYSQL数据库的权限管理,主要分为两个阶段:

        1. 有没有权限连接上来
        2. 有没有权限执行本操作

        MYSQL连接权限

        服务器如何判断用户有没有权限连接上来?

        1. 你从哪里来?host
        2. 你是谁?user
        3. 你的密码是多少?password

        用户的这三个信息,存储在mysql库中的user表中。

        操作执行权限

        mysql数据库(系统数据库)下的表:user、db、tables_priv、columns_priv、proce_priv、proxies_priv共同构成授权表;

        1)user表

        user表列出可以连接服务器的用户及其口令,并且它指定他们有哪种全局(超级用户)权限。在user表启用的任何权限均是全局权限,并适用于所有数据库。例如,如果你启用了DELETE权限,在这里列出的用户可以从任何表中删除记录,所以在你这样做之前要认真考虑。

        2)db表

        db表列出数据库,而用户有权限访问它们。在这里指定的权限适用于一个数据库中的所有表。

        3)tables_priv表

        tables_priv表指定表级权限,在这里指定的一个权限适用于一个表的所有列。

        4)columns_priv表

        columns_priv表指定列级权限。这里指定的权限适用于一个表的特定列。

        5)proce_priv

        columns_priv表指定存储过程权限。这里代表允许使用某个存储过程的权限。

        6)proxies_priv

        利用 MySQL proxies_priv(模拟角色)实现类似用户组管理。角色(Role)可以用来批量管理用户,同一个角色下的用户,拥有相同的权限。

        注:MySQL5.7.X以后可以模拟角色(Role)的功能,通过mysql.proxies_priv模拟实现

        MYSQL用户、权限管理(如何创建用户,给用户授权,远程登录),在这里插入图片描述,第6张

        开始查询:

        1. 校验user表,对于全局权限是ok → 直接执行
        2. 检验DB表,对于某个有特定的数据库有权限 → 执行
        3. 检验tables_priv,对于特定数据库下的某些表是有权限 → 执行
        4. 检验columns_priv,对于特定表中的某些列有权限 → 执行

        2.给用户授权

        语法:
        grant [权限1,权限2,权限3] on *.* to user@'host' identified by 'password'
        例如,给"zhangsan" 用户管理员权限,并且允许该用户继续给别的用户赋权限
        grant all privileges on *.* to 'zhangsan'@'192.168.1.%' with grant option;
        说明:
        all privileges:表示将所有权限授予给用户。也可指定具体的权限,如:SELECT、CREATE、DROP等。
        on:表示这些权限对哪些数据库和表生效,格式:数据库名.表名,这里写“*”表示所有数据库,所有表。
        	如果我要指定将权限应用到test库的user表中,可以这么写:test.user
        to:将权限授予哪个用户。格式:”用户名”@”登录IP或域名”。%表示没有限制,在任何主机都可以登录
        with grant option:允许被授权的用户把得到的权限继续授给其它用户
        identified by可选: 如果用户存在,赋予权限的同时修改密码,如果该用户不存在,就是创建用户
        注:使用GRANT添加权限,权限会自动叠加,不会覆盖之前授予的权限
        

        我们用之前创建的用户wml来登录:

        MYSQL用户、权限管理(如何创建用户,给用户授权,远程登录),在这里插入图片描述,第7张

        然后我们给它授予 test1 库的 select 权限:

        MYSQL用户、权限管理(如何创建用户,给用户授权,远程登录),在这里插入图片描述,第8张

        MYSQL用户、权限管理(如何创建用户,给用户授权,远程登录),在这里插入图片描述,第9张

        我们测试用户是否有其它权限:

        MYSQL用户、权限管理(如何创建用户,给用户授权,远程登录),在这里插入图片描述,第10张

        3.回收权限

        语法:
        revoke 权限列表 on 库.对象名 from '用户名'@'登陆位置';
        

        我们回收用户所有权限:

        MYSQL用户、权限管理(如何创建用户,给用户授权,远程登录),在这里插入图片描述,第11张

        然后用下面语句刷新一下权限:

        flush privileges;
        

        然后用户再进行操作,发现除了登录什么都做不了:

        MYSQL用户、权限管理(如何创建用户,给用户授权,远程登录),在这里插入图片描述,第12张