# 用户与权限管理

MySQL用户可以分为普通用户root用户, root用户是超级管理员,拥有所有权限,包括创建用户、删除用户和修改用户的密码等管理权限;普通用户只拥有被授予的各种权限。

MySQL提供了许多语句用来管理用户账号, 这些语句可以用来管理包括登录和退出MySQL服务器、创建用户、删除用户、密码管理和权限管理等内容。

MySQL数据库的安全性需要通过账户管理来保证。

1. 用户管理

1.1 登录MySQL服务器

启动MySQL服务后,可以通过mysql命令来登录MySQL服务器,命令如下:

mysql –h hostname|hostIP –P port –u username –p DatabaseName –e "SQL语句"

下面详细介绍命令中的参数:

  • -h参数 后面接主机名或者主机IP,hostname为主机,hostIP为主机IP。
  • -P参数 后面接MySQL服务的端口,通过该参数连接到指定的端口。MySQL服务的默认端口是3306, 不使用该参数时自动连接到3306端口,port为连接的端口号。
  • -u参数 后面接用户名,username为用户名。
  • -p参数 会提示输入密码。
  • DatabaseName参数 指明登录到哪一个数据库中。如果没有该参数,就会直接登录到MySQL数据库 中,然后可以使用USE命令来选择数据库。
  • -e参数 后面可以直接加SQL语句。登录MySQL服务器以后即可执行这个SQL语句,然后退出MySQL 服务器。

举例:

mysql -uroot -p -hlocalhost -P3306 mysql -e "select host,user from user"

1.2 创建用户

在MySQL数据库中,官方推荐用CREATE USER语句创建新用户。MySQL8版本移除了PASSWORD加密方法,

因此不再推荐使用INSERT语句直接操作MySQL中的user表来增加用户。

使用CREATE USER语句来创建新用户时,必须拥有CREATE USER权限.每添加一个用户,CREATE USER语句会在

MySQL.usr表中添加一条新记录,但是新创建的账户没有任何权限。如果添加的账户已经存在,CREATE USERi语句就会反回一个错误·

CREATE USER语句的基本语法形式如下:

CREATE USER 用户名 [IDENTIFIED BY '密码'][,用户名 [IDENTIFIED BY '密码']];
  • 用户名参数表示新建用户的账户,由 用户(User) 和 主机名(Host) 构成;
  • “[ ]”表示可选,也就是说,可以指定用户登录时需要密码验证,也可以不指定密码验证,这样用户 可以直接登录。不过,不指定密码的方式不安全,不推荐使用。如果指定密码值,这里需要使用 IDENTIFIED BY指定明文密码值。
  • CREATE USER语句可以同时创建多个用户。

举例:

CREATE USER zhang3 IDENTIFIED BY '123123'; # 默认host是 %

CREATE USER 'kangshifu'@'localhost' IDENTIFIED BY '123456';

1.3 修改用户

修改用户名:

# 改user表
UPDATE mysql.user SET USER='li4' WHERE USER='wang5'; FLUSH PRIVILEGES;

1.4 删除用户

在MYSQL数据库中,可以使用DROP USER语句来删除普通用户,也可以直接在mysql.user表中删除用户。

方式1:使用DROP方式删除(推荐)

使用DROP USER语句来删除用户时,必须用于DROP USER权限。DROP USER语句的基本语法形式如下:

DROP USER user[,user]; #可以删除多个

其中,user参数是需要删除的用户,由用户的用户名(User)和主机名(Host)组成。DROP USER语句可以同时删除多个用户,各用户之间用逗号隔开。

举例:

DROP USER li4 ; # 默认删除host为%的用户

DROP USER 'kangshifu'@'localhost';

方式2:使用DELETE方式删除

可以使用DELETE语句直接将用户的信息从mysql.user表中删除,但它须拥有对mysql.user*的DELETEüßN,

DELETE语句的基本语法形式如下·

DELETE FROM mysql.user WHERE Host=’hostname’ AND User=’username’;

Host字段和User字段是user表的联合主键,因此两个字段的值才能唯一确定一条记录

执行完DELETE命令后要使用FLUSH命令来使用户生效, 命令如下:

FLUSH PRIVILEGES;

举例:

DELETE FROM mysql.user WHERE Host='localhost' AND User='Emily';
FLUSH PRIVILEGES;

注意:不推荐通过 DELETE FROM USER u WHERE USER='li4' 进行删除,系统会有残留信息保留。而drop user命令会删除用户以及对应的权限,执行命令后你会发现mysql.user表和mysql.db表 的相应记录都消失了。

1.5 设置当前用户密码

