【MySQL】用户管理
作者:mmseoamin日期:2023-12-18

用户管理

  • 一、用户
    • 1. 用户信息
    • 2. 创建用户
    • 3. 删除用户
    • 4. 修改用户密码
    • 二、数据库的权限
      • 1. 给用户授权
      • 2. 回收权限

        一、用户

        1. 用户信息

        其实 MySQL 中的用户,都存储在系统数据库 mysql 的 user 表中,我们通过 show databases; 查看 mysql 数据库:

        【MySQL】用户管理,在这里插入图片描述,第1张

        然后 use mysql; 使用该数据库,再 show tables; 查看它的表结构,我们发现里面有一张表名为 user 的表,里面存放的就是用户的信息,我们可以使用指令 select * from user 查看该表,但是由于该表太大了,所以我们筛选出重要信息,如 user:用户名;host:表示这个用户可以从哪个主机登陆,如果是 localhost,表示只能从本机登陆;authentication_string:用户密码通过 password 函数加密后的密码,指令为:select user, host, authentication_string from user; 如下图:

        【MySQL】用户管理,在这里插入图片描述,第2张

        其中 host 列中 localhost 表示该用户只能在本地登录,不能远程登录。

        2. 创建用户

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

        例如我现在是以 root 用户登录的 mysql,现在要为自己创建一个普通用户,且只能在本地登录,登录密码为 123456;其指令为:create user 'lmy'@'localhost' identified by '123456';

        注意,如果我们创建用户时出现以下错误:

        		ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
        

        我们可以刷新一下缓冲区:flush privileges; 即可,如下图:

        【MySQL】用户管理,在这里插入图片描述,第3张

        下面我们查看表中的信息:

        【MySQL】用户管理,在这里插入图片描述,第4张

        我们发现 user 表中插入了我们新建的用户 lmy 的信息,此时我们新建一个终端窗口,尝试使用普通用户 lmy 登录 mysql,如下图:

        【MySQL】用户管理,在这里插入图片描述,第5张

        如图所示,我们也能成功登录 mysql 了,但是当我们查看数据库的时候,会发现与 root 相比,很多数据库在 lmy 用户看来是不可见的,这就涉及了权限问题,我们后面再介绍,如下图:

        【MySQL】用户管理,在这里插入图片描述,第6张

        那么我们可以设置从本地登录,也就是说也可以设置从远端登录咯?答案是可以的,我们在上一篇 数据库基础 中有介绍过远端登录的语法,但是我们会发现登录不上,这是因为该普通用户设置了不可远端登录的缘故,那么接下来我们将设置该用户可以在远端登录,即可以在任意地方使用主机 ip 登录。

        其实我们想要更改用户的权限或者其它东西,只需要在 user 表中修改即可,那么现在我们需要修改用户的登录方式,可以直接修改表中的 host 列,指令为:update user set host='%' where user='lmy'; 其中 % 表示该用户可以在任意地方使用主机 ip 登录,接下来查看结果:

        【MySQL】用户管理,在这里插入图片描述,第7张

        如上,表中的 host 确实修改成功了,接下来我们就可以使用上一篇博客中的从远端登录 mysql 啦。

        注意,修改表中的数据我们需要使用指令:flush privileges; 刷新一下缓冲区即可。

        如果我们不想修改表中的数据,我们也可以在创建用户的时候给它设置成可以远端登录,指令为:create user 'lmy'@'%' identified by '123456' ,然后再刷新缓冲区即可,如下图:

        【MySQL】用户管理,在这里插入图片描述,第8张

        3. 删除用户

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

        如我们要删除上面用户中的 lmy 用户,可以使用指令:drop user 'lmy'@'%'; 如下图:

        【MySQL】用户管理,在这里插入图片描述,第9张

        再查看表中的信息时,发现已经被删除了:

        【MySQL】用户管理,在这里插入图片描述,第10张

        4. 修改用户密码

        • 自己修改自己的密码

          语法:set password=password('新的密码');

          【MySQL】用户管理,在这里插入图片描述,第11张

          例如我们现在使用 lmy 登录 mysql,要修改自己的密码,如下所示修改成功:

          【MySQL】用户管理,在这里插入图片描述,第12张

          • root用户修改指定用户的密码

            语法:set password for '用户名'@'主机名'=password('新的密码');

            例如我们现在是 root 用户,我们再将 lmy 的密码改回 123456,如下修改成功:

            【MySQL】用户管理,在这里插入图片描述,第13张

            注意,此时我们已经为普通用户设置了密码,也要为 root 设置密码,同时也要给之前的配置文件 my.cnf 中的 skip-grant-tables 去掉。不然在登录时会出现问题。

            二、数据库的权限

            1. 给用户授权

            刚创建的用户没有任何权限,需要给用户授权,例如上面我们创建了 lmy 用户,但是使用 lmy 登录 mysql 时查看到的数据库却只有一个,说明我们没有查看 root 创建的数据库的权限,因为其它数据库都是 root 创建的。

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

            说明:

            • 权限列表,多个权限用逗号分开

                	grant select on ...
                	grant select, delete, create on ....
                	grant all [privileges] on ... -- 表示赋予该用户在该对象上的所有权限
              

              *. * 代表本系统中的所有数据库的所有对象(表,视图,存储过程等)

              • 库.* : 表示某个数据库中的所有数据对象(表,视图,存储过程等)

                例如我们现在使用 root 用户创建一个 root_create 的数据库:

                【MySQL】用户管理,在这里插入图片描述,第14张

                我们是 root 可以查看到该数据库,但是我们切换到普通用户 lmy 尝试查看一下却没有:

                【MySQL】用户管理,在这里插入图片描述,第15张

                所以我们需要给 lmy 用户授权 root_create 数据库下所有文件的select 权限,指令为:grant select on root_create.* to 'lmy'@'localhost';

                【MySQL】用户管理,在这里插入图片描述,第16张

                接下来我们在 lmy 查看数据库:

                【MySQL】用户管理,在这里插入图片描述,第17张

                发现我们可以使用 lmy 用户查看该数据库了!注意我们上面给 lmy 用户授权的是只读权限!其它权限一律没有!

                我们可以查看用户现有的权限,使用指令:show grants for 'lmy'@'localhost';

                【MySQL】用户管理,在这里插入图片描述,第18张

                如果发现赋权限后,没有生效,执行指令:flush privileges;

                接下来我们尝试给 lmy 用户授予全部权限:grant all on *.* to 'lmy'@'localhost';

                接下来我们登录 lmy 查看数据库,发现所有的数据库都能查看了:

                【MySQL】用户管理,在这里插入图片描述,第19张

                如果赋权限后,没有生效,执行指令:flush privileges;,再不行就重新登录一下。

                2. 回收权限

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

                假设我们需要回收 lmy 用户的只读 root_create 的权限:revoke select on root_create.* from 'lmy'@'localhost';

                【MySQL】用户管理,在这里插入图片描述,第20张

                我们再回到 lmy 端查看就发现看不到 root_create 数据库了:

                【MySQL】用户管理,在这里插入图片描述,第21张

                如果需要取消 lmy 的所有权限,指令为:revoke all on *.* from 'lmy'@'localhost';