初学MySQL必备SQL语句-MySQL账户管理

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 初学MySQL必备SQL语句-MySQL账户管理

本来这一篇应该放在安装之后说的,但是当时没想起来,直到昨天我安装软件需要用到数据库,我才想起来。今天赶紧补上,话不多说。开干!

MySQL账户管理

MySQL中的账户管理主要是对连接MySQL服务的账户做出管理,判断是否为合法账户。
如果合法,可根据相应权限访问指定的数据库。

1.MySQL中的权限表

  • 可以通过以下几条语句来查看权限表
mysql> show databases;
mysql> use mysql;
mysql> show tables;
#具体内容为查看都有哪些数据库,进入mysql数据库,查看都有哪些数据表。
  • 以下列举几个与用户和权限相关的表
user表:存储连接MySQL服务的账户信息,全局有效
db表:存储用户对某个具体数据库的操作权限
tables_priv:存储用户对某个数据表的操作权限
columns_priv:存储用户真数据表中某列的操作权限
procs_priv表:存储用户对存储过程和函数的操作权限
password_history:存储用户密码历史更改记录

2.创建普通用户

2.1.使用CREATE USER语句创建

注意:创建用户时,当前登录的用户需要有相应的权限
  • 创建一个名为张四的MySQL用户,主机名为localhost
mysql> create user 'zhangsi'@'localhost';
Query OK, 0 rows affected (0.05 sec)
  • 查看刚创建的用户信息
mysql> select
    -> host,user,authentication_string
    -> from mysql.user
    -> where user = 'zhangsi';
+-----------+---------+-----------------------+
| host      | user    | authentication_string |
+-----------+---------+-----------------------+
| localhost | zhangsi |                       |
+-----------+---------+-----------------------+
1 row in set (0.00 sec)
注:以上举例只为演示创建用户过程,没有设置密码,没有权限
  • 支持创建用户在某个IP段内可连接MySQL数据库
mysql> create user 'lisan'@'192.168.10.%';
  • 当想让所有人都可以连接MySQL数据库,语句如下(生产中不要这样)
mysql> create user 'wangliu';
  • 创建MySQL用户时,指定密码
mysql> create user 'yyang'@'localhost' identified by '123123';
Query OK, 0 rows affected (0.02 sec)
当然,有密码时查看用户信息的时候看到的密码是一串密文
  • MySQL支持使用密文作为密码。这个这个这个。。。
mysql> select host,user,authentication_string from mysql.user where user = 'yyang';
+-----------+-------+------------------------------------------------------------------------+
| host      | user  | authentication_string                                                  |
+-----------+-------+------------------------------------------------------------------------+
| localhost | yyang | $A$005$CojF+TUd84E)/K~sJr8lv.a1Yyxottw28XsZc2gUkMa4NyPmEG/uoovIxM/ |
+-----------+-------+------------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> create user 'yang'@'192.168.10.%' identified by '$A$005$CojF+TUd84E)/K~sJr8lv.a1Yyxottw28XsZc2gUkMa4NyPmEG/uoovIxM/';
Query OK, 0 rows affected (0.01 sec)
#看明白没,就是先查看yyang用户的密文密码,
#然后创建yang用户时使用密文密码,
#当然当使用 yang账户登录MySQL时输入的密码还是‘123123’
  • 创建用户指定插件认证方式
mysql> create user 'zhangsan'@'localhost'
    -> identified with
    -> mysql_native_password by '123123';
Query OK, 0 rows affected (0.01 sec)

2.2.使用GRANT语句创建用户

注意:MySQL8.0版本不再支持GRANT语句一条命令既创建用户又完成授权
所以下面只简单列举其他版本可以使用的一条例子,详细内容就不在这里写了。
文章最后一部分会对此做出说明。
  • 创建一个名为hehe的用户,并赋予所有表查的权限
mysql> grant select on *.* to 'hehe'@'localhost' identified by '123123';
# 其他的使用方法也是围绕这个语句,有兴趣的可以自己找找资料

3.为用户授权

授权使用grant语句,类似与2.2节内容

3.1.权限的层次

  • 全局授权,作用与MySQL下所有数据库
GRANT ALL ON *.*
  • 数据库级授权,作用与具体某个库
GRANT ALL ON 库名.*
  • 数据表级别授权,作用域某个库下具体某个表
GRANT ALL ON 库名.表名
  • 字段级别授权,作用于库下某个表中特定的字段