适用root用户修改自己的密码,以及普通用户登录后修改自己的码。

root用户拥有很高的权限,因此必须保证root用户的密码安全。root用户可以通过多种方式来修改密码,使用

ALTER USER 修改用户密码是 MySQL官方推荐的方式。此外,也可以通过SET语句修改密码。由于MySQL8中已

移除了PASSWORD()函数,因此不再使用UPDATE语句直接操作用户表修改密码。

旧的写法如下 :

# 修改当前用户的密码:(MySQL5.7测试有效)
SET PASSWORD = PASSWORD('123456');

这里介绍 推荐的写法 :

  1. 使用ALTER USER命令来修改当前用户密码 用户可以使用ALTER命令来修改自身密码,如下语句代表修 改当前登录用户的密码。基本语法如下:

    ALTER USER USER() IDENTIFIED BY 'new_password';
  2. 使用SET语句来修改当前用户密码 使用root用户登录MySQL后,可以使用SET语句来修改密码,具体 SQL语句如下:

    SET PASSWORD='new_password';

该语句会自动将密码加密后再赋给当前用户。

1.6 修改其他用户密码

root用户不仅可以修改自己的密码,还可以修改其它普通用户的密码。root 用户登录MySQL服务器后,可以通过ALTER语句

SET语句来修改普通用户的密码。由于PASSWORD()函数已移除,因此使用UPDATE直接操作用户表的方式已不再使用。

  1. 使用ALTER语句来修改普通用户的密码 可以使用ALTER USER语句来修改普通用户的密码。基本语法形 式如下:

    ALTER USER user [IDENTIFIED BY '新密码'] [,user[IDENTIFIED BY '新密码']];
  2. 使用SET命令来修改普通用户的密码 使用root用户登录到MySQL服务器后,可以使用SET语句来修改普 通用户的密码。SET语句的代码如下:

    SET PASSWORD FOR 'username'@'hostname'='new_password';

    其中username参数是普通用户的用户名;hostname参数是普通用户的主机名,new_password是新密码。

  3. 使用UPDATE语句修改普通用户的密码(不推荐)

    使用root用户登录MySQL服务器后,可以使用UPDATE语句修改MySQL数据库的user表的password字段,从而修改普通用户的密码。使用UPDATA语句修改用户码的语法如下:

    UPDATE MySQL.user SET authentication_string=PASSWORD("123456")
    WHERE User = "username" AND Host = "hostname";

举例:

#修改某个用户的密码.
#MySQL5.5
UPDATE mysql.user SET PASSWORD = PASSWORD('123456') WHERE USER='1i4'; #MySQL5.7(不适用于MySQL8)
UPDATE mysql.user SET authentication_string = PASSWORD('123456') WHERE USER='li4'; #所有通过user表的修改,必须用该命令才能生效:否则,需重启服务:
FLUSH PRIVILEGES;

PASSWORD()函数用来加密用户密码, 执行UPDATE后,需要执行FLUSH PRIVILEGES语句重新加载用户权

限。

1.7 MySQL8密码管理(了解)

MySQL中记录使用过的历史密码,目前包含如下密码管理功能:

(1)密码过期:要求定期修改密码。

(2)密码重用限制:不允许使用旧密码。

(3)密码强度评估:要求使高强度的密码。

MYSQL密码管理功能只针对使用基于MySQL授权插件的账号,这些插件有mysql_native_password、

sha256_password和caching_sha2_password.

1.7.1 密码过期策略

  • 在MySQL中,数据库管理员可以 手动设置 账号密码过期,也可以建立一个 自动 密码过期策略。
  • 过期策略可以是 全局的 ,也可以为 每个账号 设置单独的过期策略。

手动设置立马过期

手动设置账号密码过期,可使用如下语句

ALTER USER user PASSWORD EXPIRE;

示例:将用户kangshifu账号的密码设置为过期,SQL语句如下

ALTER USER 'kangshifu'@'localhost' PASSWORD EXPIRE;

该语句将用户kangshifu的密码设置为过期,kangshifu用户仍然可以登录进入数据库,但无法进行查询, 密码过期后,只有重新设置了新密码,才能正常使用


手动设置指定时间过期方式1:全局

如果密码使用的时间大于允许的时间,服务器会自动设置为过期,不需要手动设置。

MySQL使用default_password_lifetime系统变量建立全局密码过期策略

  • 它的默认值是0,表示禁用自动密码过期。
  • 它允许的值是正整数N,表示允许的密码生存期。密码必须每隔N天进行修改。

两种实现方式分别如图所示.

方式①:使用SQL语句更改该变量的值并持久化

