MySQL如何新建用户并授权

 更新时间:2024年10月09日 16:52:02   作者:Chenry.r  
本文主要介绍了如何在MySQL中创建新用户并管理其权限,包括增删改查、创建表、删除表等操作,文中详细说明了MySQL 5.7.18和MySQL 8.0版本中的权限配置,以及如何根据需要添加或删除权限的步骤,旨在提供实用的数据库管理技巧

前言

有些时候因开发需要,管理数据库账号和账号对应的权限和密码,对自己的操作进行记录,

主要操作的就是想创建一个新用户,并赋予,增删改查、创建表、删除表、等一些权限,并允许任何主句连接。

一、技术讲解

1.MySQL基础信息

mysql> SELECT VERSION();                     -- 查看MySQL版本 
+-----------+
| VERSION() |
+-----------+
| 5.7.18    |
+-----------+
1 row in set (0.00 sec)

mysql> select user,host from mysql.user;      -- 查询MySQL的所有用户信息
+-----------+-----------+
| user      | host      |
+-----------+-----------+
| mysql.sys | localhost |
| root      | localhost |
+-----------+-----------+
2 rows in set (0.00 sec)

mysql> SHOW GRANTS FOR 'root'@'localhost';    -- 查看'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)

mysql> 

从上面的代码上不难看到我使用的MySQL版本是5.7.18,有一个只能本地连接的超管(root);

其中'root'@'localhost'对应的权限解释

这些是 MySQL 数据库中的授权语句,用于授予用户权限。下面是这些语句的解释:

1. GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION:
   1.GRANT ALL PRIVILEGES:授予所有权限给指定的用户。
   2.ON *.*:作用于所有的数据库和表。
   3.TO 'root'@'localhost':将权限授予用户名为 'root'、主机名为 'localhost' 的用户。
   4.WITH GRANT OPTION:授予该用户授权其他用户的权限。
2. GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION:
   1.GRANT PROXY:授予用户代理权限,允许用户以其他用户的身份进行数据库操作。
   2.ON ''@'':代理用户为空,即允许任何用户代理任何其他用户。
  3.TO 'root'@'localhost':将代理权限授予用户名为 'root'、主机名为 'localhost' 的用户。
  4.WITH GRANT OPTION:授予该用户授权其他用户的权限。
总结起来,这些语句的作用是授予用户 'root'@'localhost' 所有的数据库和表的权限,并允许该用户授权其他用户。同时,还授予了用户 'root'@'localhost' 代理任何用户进行数据库操作的权限。

2.MySQL的权限

如果在MySQL8.0版本里运行

SHOW GRANTS FOR ‘root'@‘%'; 

不难发现下面的权限的 (超级管理员root的权限)

  • SELECT:允许从数据库中选择数据。
  • INSERT:允许向数据库中插入数据。
  • UPDATE:允许更新数据库中的数据。
  • DELETE:允许从数据库中删除数据。
  • CREATE:允许创建新的数据库和表。
  • DROP:允许删除数据库和表。
  • RELOAD:允许重新加载MySQL服务器的配置文件。
  • SHUTDOWN:允许关闭MySQL服务器。
  • PROCESS:允许查看当前正在运行的查询进程。
  • FILE:允许读取和写入文件系统中的文件。
  • REFERENCES:允许在表之间创建外键约束。
  • INDEX:允许创建和删除索引。
  • ALTER:允许修改表的架构,例如更改列、添加/删除约束等。
  • SHOW DATABASES:允许查看所有数据库列表。
  • SUPER:允许执行特权操作,例如设置最大连接数、关闭自动关闭线程等。
  • CREATE TEMPORARY TABLES:允许创建临时表。
  • LOCK TABLES:允许对表进行锁定操作,例如排他锁定或共享锁定。
  • EXECUTE:允许执行存储过程和函数。
  • REPLICATION SLAVE:允许作为从服务器进行复制(复制订阅者)。
  • REPLICATION CLIENT:允许作为复制客户端,例如从主服务器获取日志数据。
  • CREATE VIEW:允许创建视图对象。
  • SHOW VIEW:允许查看视图对象。
  • CREATE ROUTINE:允许创建存储过程和函数。
  • ALTER ROUTINE:允许修改存储过程和函数的定义。
  • CREATE USER:允许创建新用户。
  • EVENT:允许创建和管理事件调度程序。
  • TRIGGER:允许创建和管理触发器。
  • CREATE TABLESPACE:允许创建新的表空间。
  • CREATE ROLE:允许创建新角色(用户组)。
  • DROP ROLE:允许删除角色(用户组)。

二、操作步骤

1.创前介绍

1.创建用户
   create user 'wmlc_dev'@'%' identified by '123456';
   创建用户名为wmlc_dev,密码是123456的用户(wmlc_dev,123456可指定),'wmlc_dev'@'%' 里的%是指允许从任何主机('%')连接;
   如果要是指定主机的话可以把%换为要指定的IP即可
