MySQL新建用户并授权


前言

有些时候因开发需要,管理数据库账号和账号对应的权限和密码,对自己的操作进行记录,主要操作的就是想创建一个新用户,并赋予,增删改查、创建表、删除表、等一些权限,并允许任何主句连接。


一、技术讲解

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)
  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,这是创建 MySQL 用户授权的步骤: 1. 连接到 MySQL 数据库服务器,可以使用以下命令: ``` mysql -u root -p ``` 2. 创建新用户,可以使用以下命令: ``` CREATE USER 'username'@'localhost' IDENTIFIED BY 'password'; ``` 其中,`username` 是新用户用户名,`localhost` 表示该用户只能从本地访问,`password` 是该用户的密码。 3. 授权用户访问数据库,可以使用以下命令: ``` GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'localhost'; ``` 其中,`database_name` 是要授权数据库名,`username` 是刚刚创建的用户名,`localhost` 表示该用户只能从本地访问。 4. 刷新权限,使修改生效,可以使用以下命令: ``` FLUSH PRIVILEGES; ``` 完成以上步骤,你就成功地创建了一个新的 MySQL 用户授权访问数据库。 ### 回答2: 在MySQL新建用户并授予其权限需要按照以下步骤进行操作。 首先,通过以下命令以root用户身份登录到MySQL服务器: mysql -u root -p 输入密码后,按下回车键登录。 接下来,使用以下命令创建新用户(例如,用户名为"newuser",密码为"password"): CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password'; 请注意,'localhost'表示新用户只能从本地主机连接到MySQL服务器。如果希望允许从其他主机连接,请将'localhost'改为其他主机名或IP地址。 然后,通过以下命令为新用户授予所有数据库的所有权限: GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost'; 该命令中的"*.*"表示所有数据库的所有表格。可以根据需要更改为特定的数据库或表格。如果只想授予读取权限,可以将"ALL PRIVILEGES"替换为"SELECT"。 最后,通过以下命令使更改立即生效: FLUSH PRIVILEGES; 完成上述步骤后,新用户就已经成功创建并且被授予了相应的权限。可以使用以下命令退出MySQL会话: EXIT; ### 回答3: 在MySQL中,我们可以使用以下步骤来创建新用户并为其授权: 1. 首先,以root用户身份登录到MySQL数据库中。 2. 使用以下命令创建一个新用户(假设我们要创建一个名为“newuser”的用户): CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password'; 此命令将创建一个名为“newuser”的用户,并为其指定密码为“password”。请注意,将“localhost”用作主机名,表示该用户只能从本地登录。 3. 如果你希望允许用户从远程主机登录,请替换“localhost”为用户的IP地址或使用“%”表示任何主机: CREATE USER 'newuser'@'%' IDENTIFIED BY 'password'; 这样,用户就可以从任何远程主机登录。 4. 接下来,我们需要为用户授予适当的权限。例如,如果我们想要授予用户对所有数据库的读取和写入权限,可以使用以下命令: GRANT ALL PRIVILEGES ON *.* TO 'newuser'@'localhost'; 这将为用户“newuser”在“localhost”上的所有数据库授予所有权限。 5. 最后,使用以下命令使更改生效: FLUSH PRIVILEGES; 这将使MySQL重新加载权限表,并将新授权应用到用户。 通过按照上述步骤创建新用户并为其授权,你就可以为MySQL数据库中的新用户提供所需的访问权限了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值