SET PERSIST default_password_lifetime = 180; # 建立全局策略,设置密码每隔180天过期

方式②:配置文件my.cnf中进行维护

[mysqld]
default_password_lifetime=180 #建立全局策略,设置密码每隔180天过期

手动设置指定时间过期方式2:单独设置

每个账号既可延用全局密码过期策略,也可单独设置策略。在 CREATE USER 和 ALTER USER 语句上加 入 PASSWORD EXPIRE 选项可实现单独设置策略。下面是一些语句示例。

#设置kangshifu账号密码每90天过期:
CREATE USER 'kangshifu'@'localhost' PASSWORD EXPIRE INTERVAL 90 DAY;
ALTER USER 'kangshifu'@'localhost' PASSWORD EXPIRE INTERVAL 90 DAY; #设置密码永不过期:
CREATE USER 'kangshifu'@'localhost' PASSWORD EXPIRE NEVER;
ALTER USER 'kangshifu'@'localhost' PASSWORD EXPIRE NEVER; #延用全局密码过期策略:
CREATE USER 'kangshifu'@'localhost' PASSWORD EXPIRE DEFAULT;
ALTER USER 'kangshifu'@'localhost' PASSWORD EXPIRE DEFAULT;

1.7.2 密码重用策略

MySQL限制使用已用过的密码. 重用限制策略基于密码更改的数量使用的时间.重用策略可以是全局的,也可

以为每个账号设置单独的策略。

  • 账号的历史密码包含过去该账号所使用的密码。MySQL基于以下规则来限制密码重用:

    • 如果账号的密码限制基于密码更改的数量, 那么新密码不能从最近限制的密码数量中选择。例如,如果密

      码更改的最小值为3,那么新密码不能与最近3个密码中任何一个相同。
    • 如果账号密码限制基于时间,那么新码不能从规定时司内例如,如果蕊码重用周期为60天爿仫

      新密码不能从最近60天内使用的密码中选择。
  • MySQL使用password_historypassword_reuse_intervalh系统变量设置密码重用策略

    • password_history:规定密码重用的数量:
    • password_reuse_interval:规定密码重用的周期

这两个值可在服务器的配置文件中进行维护, 也可在运行期间使用SQL语句修改该变量的值并持久化。

手动设置密码重用方式1:全局

  • 方式①:使用SQL

    SET PERSIST password_history = 6; #设置不能选择最近使用过的6个密码
    SET PERSIST password_reuse_interval = 365; #设置不能选择最近一年内的密码

  • 方式②:my.cnf配置文件

    [mysqld]
    password_history=6
    password_reuse_interval=365

手动设置密码重用方式2:单独设置

每个账号可以延用全局密码重用策略,也可单独设置策略。这两个选项可以单独使用,也可以结合在一起使用。下面是一些语句示例。

#不能使用最近5个密码:
CREATE USER 'kangshifu'@'localhost' PASSWORD HISTORY 5;
ALTER USER 'kangshifu'@'localhost' PASSWORD HISTORY 5; #不能使用最近365天内的密码:
CREATE USER 'kangshifu'@'localhost' PASSWORD REUSE INTERVAL 365 DAY;
ALTER USER 'kangshifu'@'localhost' PASSWORD REUSE INTERVAL 365 DAY; #既不能使用最近5个密码,也不能使用365天内的密码
CREATE USER 'kangshifu'@'localhost'
PASSWORD HISTORY 5
PASSWORD REUSE INTERVAL 365 DAY; ALTER USER 'kangshifu'@'localhost'
PASSWORD HISTORY 5
PASSWORD REUSE INTERVAL 365 DAY;
#延用全局策略
CREATE USER 'kangshifu'@'localhost'
PASSWORD HISTORY DEFAULT;
PASSWORD REUSE INTERVAL DEFAULT; ALTER USER 'kangshifu'@'localhost';
PASSWORD HISTORY DEFAULT;
PASSWORD REUSE INTERVAL DEFAULT;

