前言
有些时候因开发需要,管理数据库账号和账号对应的权限和密码,对自己的操作进行记录,
主要操作的就是想创建一个新用户,并赋予,增删改查、创建表、删除表、等一些权限,并允许任何主句连接。
一、技术讲解
1.MySQL基础信息
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 | 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);
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 其中 '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版本里运行
1 | 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 2 3 4 5 6 7 8 9 10 11 | 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.实操介绍
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 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 | 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) |
总结
有的时候也可能需要给某些账号删除一些权限
;添加或删除那些权限根据自己的需求来定。
删除操作如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 要删除MySQL用户的某些权限,您可以使用以下方法: 1.登录到MySQL服务器,使用root用户身份打开命令行终端窗口(有其它授权账号也可以)。 2.确定要删除权限的用户。如果要删除多个用户的权限,请在每个用户名下重复以下步骤。 3.运行以下命令以撤销用户在特定数据库上的特定权限 REVOKE ON . FROM '@' ; 其中,是要撤销的权限,如 SELECT 、 INSERT 、 UPDATE 、 DELETE 等。 是要撤销权限的数据库名称, < table ></ table >是要撤销权限的表名称, 是要删除权限的用户名, 是用户的主机名。 例如,如果要删除名为 wmlc_dev 的用户在名为 wmlc 的数据库中所有表的 CREATE 和 DROP 权限,可以运行以下命令: REVOKE CREATE , DROP ON wmlc.* FROM 'wmlc_dev' @ '%' ; 运行以下命令以刷新权限,以便更改生效: FLUSH PRIVILEGES ; 完成上述步骤后,指定用户的特定权限应该已被删除。 请注意,如果删除了一个用户在所有数据库和表上的所有权限,该用户将无法连接到MySQL服务器。< table ></ table > |
实操如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | -- 我们这里删除了刚才我们添加两个权限 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) |
补充部分:
1 2 3 4 5 6 7 8 9 10 11 | -- 假设新用户名为'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 ; |
以上为个人经验,希望能给大家一个参考,也希望大家多多支持IT俱乐部。