• MySQL用户管理


    📟作者主页:慢热的陕西人

    🌴专栏链接:MySQL

    📣欢迎各位大佬👍点赞🔥关注🚓收藏,🍉留言

    本博客主要内容介绍数据库中用户管理,包括创建用户,删除用户等,以及数据库权限方面的问题

    在这里插入图片描述

    MySQL用户管理

    如果我们只能使用root用户,这样存在安全隐患。这时,就需要使用MySQL的用户管理

    image-20240418114620029

    张三只能操纵mytest这个库,李四只能操作msg这个库。如果给他们root账户,他们就可以操控所有的库,风险太大。

    1.用户管理

    1.1用户信息

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

    mysql> use mysql;
    Database changed
    mysql> select host,user,authentication_string from user;
    +-----------+---------------+-------------------------------------------+
    | host | user | authentication_string |
    +-----------+---------------+-------------------------------------------+
    | localhost | root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
    | localhost | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
    | localhost | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
    +-----------+---------------+-------------------------------------------+
    --可以通过desc user初步查看一下表结构
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    字段解释:

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

    1.2创建用户

    语法:

    create user '用户名'@'登陆主机/ip' identified by '密码';
    
    • 1

    案例:

    mysql> create user 'mi'@'localhost' identified by 'Mi123456..';
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> select host, user, authentication_string from user;
    +-----------+---------------+-------------------------------------------+
    | host      | user          | authentication_string                     |
    +-----------+---------------+-------------------------------------------+
    | localhost | root          | *6057AD50BC15C0C59F06C8F75159017F9C920E7B |
    | localhost | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
    | localhost | mysql.sys     | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
    | localhost | mi            | *CA0B93D2D410FACC8F6BE4167673DB06C37838FD |
    +-----------+---------------+-------------------------------------------+
    4 rows in set (0.00 sec)
    -- 此时便可以使用新账号新密码进行登陆啦
    --备注:可能实际在设置密码的时候,因为mysql本身的认证等级比较高,一些简单的密码无法设置,会爆出
    如下报错:
    -- ERROR 1819 (HY000): Your password does not satisfy the current policy
    requirements
    -- 解决方案:https://blog.csdn.net/zhanaolu4821/article/details/93622812
    --查看密码设置相关要求:SHOW VARIABLES LIKE 'validate_password%';
    -- 这个大家下来自己玩玩
    --关于新增用户这里,需要大家注意,不要轻易添加一个可以从任意地方登陆的user
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    1.3删除用户

    语法:

    drop user '用户名'@'主机名'
    
    • 1

    示例:

    mysql> select user, host , authentication_string from user;
    +---------------+-----------+-------------------------------------------+
    | user          | host      | authentication_string                     |
    +---------------+-----------+-------------------------------------------+
    | root          | localhost | *6057AD50BC15C0C59F06C8F75159017F9C920E7B |
    | mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
    | mysql.sys     | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
    | mi            | localhost | *CA0B93D2D410FACC8F6BE4167673DB06C37838FD |
    +---------------+-----------+-------------------------------------------+
    4 rows in set (0.00 sec)
    
    mysql> drop user mi;
    ERROR 1396 (HY000): Operation DROP USER failed for 'mi'@'%' -- <= 直接给个用户名,
    不能删除,它默认是%,表示所有地方可以登陆的用户
    mysql> drop user 'mi'@'localhost';
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> select user, host , authentication_string from user;
    +---------------+-----------+-------------------------------------------+
    | user          | host      | authentication_string                     |
    +---------------+-----------+-------------------------------------------+
    | root          | localhost | *6057AD50BC15C0C59F06C8F75159017F9C920E7B |
    | mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
    | mysql.sys     | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
    +---------------+-----------+-------------------------------------------+
    3 rows in set (0.00 sec)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    1.4修改用户密码

    语法:

    • 自己改自己密码

      set password=password('新的密码');
      
      • 1
    • root用户修改指定用户的密码

      set password for '用户名'@'主机名'=password('新的密码');
      
      • 1
      mysql> select user, host , authentication_string from user;
      +---------------+-----------+-------------------------------------------+
      | user          | host      | authentication_string                     |
      +---------------+-----------+-------------------------------------------+
      | root          | localhost | *6057AD50BC15C0C59F06C8F75159017F9C920E7B |
      | mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
      | mysql.sys     | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
      | mi            | localhost | *CA0B93D2D410FACC8F6BE4167673DB06C37838FD |
      +---------------+-----------+-------------------------------------------+
      4 rows in set (0.00 sec)
      
      mysql> set password for 'mi'@'localhost'=password('Mi123321..');
      Query OK, 0 rows affected, 1 warning (0.00 sec)
      
      mysql> select user, host , authentication_string from user;
      +---------------+-----------+-------------------------------------------+
      | user          | host      | authentication_string                     |
      +---------------+-----------+-------------------------------------------+
      | root          | localhost | *6057AD50BC15C0C59F06C8F75159017F9C920E7B |
      | mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
      | mysql.sys     | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
      | mi            | localhost | *32E57CCDC98ED24C8026ACD86BCBD456CAC387A8 |
      +---------------+-----------+-------------------------------------------+
      4 rows in set (0.00 sec)
      
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25

    2.数据库的权限

    MySQL数据库提供的权限列表:

    权限描述
    SELECT允许用户查询(检索)表中的数据。
    INSERT允许用户向表中插入新行(记录)的权限。
    UPDATE允许用户更新表中现有行的权限。
    DELETE允许用户删除表中的行的权限。
    CREATE允许用户创建新数据库或表的权限。
    DROP允许用户删除数据库或表的权限。
    ALTER允许用户修改数据库或表结构的权限,如添加、删除或修改列。
    GRANT OPTION允许用户将自己拥有的权限授予其他用户的权限。
    ALL PRIVILEGES授予用户对指定数据库或表的所有权限。
    SHOW DATABASES允许用户查看数据库列表的权限。
    CREATE USER允许用户创建新用户的权限。
    RELOAD允许用户重新加载服务器配置文件或刷新访问控制表的权限。
    SHUTDOWN允许用户关闭服务器的权限。
    PROCESS允许用户查看当前运行的进程列表的权限。
    FILE允许用户执行文件系统操作的权限,如导入和导出数据。
    SUPER允许用户执行一些特殊的超级用户级别的操作,如更改服务器运行参数或执行特殊的维护任务。

    2.1给用户授权

    刚创建的用户没有任何权限。需要给用户授权

    语法:

    grant 权限列表 on 库.对象名 to '用户名'@'登陆位置' [identified by '密码']
    
    • 1

    说明:

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

      grant select on ...
      grant select, delete, create on ....
      grant all [privileges] on ... -- 表示赋予该用户在该对象上的所有权限
      
      • 1
      • 2
      • 3
    • *.* : 代表本系统中的所有数据库的所有对象(表,视图,存储过程等)

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

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

    案例:

    C:\Users\jason>mysql -umi -h117.72.37.100 -P8080 -p
    Enter password: **********
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 17
    Server version: 5.7.44 MySQL Community Server (GPL)
    
    Copyright (c) 2000, 2024, Oracle and/or its affiliates.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    +--------------------+
    1 row in set (0.07 sec)
    
    ----给用户mi赋予test数据库下所有文件的select权限
    mysql> grant select on test.* to 'mi'@'%';
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> flush privileges;
    Query OK, 0 rows affected (0.00 sec)
    
    
    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | test               |
    +--------------------+
    2 rows in set (0.09 sec)
    
    //
    mysql> use test;
    Database changed
    mysql> show tables;
    +----------------+
    | Tables_in_test |
    +----------------+
    | account        |
    | student        |
    | t1             |
    | users          |
    +----------------+
    4 rows in set (0.07 sec)
    
    mysql> select * from account;
    +----+------+---------+
    | id | name | blance  |
    +----+------+---------+
    |  3 | 王五 | 3332.40 |
    |  5 | 田七 | 1234.10 |
    +----+------+---------+
    2 rows in set (0.08 sec)
    
    --没有删除权限
    mysql> delete from account;
    ERROR 1142 (42000): DELETE command denied to user 'mi'@'113.135.244.144' for table 'account'
    
    
    备注:特定用户现有查看权限
    mysql> show grants for 'mi'@'%';
    +--------------------------------------+
    | Grants for mi@%                      |
    +--------------------------------------+
    | GRANT USAGE ON *.* TO 'mi'@'%'       |
    | GRANT SELECT ON `test`.* TO 'mi'@'%' |
    +--------------------------------------+
    2 rows in set (0.00 sec)
    
    mysql> show grants for 'root'@'localhost';
    +---------------------------------------------------------------------+
    | Grants for root@localhost                                           |
    +---------------------------------------------------------------------+
    | GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
    | GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION        |
    +---------------------------------------------------------------------+
    2 rows in set (0.00 sec)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86

    注意:如果发现赋权限后,没有生效,执行如下指令:

    flush privileges;
    
    • 1

    2.2回收权限

    语法:

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

    示例:

    mysql> revoke all on test.* from 'mi'@'%';
    Query OK, 0 rows affected (0.00 sec)
    
    //终端b
    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    +--------------------+
    1 row in set (0.09 sec)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    到这本篇博客的内容就到此结束了。
    如果觉得本篇博客内容对你有所帮助的话,可以点赞,收藏,顺便关注一下!
    如果文章内容有错误,欢迎在评论区指正

    在这里插入图片描述

  • 相关阅读:
    使用Redux-Toolkit,由“object is not extensible”引发的思考及解决方案
    寄存器与ROM与RAM
    IJCAI22:Language Models as Knowledge Embeddings
    约瑟夫环真的那么难吗?
    vue源码分析(二)——vue的入口发生了什么
    Python telegram机器人发送消息
    中集集团全球港航人工智能独角兽中集飞瞳,全球最先进港航人工智能AI核心技术及工业级产品,新一代人工智能港口智能化船公司智能化方案
    PPT基础入门
    uniapp——生成一个签字板
    计算机毕业设计 基于Web铁路订票管理系统 火车订票管理系统的设计与实现 Javaweb项目 Java实战项目 前后端分离 文档报告 代码讲解 安装调试
  • 原文地址:https://blog.csdn.net/weixin_61766635/article/details/137978421