GRANT SELECT(列名称) ON 库名.表名
#以上语句为授予某库中某表的某列查看权限
  • 子程序级别,作用于存储过程和函数
权限包括:GRANT ROUTINE;ALTER ROUTINE;EXECUTE;GRANT

3.2.使用grant语句为用户授权

  • 授予yyang用户所有数据库执行权限,只能从本地登录
mysql> grant all privileges on *.* to yyang@localhost;
Query OK, 0 rows affected (0.01 sec)
  • 查看yyang用户所拥有权限
mysql> select * from mysql.user where user = 'yyang' and host = 'localhost' \G
# 内容太多,就不贴过来了,发现拥有了除grant外的大部分权限
  • 为yyang用户赋予grant权限
mysql> grant all privileges on *.* to yyang@localhost with grant option;
Query OK, 0 rows affected (0.03 sec)
  • 权限一般越小越好,通常我们会用以下几个常用权限
INSERT DELETE UPDATE SELECT
#增、删、改、查
  • 数据库管理权限
SUPER PROCESS FILE
#注:以上权限不能指定某个数据库,不然会报错
#尽量不要为普通用户授权以上权限

4.查看用户权限

可以使用SHOW GRANT FOR语句查看用户权限

4.1.使用SHOW GRANT FOR语句查看用户权限

  • 例,查看yyang用户权限
mysql> show grants for yyang@localhost \G
*************************** 1. row ***************************
Grants for yyang@localhost: GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, 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 ON *.* TO `yyang`@`localhost` WITH GRANT OPTION
。。。 。。。
# 后边内容就不贴了

4.2.通过查询mysql.user表查看用户权限

mysql> select * from mysql.user where user = 'yyang' and host = 'localhost' \G
*************************** 1. row ***************************
                    Host: localhost
                    User: yyang
             Select_priv: Y
             Insert_priv: Y
             Update_priv: Y
             Delete_priv: Y
      。。。 。。。

5.修改用户权限

此部分内容与标题4内容类似

6.撤销用户权限

使用REVOKE语句撤销用户权限
  • 例:撤销yyang用户对所有数据库及表的删除权限
mysql> revoke delete on *.* from 'yyang'@'localhost';
Query OK, 0 rows affected (0.01 sec)
  • REVOKE语句不能撤销用户的USAGE权限,即使语句执行成功,依然无效。

7.修改用户密码

支持使用mysqladmin命令修改密码,也可以使用SET PASSWORD语句修改密码,还有其他方式就不说了
  • 使用mysqladmin修改密码
[root@centos7 ~]# mysqladmin -u yyang -h localhost -p password "yyang"
Enter password: 输入原密码
[root@centos7 ~]# mysql -uyyang -pyyang
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 396
Server version: 8.0.23 MySQL Community Server - GPL
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
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> 
  • 使用SET PASSWORD语句修改密码
mysql> set password for 'yyang'@'localhost' = password('123123');
#注:这条命令在8版本中使用失败,网上说是版本太新的原因
#是不是这个原因我也不清楚,有兴趣可以自己找找
  • 可以使用下列这条修改
mysql> alter user 'yyang'@'localhost' identified by '123123';
Query OK, 0 rows affected (0.01 sec)


8.忘记root密码怎么办?

  • 修改配置文件
  • 编辑my.conf文件,在[mysqld]下添加以下配置
skip-grant-tables=1
  • 重启MySQL数据库
systemctl restart mysqld
  • 登录数据库
[root@centos7 ~]# mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 8.0.23 MySQL Community Server - GPL
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
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> 
#注:密码那里直接回车
  • 修改root密码。
#5.7以下修改密码
mysql> update mysql.user set password=password('123456') where user='root' and host='localhost';
#8.0版本修改密码
#首先重新重新加载授权表
mysql> flush privileges;
Query OK, 0 rows affected (0.02 sec)
#然后修改root密码
mysql> alter user 'root'@'localhost' identified by '123456';
Query OK, 0 rows affected (0.01 sec)
  • 退出MySQL,删除my.cnf文件中添加的配置,重启
vim /etc/my.cnf
systemctl restart mysqld
  • 使用新密码登录
[root@centos7 ~]# mysql -uroot -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 8
Server version: 8.0.23 MySQL Community Server - GPL
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
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> 

9.删除用户

9.1.使用DROP USER语句删除用户

  • 首先查看都有哪些用户