四: Mysql用户管理的更多相关文章

  1. MySQL(十六)之MySQL用户管理

    一.MySQL用户管理概述 MySQL是一个多用户的数据库,MYSQL的用户可以分为两大类: 超级管理员用户(root),拥有全部权限 普通用户,由root创建,普通用户只拥有root所分配的权限 二 ...

  2. MySQL用户管理及SQL语句详解

    1.1 MySQL用户管理 1.1.1 用户的定义 用户名+主机域 mysql> select user,host,password from mysql.user; +--------+--- ...

  3. 【转】MySQL用户管理及SQL语句详解

    [转]MySQL用户管理及SQL语句详解 1.1 MySQL用户管理 1.1.1 用户的定义 用户名+主机域 mysql> select user,host,password from mysq ...

  4. 库增删该查,表增删该查,记录增删该查,表与表关系(多对多,多对一,一对一),mysql用户管理

    库增删该查 增加库 create database db1 create database db1 charset="gbk 查看库 show databases 查看所有库 show cr ...

  5. MySQL用户管理、常用sql语句、MySQL数据库备份恢复

    1.MySQL用户管理 给远程登陆用户授权:grant all on *.* to 'user1'@'127.0.0.1' identified by '123456' (这里的127.0.0.1是指 ...

  6. MySQL 用户管理与权限管理

    MySQL 用户管理与权限管理 -- 操作环境mysql> show variables like 'version';  +---------------+--------+| Variabl ...

  7. Python 42 mysql用户管理 、pymysql模块

    一:mysql用户管理 什么是mysql用户管理 mysql是一个tcp服务器,应用于操作服务器上的文件数据,接收用户端发送的指令,接收指令时需要考虑到安全问题, ATM购物车中的用户认证和mysql ...

  8. 使用IntelliJ IDEA开发SpringMVC网站(四)用户管理

    原文:使用IntelliJ IDEA开发SpringMVC网站(四)用户管理 摘要 通过对用户表的管理,更加深入地讲解SpringMVC的操作. 目录[-] 文章已针对IDEA 15做了一定的更新,部 ...

  9. Mysql用户管理及权限分配

    早上到公司,在服务器上Mysql的数据库里新建了个database,然后本地的系统里用原来连接Mysql账号admin连这个数据库.结果报错了,大概是这样子的: Access denied for u ...

  10. MySQL用户管理及权限设置

    mysql 用户管理和权限设置 用户管理 mysql>use mysql; 查看 mysql> select host,user,password from user ; 创建 mysql ...

随机推荐

  1. 【代码分享】使用 avx2 + 查表法,优化凯撒加密

    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 接上一篇:[代码分享]使用 avx512 + 查表法,优化 ...

  2. electron-builder

    electron-builder打包工具 首先,确保你的项目中已经安装了 electron-builder.可以在项目根目录下运行以下命令来安装它: npm install electron-buil ...

  3. SpringBoot分布式任务中间件开发 附视频讲解 (手把手教你开发和使用中间件)

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 分布式任务DcsSchedule中间件,Github地址:https://github.com ...

  4. 基于SpringBoot应⽤的logback⽇志配置

    SpringBoot默认整合了logback-classic⽇志框架,我们需要对logback⽇志框架进⾏配置 以⾃定义⽇志输出格式.⽇志⽂件配置.⽇志⽂件保存策略等信息 <?xml versi ...

  5. 【C语言深度解剖】复数运算问题--【好题系列】学会这题,结构体没问题

    复数问题 今天博主给大家带来一道博主自己在学校做到的一个题目.这个题目可以很好的加深我们对C语言结构体的理解,在这里分享给大家.学懂这题,我们的C语言结构体,没问题了! 本篇建议收藏后食用!以免退出找 ...

  6. 从CPU100%高危故障到稳定在10%:一个月的优化之旅,成功上线!

    引言 经过三个月的开发,项目通过了所有测试并上线,然而,我们发现项目的首页几乎无法打开,后台一直发生超时错误,导致CPU过度负荷.在这次项目开发过程中,我制定了一份详细的技术优化方案.考虑到客户无法提 ...

  7. Spring Boot + MyBatis-Plus 实现 MySQL 主从复制动态数据源切换

    MySQL 主从复制是一种常见的数据库架构,它可以提高数据库的性能和可用性.动态数据源切换则可以根据业务需求,在不同场景下使用不同的数据源,比如在读多写少的场景下,可以通过切换到从库来分担主库的压力. ...

  8. 从零开始的react入门教程(四),了解常用的条件渲染、列表渲染与独一无二的key

    壹 ❀ 引 在从零开始的react入门教程(三),了解react事件与使用注意项一文中,我们了解了react中事件命名规则,绑定事件时对于this的处理,以及事件中可使用的e对象.那么这篇文章中我们来 ...

  9. NC22593 签到题

    题目链接 题目 题目描述 恭喜你找到了本场比赛的签到题! 为了让大家都有抽奖的机会,只需要复制粘贴以下代码(并且稍微填下空)即可 AC: (我超良心的) #include <algorithm& ...

  10. SATA学习笔记——Link Layer 加扰/解扰/CRC

    一.故事前传 我们之前说到Link layer的结构,link layer的作用大致可以包括以下几点: Frame flow control CRC的生成与检测 对数据与控制字符的Scrmable/D ...