【MySQL】用户管理

慈云数据 1年前 (2024-03-12) 技术支持 133 0

用户管理

  • 一、用户信息
  • 二、用户的创建修改和删除
    • 1、创建用户
    • 2、修改用户密码
    • 3、删除用户
    • 三、数据库的权限
      • 1、权限授权
      • 2、权限回收
        • Linux操作系统类似,MySQL中也有超级用户和普通用户之分。
        • 如果一个用户只需要访问MySQL中的某一个数据库,甚至数据库中的某一个表,那么可以为其创建一个普通用户,并为该用户赋予对应的权限,而不让该用户看到数据库中的其他数据,防止该用户对其他数据进行误操作。

          一、用户信息

          MySQL当中默认有一个名为mysql的数据库。如下:

          在这里插入图片描述

          查看该数据库中的表,可以看到其中有一个名为user的表。如下:

          在这里插入图片描述

          user表中存储的就是MySQL中用户相关的信息。如下:

          在这里插入图片描述

          部分字段说明:

          • user: 表示该用户的用户名。
          • host: 表示该用户可以从哪个主机登录,localhost表示只能从本机登录,%表示可以从任意地方登录。
          • authentication_string: 表示该用户的密码经过password()函数加密后的值。
          • xxx_priv: 表示该用户是否拥有对应权限。

            上面的三个字段也是最重要的字段,所以以后我们进行查看用户相关的信息时,为了避免刷屏可以使用部分字段进行显示。如下:

            在这里插入图片描述

            需要注意的是,MySQL中可以存在同名的用户,只要这些同名用户对应的登录主机不同即可,因为user表中的主键是复合主键,由表中的user列和host列共同承担。如下:

            desc user;
            

            在这里插入图片描述

            二、用户的创建修改和删除

            1、创建用户

            创建用户的SQL如下:

            CREATE USER '用户名'@'登录主机' IDENTIFIED BY '密码';
            

            比如下面创建一个用户名为qiling,并且可以从任意地方登录的用户。如下:

            在这里插入图片描述

            创建用户成功后,该用户的相关信息也就被写入到刚才的user表中了。如下:

            在这里插入图片描述

            这时便可以用尝试使用新创建的普通用户来连接MySQL服务器了。

            说明:

            • 创建用户的SQL当中包含用户的密码,为了安全性该SQL不会被历史记录下来,所以不能通过上下键进行追溯。
            • MySQL本身的认证级别比较高,因此创建用户时设置的密码不能太简单,否则会出现报错,这时你可以选择将密码设置复杂一些,也可以对密码相关的设置进行调整。

              通过show命令查看全局变量,可以看到密码设置相关的要求。

              show variables like 'validate_password%';
              

              在这里插入图片描述

              当然我这个是经过修改后的设置,你可以通过下面的命令进行设置:

              • 修改validate_password_policy参数的值为低等级:
                set global validate_password_policy=0;
                
                • 设置密码长度最小值改为1
                  set global validate_password_length=1;
                  
                  • 进行本地登录
                    select user();
                    

                    在这里插入图片描述

                    • 进行远程登录

                      由于我们创建的这个用户可以从任意地方登录,因此如果你在Windows下也安装了MySQL,那么就可以在Windows的cmd窗口进行远程登录。

                      在这里插入图片描述

                      2、修改用户密码

                      • 修改自己密码
                        set password=password('新的密码');
                        

                        在这里插入图片描述

                        • root用户修改指定用户的密码
                          set password for '用户名'@'主机名'=password('新的密码');
                          

                          在这里插入图片描述

                          说明:

                          • 为了让修改的配置立即生效,我们可以使用下面的命令:
                            flush privileges;
                            

                            在这里插入图片描述

                            3、删除用户

                            删除用户的SQL如下:

                            DROP USER '用户名'@'登录地址';
                            

                            例如下面我们要删除用户qiling

                            在这里插入图片描述

                            删除完毕以后我们再次查看user表格,发现找不到用户qiling了。

                            在这里插入图片描述

                            三、数据库的权限

                            MySQL数据库提供的权限列表有很多,如下:

                            权限列名上下文
                            CREATECreate_priv数据库、表或索引
                            DROPDrop_priv数据库或表
                            GRANT OPTIONGrant_priv数据库、表或保存的程序
                            REFERENCESReferences_priv数据库或表
                            ALTERAlter_priv
                            DELETEDelete_priv
                            INDEXIndex_priv
                            SELECTSelect_priv
                            UPDATEUpdate_priv
                            CREATE VIEWCreate_view_priv视图
                            SHOW VIEWShow_view_priv视图
                            ALTER ROUTINEAlter_routine_priv保存的程序
                            CREATE ROUTINECreate_routine_priv保存的程序
                            EXECUTEExecute_priv保存的程序
                            FILEFile_priv服务器主机上的文件访问
                            CREATE TEMPORARY TABLESCreate_tmp_table_priv服务器管理
                            LOCK TABLESLock_tables_priv服务器管理
                            CREATE USERCreate_user_priv服务器管理
                            PROCESSProcess_priv服务器管理
                            RELOADReload_priv服务器管理
                            REPLICATION CLIENTRepl_client_priv服务器管理
                            REPLICATION SLAVERepl_slave_priv服务器管理
                            SHOW DATABASESShow_db_priv服务器管理
                            SHUTDOWNShutdown_priv服务器管理
                            SUPERSuper_priv服务器管理

                            1、权限授权

                            新创建的用户没有任何权限,因此创建用户后需要给用户授权。

                            给用户授权的SQL如下:

                            GRANT 权限列表 ON 库名.对象名 TO '用户名'@'登录地址' [IDENTIFIED BY '密码'];
                            

                            说明:

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

                              • grant select on … // 赋予查询权限
                              • grant select, delete, create on … // 赋予查询,删除和创建权限
                              • grant all [privileges] on … // 表示赋予该用户在该对象上的所有权限
                              • *.* : 代表本系统中的所有数据库的所有对象(表,视图,存储过程等)

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

                              • identified by可选。 如果用户存在,赋予权限的同时修改密码,如果该用户不存在,就是创建用户。

                                在授权完毕,有时我们还想看一看用户拥有什么权限,可以使用下面的命令:

                                show grants for '用户名'@'登录地址'
                                

                                比如下面授予用户qiling在db1数据库下account表的select权限。如下:

                                在这里插入图片描述

                                说明:

                                • 创建用户后该用户默认会有USAGE权限,该权限只能用于数据库登录,不能执行任何操作。

                                  然后我们分别让root和qiling去查看数据库db1下的表,发现普通用户只能看到经过授权的表,或者数据库。

                                  show tables;
                                  

                                  在这里插入图片描述

                                  因为我们授予了该用户select权限,所以对于该用户我们尝试查看表数据:

                                  在这里插入图片描述

                                  然后我们尝试去修改数据,发现权限拒绝!

                                  在这里插入图片描述

                                  如果qiling想要修改这张表中的数据,就需要root用户给其授权:

                                  grant update on db1.account to 'qiling'@'%';
                                  

                                  在这里插入图片描述

                                  然后我们再次使用普通用户qiling去修改数据,发现数据成功被修改:

                                  update account set balance=2067.5 where id=7;
                                  

                                  在这里插入图片描述

                                  2、权限回收

                                  SQL语法:

                                  REVOKE 权限列表 ON 库名.对象名 FROM '用户名'@'登录地址';
                                  
                                  • 回收权限的语法与授权一样,只不过将to关键字改为了from,并且没有了IDENTIFIED BY '密码’字段。

                                    比如下面将用户qiling在db1.account数据库下的所有权限回收。如下:

                                    在这里插入图片描述

                                    说明:

                                    • 回收用户在某一数据库下的权限后,在该用户下一次进入该数据库时才会起作用。
                                    • 如果回收权限时该用户正在使用对应数据库,那么回收权限后该用户仍然拥有对应的权限。
微信扫一扫加客服

微信扫一扫加客服