Mysql 用户管理(创建、删除、改密、授予权限、取消权限)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: Mysql 用户管理(创建、删除、改密、授予权限、取消权限)

  • 用户管理主要包括两方面的工作:
用户账号的管理,包括: 创建、删除、改密
用户权限的管理,包括: 授予权限、取消权限
  • 先测试一下通过 ip 地址连接数据库
dengzemiaodeMacBook-Pro:~ dengzemiao$ mysql -h10.0.90.48 -uroot -p
Enter password: 
ERROR 1130 (HY000): Host '10.0.90.48' is not allowed to connect to this MySQL server
  • 因为 root 账号其他人是没有权限用它进行访问的,现在我们需求来创建一个用户给与别人来访问我们的数据库。


  • 查看用户


mysql 数据库管理系统中有个数据库叫做 “mysql” ,绝对不能删除!其中有个表 “user”,就是存储了当前数据库系统中的所有用户信息,初始时只有一个用户: root

mysql> use mysql;
Database changed
mysql> select * from user;
查出来的符号太多了,截图算了



  • 创建用户


创建用户不能通过正常的 sql 插入语句操作。
语法形式:
create user '用户名' [@'允许登录的地址'] identified by '密码';
create user '用户名'[@'允许登录的地址'] identified by '密码'; // @ 符号挨着用户名也是没问题的
说明:
1、创建用户之后,数据库 mysql 中的 user 表中就会多一个用户。
2、'允许登录的地址' 就是允许登录的客户端的ip地址,如果设置了就只能在这个指定的地址进行登录:
  ① 'localhost':表示只能本地登录。
  ② '%':表示任何位置都可以登录。
  ③ 该部分可以省略,如果省略,默认就是 '%'。
  ④ 后续涉及到用户的操作,都是这个格式。
示例:
create user 'user1' identified by '123456';
create user 'user1' @'localhost' identified by '123456';
create user 'user1' @'10.0.90.48' by '123456';
create user 'user1' @'%' by '123456';

那么就来创建一个用户 user_all 测试一下:

mysql> create user 'user_all' identified by '123456';
Query OK, 0 rows affected (0.00 sec)

然后我们再次执行 ip 登录我们的数据库:

会发现连接成功了
dengzemiaodeMacBook-Pro:~ dengzemiao$ mysql -h10.0.90.48 -uuser_all -p
Enter password: 
Welcome to the MySQL monitor...
但是我们的权限有限,能查看的数据库很少,都是无关紧要的库,所以等下我们还需要配置权限
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
+--------------------+


  • 删除用户


删除用户后,数据库 mysql 中的 user 表中就会少一个用户。
语法形式:
drop user '用户名' [@'允许登录的地址'];
drop user '用户名'[@'允许登录的地址']; // @ 符号挨着用户名也是没问题的
注意: 如果在创建用户的时候,用户指定了 '允许登录的地址',那么在删除的时候也需要带上 '允许登录的地址' 进行删除
举例:
drop user '用户名'; // 默认就是删除 @'%'
drop user '用户名' @'%';
drop user '用户名' @10.0.90.48;

那么就来删除一下这两种情况下的用户:

创建一个不带 '允许登录的地址' 的用户
mysql> create user 'user_all' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
删除一个不带 '允许登录的地址' 的用户
mysql> drop user 'user_all';
Query OK, 0 rows affected (0.00 sec)
创建一个带 '允许登录的地址' 的用户
mysql> create user 'user_all' @'10.0.90.48' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
通过不带 '允许登录的地址' 的方式删除会报错
mysql> drop user 'user_all';
ERROR 1396 (HY000): Operation DROP USER failed for 'user_all'@'%'
删除一个带 '允许登录的地址' 的用户
mysql> drop user 'user_all' @10.0.90.48;
Query OK, 0 rows affected (0.00 sec)


  • 修改/设置用户密码


修改当前账户密码
set password = password('密码');
修改指定账户密码
set password for '用户名' [@'允许登录的地址'] = password('密码');
set password for '用户名'[@'允许登录的地址'] = password('密码'); // @ 符号挨着用户名也是没问题的

password()、md5() 是加密函数:

mysql> select password('123'), md5('123');
+-------------------------------------------+----------------------------------+
| password('123')                           | md5('123')                       |
+-------------------------------------------+----------------------------------+
| *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 | 202cb962ac59075b964b07152d234b70 |
+-------------------------------------------+----------------------------------+


  • 授予用户权限