mysql> select user,host from mysql.user;
+------------------+--------------+
| user             | host         |
+------------------+--------------+
| yang             | 192.168.10.% |
| zabbix           | 192.168.10.% |
| mysql.infoschema | localhost    |
| mysql.session    | localhost    |
| mysql.sys        | localhost    |
| root             | localhost    |
| yyang            | localhost    |
| zhangsan         | localhost    |
| zhangsi          | localhost    |
+------------------+--------------+
9 rows in set (0.00 sec)
  • 删除zhangsi用户
mysql> drop user 'zhangsi'@'localhost';
Query OK, 0 rows affected (0.02 sec)
  • 再次查看,发现zhangsi用户已删除
mysql> select user,host from mysql.user;
+------------------+--------------+
| user             | host         |
+------------------+--------------+
| yang             | 192.168.10.% |
| zabbix           | 192.168.10.% |
| mysql.infoschema | localhost    |
| mysql.session    | localhost    |
| mysql.sys        | localhost    |
| root             | localhost    |
| yyang            | localhost    |
| zhangsan         | localhost    |
+------------------+--------------+
8 rows in set (0.00 sec)

9.2.使用DELETE语句删除用户

mysql> delete from mysql.user where user = 'zhangsan' and host = 'localhost';
Query OK, 1 row affected (0.01 sec)

10.MySQL8.0中一些变化

10.1.创建用户与授权

  • 8.0中不能使用grant语句创建并授权用户
  • 只能是先create user创建,然后grant授权

10.2.认证插件更新

  • 8.0中默认身份插件为caching_sha2_password代替了之前的mysql_native_password
  • 可通过show variables like 'default_authentication%';查看

10.3.密码管理

  • password_hostory=n表示新密码不能和近n次使用的密码相同
  • password_reuse_interval=n按日期,表示新密码不能与n天内使用的密码相同
  • password_require_current=ON表示修改密码,需要提供当前密码
  • 查看密码重用策略
show variables like 'password%';

就到这吧,这篇不是一天写完的,有点多,所有中途可以有的地方显得比较乱。见谅~

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1月前
|
SQL 运维 关系型数据库
MySQL 运维 SQL 备忘
MySQL 运维 SQL 备忘录
47 1
|
1月前
|
SQL 存储 关系型数据库
SQL文件导入MySQL数据库的详细指南
数据库中的数据转移是一项常规任务,无论是在数据迁移过程中,还是在数据备份、还原场景中,导入导出SQL文件显得尤为重要。特别是在使用MySQL数据库时,如何将SQL文件导入数据库是一项基本技能。本文将详细介绍如何将SQL文件导入MySQL数据库,并提供一个清晰、完整的步骤指南。这篇文章的内容字数大约在
179 1
|
24天前
|
SQL 关系型数据库 MySQL
MySql5.6版本开启慢SQL功能-本次采用永久生效方式
MySql5.6版本开启慢SQL功能-本次采用永久生效方式
35 0
|
24天前
|
SQL 关系型数据库 MySQL
mysql编写sql脚本:要求表没有主键,但是想查询没有相同值的时候才进行插入
mysql编写sql脚本:要求表没有主键,但是想查询没有相同值的时候才进行插入
31 0
|
1月前
|
SQL 存储 关系型数据库
mysql 数据库空间统计sql
mysql 数据库空间统计sql
47 0
|
1月前
|
SQL 存储 关系型数据库
mysql SQL必知语法
本文详细介绍了MySQLSQL的基本语法,包括SELECT、FROM、WHERE、GROUPBY、HAVING、ORDERBY等关键字的使用,以及数据库操作如创建、删除表,数据类型,插入、查询、过滤、排序、连接和汇总数据的方法。通过学习这些内容,读者将能更好地管理和操
17 0
|
1月前
|
SQL 分布式计算 关系型数据库
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
87 0
|
2月前
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
|
4月前
|
SQL 存储 监控
SQL Server的并行实施如何优化?
【7月更文挑战第23天】SQL Server的并行实施如何优化?
115 13
|
4月前
|
SQL
解锁 SQL Server 2022的时间序列数据功能
【7月更文挑战第14天】要解锁SQL Server 2022的时间序列数据功能,可使用`generate_series`函数生成整数序列,例如:`SELECT value FROM generate_series(1, 10)。此外,`date_bucket`函数能按指定间隔(如周)对日期时间值分组,这些工具结合窗口函数和其他时间日期函数,能高效处理和分析时间序列数据。更多信息请参考官方文档和技术资料。