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中的Redo Log、Undo Log和Binlog

    深入解析MySQL中的Redo Log、Undo Log和Binlog

    本文详细介绍了MySQL中的RedoLog、UndoLog和Binlog的背景、业务场景、功能、底层实现原理以及使用措施,通过Java代码示例展示了如何与这些日志进行交互,进一步深化了对MySQL日志系统的理解,理解并合理使用这些日志,可以有效地提升数据库的性能和可靠性
    2024-10-10
  • mysql 8.0.21免安装版配置方法图文教程

    mysql 8.0.21免安装版配置方法图文教程

    这篇文章主要为大家详细介绍了mysql 8.0.21免安装版配置教程,文中安装步骤介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-07-07
  • MySQL深度分页问题的三种解决方法

    MySQL深度分页问题的三种解决方法

    在 MySQL 中解决深度分页问题的核心思路是减少扫描的数据量,尤其是避免通过 LIMIT offset, size 导致的大范围数据扫描,以下是三种优化方法及其原理、适用场景和注意事项,需要的朋友可以参考下
    2025-02-02
  • MySQL Administrator 登录报错的解决方法

    MySQL Administrator 登录报错的解决方法

    使用MySQL Administrator 登录,报错: Either the server service or the configuration file could not be found.Startup variable and service section are there for disabled.
    2010-12-12
  • 如何使用Maxwell实时同步mysql数据

    如何使用Maxwell实时同步mysql数据

    这篇文章主要介绍了如何使用Maxwell实时同步mysql数据,帮助大家更好的理解和学习使用MySQL,感兴趣的朋友可以了解下
    2021-04-04
  • Windows环境下重置mysql密码操作命令

    Windows环境下重置mysql密码操作命令

    Windows XP系统、xampp集成环境如何重置mysql密码,接下来为大家详细介绍下,感兴趣的各位可以参考下哈,希望可以帮助到你们
    2013-03-03
  • Mysql 导入导出csv 中文乱码问题的解决方法

    Mysql 导入导出csv 中文乱码问题的解决方法

    这篇文章介绍了Mysql 导入导出csv 中文乱码问题的解决方法,有需要的朋友可以参考一下
    2013-09-09
  • mysql中xtrabackup全量备份/增量备份及恢复

    mysql中xtrabackup全量备份/增量备份及恢复

    本文详细介绍了使用XtraBackup工具进行MySQL数据库的全量备份、增量备份以及恢复的详细步骤,文章详细列出了所需目录结构、配置文件和命令,为数据库管理员提供了一套完整的备份恢复解决方案
    2024-09-09
  • 详解SQL四种语言:DDL DML DCL TCL

    详解SQL四种语言:DDL DML DCL TCL

    本文详细介绍了sql的四种语言,包括数据定义语言(DDL)、数据操作语言(DML)、数据控制语言(DCL)和事物控制语言(TCL)。在这几种语言中有疑惑的可以来看看这篇文章。
    2016-07-07
  • Spring中的InitializingBean和SmartInitializingSingleton的区别详解

    Spring中的InitializingBean和SmartInitializingSingleton的区别详解

    这篇文章主要介绍了Spring中的InitializingBean和SmartInitializingSingleton的区别详解,InitializingBean只有一个接口方法afterPropertiesSet(),在BeanFactory初始化完这个bean,并且把bean的参数都注入成功后调用一次afterPropertiesSet()方法,需要的朋友可以参考下
    2024-01-01

最新评论