2.授予权限
   grant select, insert, update, delete on wmlc.* to 'wmlc_dev'@'%';
   授予用户名为wmlc_dev,数据库为` wmlc `的查询、插入、更新和删除操作的权限。(wmlc 是数据库名称,可指定);
   如果想授予新用户在所有数据库和所有表上选择和锁定表的权限的话可改、 wmlc.* 为  *.* 即可
3.刷新权限缓存
   flush privileges;
4.做连接测试。

2.实操介绍

mysql> CREATE DATABASE wmlc CHARACTER SET utf8;     -- 创建我们需要的数据库
Query OK, 1 row affected (0.00 sec)

mysql> show databases;                              -- 查询数据库
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| wmlc               |
| yeb                |
+--------------------+
6 rows in set (0.02 sec)

mysql> create user 'wmlc_dev'@'%' identified by '123456';  -- 创建新用户
Query OK, 0 rows affected (0.01 sec)

mysql> select user,host from mysql.user;                 
+-----------+-----------+
| user      | host      |
+-----------+-----------+
| wmlc_dev  | %         |
| mysql.sys | localhost |
| root      | localhost |
+-----------+-----------+
3 rows in set (0.00 sec)

mysql> grant select, insert, update, delete on wmlc.* to 'wmlc_dev'@'%';    -- 给新用户授权
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW GRANTS FOR 'wmlc_dev'@'%';          --查询新用户的权限
+--------------------------------------------------------------------+
| Grants for wmlc_dev@%                                              |
+--------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'wmlc_dev'@'%'                               |
| GRANT SELECT, INSERT, UPDATE, DELETE ON `wmlc`.* TO 'wmlc_dev'@'%' |
+--------------------------------------------------------------------+
2 rows in set (0.00 sec)

mysql>  flush privileges;                          -- 刷新
Query OK, 0 rows affected (0.02 sec)

mysql> exit;
Bye
root@43e97fa6b64f:/# mysql -uwmlc_dev -p123456      -- 测试创建的新账号是否可以登录
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.7.18 MySQL Community Server (GPL)

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

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 |
| wmlc               |
+--------------------+
2 rows in set (0.01 sec)

mysql> use wmlc;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed

mysql> CREATE TABLE `t_sys_user`  (
    ->   `id` int(11) NOT NULL,
    ->   `username` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '',
    ->   PRIMARY KEY (`id`) USING BTREE
    -> ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- 当我们创建表时会发现没有权限创建
ERROR 1142 (42000): CREATE command denied to user 'wmlc_dev'@'localhost' for table 't_sys_user'

-- 在添加两个权限 CREATE:允许创建新的数据库和表。DROP:允许删除数据库和表。(添加权限需要切换回可以添加权限的账号,这里我就不做过多介绍了,我是又切换回root账号进行授权的
mysql> grant CREATE, DROP on wmlc.* to 'wmlc_dev'@'%';
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW GRANTS FOR 'wmlc_dev'@'%'; 
+----------------------------------------------------------------------------------+
| Grants for wmlc_dev@%                                                            |
+----------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'wmlc_dev'@'%'                                             |
| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON `wmlc`.* TO 'wmlc_dev'@'%' |
+----------------------------------------------------------------------------------+
2 rows in set (0.00 sec)

mysql>  flush privileges;
Query OK, 0 rows affected (0.02 sec)
-- 然后在重新登录到我们新建的wmlc_dev账号登录操作就可以了
mysql> DROP TABLE IF EXISTS `t_sys_user`;
Query OK, 0 rows affected (0.00 sec)

mysql> CREATE TABLE `t_sys_user`  (
    ->   `id` int(11) NOT NULL,
    ->   `username` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '',
    ->   PRIMARY KEY (`id`) USING BTREE
    -> ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
Query OK, 0 rows affected (0.01 sec)

总结

有的时候也可能需要给某些账号删除一些权限;添加或删除那些权限根据自己的需求来定。

删除操作如下:

要删除MySQL用户的某些权限,您可以使用以下方法:

 1.登录到MySQL服务器,使用root用户身份打开命令行终端窗口(有其它授权账号也可以)。
 2.确定要删除权限的用户。如果要删除多个用户的权限,请在每个用户名下重复以下步骤。
 3.运行以下命令以撤销用户在特定数据库上的特定权限
   REVOKE <privilege> ON <database_name>.<table_name> FROM '<user_name>@<host>';
 其中,<privilege>是要撤销的权限,如SELECT、INSERT、UPDATE、DELETE等。
      <database_name>是要撤销权限的数据库名称,
      <table_name>是要撤销权限的表名称,
      <user_name>是要删除权限的用户名,
      <host>是用户的主机名。
      
例如,如果要删除名为 wmlc_dev 的用户在名为 wmlc 的数据库中所有表的CREATE和DROP 权限,可以运行以下命令:
REVOKE  CREATE, DROP ON wmlc.* FROM 'wmlc_dev'@'%';
运行以下命令以刷新权限,以便更改生效:
FLUSH PRIVILEGES;
完成上述步骤后,指定用户的特定权限应该已被删除。
请注意,如果删除了一个用户在所有数据库和表上的所有权限,该用户将无法连接到MySQL服务器。

实操如下:

-- 我们这里删除了刚才我们添加两个权限 CREATE:允许创建新的数据库和表。DROP:允许删除数据库和表
mysql> REVOKE  CREATE, DROP ON wmlc.* FROM 'wmlc_dev'@'%';
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW GRANTS FOR 'wmlc_dev'@'%';
+--------------------------------------------------------------------+
| Grants for wmlc_dev@%                                              |
+--------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'wmlc_dev'@'%'                               |
| GRANT SELECT, INSERT, UPDATE, DELETE ON `wmlc`.* TO 'wmlc_dev'@'%' |
+--------------------------------------------------------------------+
2 rows in set (0.00 sec)

mysql>  flush privileges;
Query OK, 0 rows affected (0.00 sec)

补充部分:

-- 假设新用户名为'wmlc_dev'@'%'
mysql> SHOW GRANTS FOR 'wmlc_dev'@'%';
-- 添加权限(创建数据库/表,删除数据库/表,查询,添加,修改,删除)
mysql> grant CREATE, DROP, select, insert, update, delete on *.* to 'develop'@'%';
-- 撤销用户的所有权限
mysql> REVOKE ALL PRIVILEGES ON *.* FROM 'wmlc_dev'@'%';
mysql> FLUSH PRIVILEGES;
 
-- 删除用户在授权表中的记录(如果直接在授权表中添加了记录)
mysql> DELETE FROM mysql.user WHERE User='wmlc_dev' AND Host='%';
mysql> FLUSH PRIVILEGES;

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • MySQL数据库中表的操作详解

    MySQL数据库中表的操作详解

    这篇文章主要为大家详细介绍了MySQL数据库中表常用的一些操作方法,文中的示例代码讲解详细, 对我们学习MySQL有一定帮助,需要的可以参考一下
    2022-08-08
  • 关于mysql create routine 权限的一些说明

    关于mysql create routine 权限的一些说明

    下面小编就为大家带来一篇关于mysql create routine 权限的一些说明。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • mysql添加enum类型的字段实现

    mysql添加enum类型的字段实现

    Enum类型它允许我们在一个有限的选项列表中选择一个值,本文主要介绍了mysql添加enum类型的字段实现,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • Mysql 数据库死锁过程分析(select for update)

    Mysql 数据库死锁过程分析(select for update)

    最近有项目需求,需要保证多台机器不拿到相同的数据,后来发现Mysql查询语句使用select.. for update经常导致数据库死锁问题,下面小编给大家介绍mysql 数据库死锁过程分析(select for update),对mysql数据库死锁问题感兴趣的朋友一起学习吧
    2015-12-12
  • MySQL如何生成唯一的server-id

    MySQL如何生成唯一的server-id

    这篇文章主要给大家介绍了关于MySQL如何生成唯一的server-id的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用MySQL具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-09-09
  • MySQL一些常用高级SQL语句详解

    MySQL一些常用高级SQL语句详解

    对 MySQL 数据库的查询,除了基本的查询外,有时候需要对查询的结果集进行处理。例如只取 10 条数据、对查询结果进行排序或分组等等,今天就给大家分享MySQL一些常用高级SQL语句,感兴趣的朋友一起看看吧
    2022-06-06
  • 为什么mysql自增主键不是连续的

    为什么mysql自增主键不是连续的

    在面试中被提问,mysql 中的 user 表的 id 默认是自增的,但是数据库存储的结果却不是连续的,你知道是什么原因吗,本文就详细的介绍一下,感兴趣的可以了解一下
    2021-09-09
  • 浅谈mysql一张表到底能存多少数据

    浅谈mysql一张表到底能存多少数据

    这篇文章主要介绍了浅谈mysql一张表到底能存多少数据,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • 使用YUM在Linux(CentOS 7)下安装mysql 5.7.18的教程详解

    使用YUM在Linux(CentOS 7)下安装mysql 5.7.18的教程详解

    这篇文章主要介绍了使用YUM在Linux(CentOS 7)下安装mysql 5.7.18的教程详解,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-05-05
  • 解读数据库的嵌套查询的性能问题

    解读数据库的嵌套查询的性能问题

    这篇文章主要介绍了解读数据库的嵌套查询的性能问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03

最新评论