加入收藏 | 设为首页 | 会员中心 | 我要投稿 聊城站长网 (https://www.0635zz.com/)- 智能语音交互、行业智能、AI应用、云计算、5G!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

在 MySQL 中,管理和操作用户的访问权限非常重要。

发布时间:2023-07-26 14:38:08 所属栏目:MySql教程 来源:
导读:在MySQL 5.7.24中,关于用户及用户权限的相关信息,都保存在了mysql库中的user表中,可以将user表中大致分为用户列、权限列、安全列、资源控制列这几种。

1、用户列

user表的用户列包括 Host、 User、passwo
在MySQL 5.7.24中,关于用户及用户权限的相关信息,都保存在了mysql库中的user表中,可以将user表中大致分为用户列、权限列、安全列、资源控制列这几种。
 
1、用户列
 
user表的用户列包括 Host、 User、password,分别表示主机名、用户名和密码。其中 user和 Host为user表的联合主踺。当用户与服务器之间建立连接时,输入的账户信息中的用户名称、主机名和密码必须匹配user表中对应的字段,只有3个值都匹配的时候,才允许连接的建立。这3 个字段的值就是创建账户时保存的账户信息。修改用户密码时,实际就是修改user表的password字段值。
 
2、权限列
 
权限列的字段决定了用户的权限,描述了在全局范围内允许对数据和数据库进行的操作。包括查询权限、修改权限等普通权限,还包括了关闭服务器、超级权限和加载用户等高级权限。普通权限用于操作数据库;高级权限用于数据库管理。 user表中对应的权限是针对所有用户数据库的。这些字段值的类型为 ENUM,可以取的值只能为 Y和 N, Y表示该用户有对应的权限; N表示用户没有对应的权限。查看user表的结构可以看到,这些字段的值默认都是 N。如果要修改权限,可以使用 GRANT语句或 UPDATE语句更改 user表的这些字段来修改用户对应的权限。
 
3、安全列
 
安全列只有6个字段,其中两个是 SSI相关的,2个是 x509相关的,另外2个是授权插件相关的。SSI用于加密; X509标准可用于标识用户: Plugin字段标识可以用于验证用户身份的插件,如果该字段为空,服务器使用内建授权验证机制验证用户身份。可以通过 SHOW VARIABLES LIKE ' have_openssl'语句来查询服务器是否支持 SSI功能。
 
4、资源控制列
 
资源控制列的字段用来限制用户使用的资源,包含4个字段,分别为:
 
1)Max_questions—用户每小时允许执行的查询操作次数。
 
2)Max_updates一用户每小时允许执行的更新操作次数。
 
3)Max_connections—用户每小时允许执行的连接操作次数。
 
4)Max_user_connections—用户允许同时建立的连接次数。
 
一个小时内用户查询或者连接数量超过资源控制限制,用户将被锁定,直到下一个小时,才可以在此执行对应的操作。可以使用GRANT语句更新这些字段的值。
 
注:若新建的用户无法登录到数据库,排除权限错误的前提下,可以尝试刷新权限,命令如下:
 
mysql> flush privileges;
 
在使用grant给用户授权时,可以使用下面的指令查看有哪些权限可以授权给用户:
 
mysql> SHOW PRIVILEGES;        
 
一、创建用户
 
1、使用create user语句创建新用户
 
1)方法1:
 
mysql> create user 'tom'@'localhost' identified by '123.com';
 
上面的语句是创建了一个tom用户,只允许本机登录,并且密码为123.com。
 
但是上面这种方式,密码是以明文的方式写下来的(虽然存储进去后是密文的方式),但有些不安全,上述指令会在mysq.user这个表中产生tom这个用户的信息,如下:
 
mysql> select * from user where User='tom'\G        <!--查询User字段为tom的列-->
 
*************************** 1. row ***************************
 
                  Host: localhost           <!--允许从哪个主机登录-->
 
                  User: tom              <!--用户名-->
 
                                    <!--以下是权限,“N”表示没有对应的权限,“Y”表示拥有对应的权限-->
 
           Select_priv: N
 
           Insert_priv: N
 
           Update_priv: N
 
           Delete_priv: N
 
           Create_priv: N
 
             Drop_priv: N
 
           Reload_priv: N
 
         Shutdown_priv: N
 
          Process_priv: N
 
             File_priv: N
 
            Grant_priv: N
 
       References_priv: N
 
            Index_priv: N
 
            Alter_priv: N
 
          Show_db_priv: N
 
            Super_priv: N
 
 Create_tmp_table_priv: N
 
      Lock_tables_priv: N
 
          Execute_priv: N
 
       Repl_slave_priv: N
 
      Repl_client_priv: N
 
      Create_view_priv: N
 
        Show_view_priv: N
 
   Create_routine_priv: N
 
    Alter_routine_priv: N
 
      Create_user_priv: N
 
            Event_priv: N
 
          Trigger_priv: N
 