语法形式:
grant 权限1, 权限2, ... on *.*(或 数据库名.* 或 数据库名.表名) to '用户名'[@'允许登录的地址'];
说明:
1、'权限1' 其实就是权限名,是一个"特定词",比如: delete, insert, update, select, create 等等。
  ① 其中,还可以用 "all",表示 "所有权限" (除了 grant 权限)。
2、on 后表示对 "什么东西" 来设定该权限,意思是对什么库的什么表,其中:
  ① *.*:表示所有库的所有表,
  ② 数据库名.*:表示该指定数据库的所有表;
  ③ 数据库名.表名:表示该指定数据库的该指定表;
示例:
grant all on test.* to user_all;
grant select, insert on test.* to user_all;
grant select, insert on test.* to user_all@'%';

我在 root 账号中对 user_all 账号赋予 test 数据库的 select 权限:

mysql> grant select on test.* to user_all;
Query OK, 0 rows affected (0.01 sec)

然后去 user_all 账号中去查看一下,注意如果看不到表可以退出重新登录数据库,会发现比之前查看的时候多了一个 test 数据库:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| test               |
+--------------------+

你限制只有查询权限,其他删除、更新权限都是没有的,使用这方面的命令会报错,除非给与权限。

常用权限:



  • 取消用户授权


语法形式:
revoke 权限1, 权限2, ... on *.*(或 数据库名.* 或 数据库名.表名) from '用户名'[@'允许登录的地址'];
说明:
与授予用户权限一致。
示例:
与授予用户权限一致。

我在 root 账号中对 user_all 账号移除 test 数据库的 select 权限:

mysql> revoke select on test.* from user_all;
Query OK, 0 rows affected (0.00 sec)

然后去 user_all 账号中去查看一下,注意显示有问题可以退出重新登录数据库,会发现已经不能访问 test 数据库了:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
+--------------------+


相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
关系型数据库 MySQL Docker
docker环境下mysql镜像启动后权限更改问题的解决
在Docker环境下运行MySQL容器时,权限问题是一个常见的困扰。通过正确设置目录和文件的权限,可以确保MySQL容器顺利启动并正常运行。本文提供了多种解决方案,包括在主机上设置正确的权限、使用Dockerfile和Docker Compose进行配置、在容器启动后手动更改权限以及使用 `init`脚本自动更改权限。根据实际情况选择合适的方法,可以有效解决MySQL容器启动后的权限问题。希望本文对您在Docker环境下运行MySQL容器有所帮助。
197 1
|
1月前
|
SQL NoSQL 关系型数据库
|
2月前
|
存储 关系型数据库 MySQL
基于案例分析 MySQL 权限认证中的具体优先原则
【10月更文挑战第26天】本文通过具体案例分析了MySQL权限认证中的优先原则,包括全局权限、数据库级别权限和表级别权限的设置与优先级。全局权限优先于数据库级别权限,后者又优先于表级别权限。在权限冲突时,更严格的权限将被优先执行,确保数据库的安全性与资源合理分配。
|
3月前
|
安全 关系型数据库 MySQL
Navicat工具设置MySQL权限的操作指南
通过上述步骤,您可以使用Navicat有效地为MySQL数据库设置和管理用户权限,确保数据库的安全性和高效管理。这个过程简化了数据库权限管理,使其既直观又易于操作。
467 4
|
4月前
|
关系型数据库 MySQL
MySQL 添加用户,分配权限
MySQL 添加用户,分配权限
79 0
|
6月前
|
安全 关系型数据库 MySQL
深入解析MySQL 8中的角色与用户管理
深入解析MySQL 8中的角色与用户管理
322 3
|
5月前
|
关系型数据库 MySQL Linux
Linux部署实战前言,MySQL在CentOS安装【单机软件】,MySQL的安装需要root权限,yum install mysql,systemctl enable mysqld开机自启的意思
Linux部署实战前言,MySQL在CentOS安装【单机软件】,MySQL的安装需要root权限,yum install mysql,systemctl enable mysqld开机自启的意思
|
6月前
|
NoSQL 关系型数据库 Serverless
Serverless 应用引擎产品使用合集之连接RDS、Redis等数据库时,是否需要通过安全组来控制访问权限
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
6月前
|
安全 关系型数据库 MySQL
MySQL权限管理大揭秘:用户、组、权限解析
MySQL权限管理大揭秘:用户、组、权限解析
788 0
|
6月前
|
关系型数据库 MySQL Linux
Linux下mysql添加用户并授权数据库权限
Linux下mysql添加用户并授权数据库权限
547 0