Create_tablespace_priv: N
 
              ssl_type:
 
            ssl_cipher:
 
           x509_issuer:
 
          x509_subject:
 
         max_questions: 0
 
           max_updates: 0
 
       max_connections: 0
 
  max_user_connections: 0
 
                plugin: mysql_native_password
 
 authentication_string: *AC241830FFDDC8943AB31CBD47D758E79F7953EA
 
 <!--上面是123.com经过哈希加密过的密码-->
 
      password_expired: N
 
 password_last_changed: 2019-12-27 11:45:25
 
     password_lifetime: NULL
 
        account_locked: N
 
1 row in set (0.00 sec)
 
2)方法2:
 
mysql> select password('123.com');
 
+-------------------------------------------+
 
| password('123.com')                       |
 
+-------------------------------------------+
 
| *AC241830FFDDC8943AB31CBD47D758E79F7953EA |
 
+-------------------------------------------+
 
1 row in set, 1 warning (0.00 sec)
 
mysql> create user 'zhangyi'@'localhost'
 
    -> identified by password '*AC241830FFDDC8943AB31CBD47D758E79F7953EA';
 
Query OK, 0 rows affected, 1 warning (0.00 sec)
 
上述命令是先将123.com字符串进行加密,然后创建用户的时候,直接写入加密后的密码即可,但是需要添加password关键字。
 
创建后,zhangyi用户在本机使用123.com这个密码就可以登录到数据库了。
 
2、使用grant语句创建新用户
 
mysql> grant select on test01.* to 'zhanger'@'localhost' identifiedd by '123.com';
 
上述指令在创建用户zhanger的同时,指定其只允许本机登录,密码为123.com,并且该用户对test01这个库的所有表具有select权限。
 
验证:
 
[root@mysql ~]# mysql -uzhanger -p123.com         <!--使用zhanger用户进行登录-->
 
mysql> show databases;          <!--查看有哪些库,其实还有很多,但是由于没权限,所以不会显示所有的库-->
 
+--------------------+
 
| Database           |
 
+--------------------+
 
| information_schema |
 
| test01             |
 
+--------------------+
 
2 rows in set (0.00 sec)
 
mysql> use test01;           <!--切入到有权限的库-->
 
mysql> show tables;         <!--查看所有表-->
 
+------------------+
 
| Tables_in_test01 |
 
+------------------+
 
| bank             |
 
| student          |
 
+------------------+
 
2 rows in set (0.00 sec)
 
mysql> select * from bank;             <!--查看某个表内容-->
 
+------+-------+
 
| name | money |
 
+------+-------+
 
| lu   |  1000 |
 
| qi   |  5000 |
 
+------+-------+
 
2 rows in set (0.00 sec)
 
mysql> update bank set money=600 where name='lu';       <!--试着更新表内容,但是由于只有select权限,所以会被拒绝-->
 
ERROR 1142 (42000): UPDATE command denied to user 'zhanger'@'localhost' for table 'bank'
 
二、删除用户
 
1、使用DROP USER语句删除
 
mysql> drop user zhangyi@localhost;
 
2、使用delete语句删除用户
 
mysql> delete from mysql.user where Host='localhost' and user='tom';
 
三、修改用户密码
 
1、在命令行使用mysqladmin命令修改用户密码
 
[root@mysql ~]# mysqladmin -uroot -p password '2008.com'  <!--将root用户的密码修改为2008.com-->
 
Enter password:            <!--此处注意,需要填写旧密码-->
 
[root@mysql ~]# mysql -uroot -p123.com       <!--此时旧密码已经无法登录了-->
 
mysql: [Warning] Using a password on the command line interface can be insecure.
 
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
 
[root@mysql ~]# mysql -uroot -p2008.com     <!--使用新密码登录即可-->
 
2、修改MySQL数据库的user表
 
<!--修改root密码为123.com-->
 
mysql> update mysql.user set authentication_string=password("123.com") where User="root" and Host="localhost";
 
mysql> flush privileges;
 
3、使用set语句修改当前用户的密码
 
mysql> set password=password('2019.com');
 
4、Root用户修改普通用户密码
 
1)使用set语句来修改普通用户
 
mysql> set password for 'liss'@'localhost'=password('123456');
 
<!--修改liss用户的密码为123456-->
 
2)使用update语句修改普通用户
 
mysql> update mysql.user set authentication_string=password("123.com")
 
    -> where User='liss' and host='localhost';
 
<!--修改liss用户的密码为123.com-->
 
mysql> flush PRIVILEGES;      <!--需要刷新一下才可以生效-->
 
3)使用grant语句修改普通用户密码
 
mysql> grant select on *.* to 'liss'@'localhost' identified by '304.com';
 
<!--修改liss用户的密码为304.com,同时赋予select权限-->
 
5、普通用户修改自己的密码
 
[root@mysql ~]# mysql -uliss -p304.com         <!--登录-->
 
mysql> set password=password("lvjianzhao");     <!--修改密码为lvjianzhao-->
 
6、撤销普通用户的权限
 
在上面已经写下了如何为用户授权,那么这里将写下如何将用户的已有权限撤销。如下:
 
mysql> show grants for liss@localhost\G     <!--查看用户拥有的权限-->
 
mysql> revoke select on *.* from 'liss'@'localhost';      <!--将用户的select权限撤销-->
 
mysql> flush PRIVILEGES;       <!--刷新权限,至此,当用户再次登录,就没有select权限了-->
 
 

(编辑:聊城站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章