# 用户与权限管理

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. rel分支合并进入dev分支有冲突怎么处理?

    rel分支合并进入dev分支有冲突怎么处理? 切换到本地rel 拉取远端rel 切换本地dev 拉去远端dev git merge rel 会出现冲突 解决后 推送到远端就可以

  2. Go 泛型发展史与基本介绍

    Go 泛型发展史与基本介绍 Go 1.18版本增加了对泛型的支持,泛型也是自 Go 语言开源以来所做的最大改变. 目录 Go 泛型发展史与基本介绍 一.为什么要加入泛型? 二.什么是泛型 三.泛型的来 ...

  3. 深入浅出Java多线程(三):线程与线程组

    「引言」 大家好,我是你们的老伙计秀才!今天带来的是[深入浅出Java多线程]系列的第三篇内容:线程与线程组.大家觉得有用请点赞,喜欢请关注!秀才在此谢过大家了!!! 在现代软件开发中,多线程编程已成 ...

  4. MyISAM存储引擎的表级锁

    MyISAM存储引擎的表级锁 如果了解过文件锁的用法,那理解数据库锁就简单了.锁其实就协调多个进程或线程并发时,处理访问同一个资源的机制.在项目开发中,表锁是MySQL中作用范围较大的一种锁,它锁定的 ...

  5. CF765F Souvenirs 题解

    题目链接:CF 或者 洛谷 想了很久,然后想起做过的一道题:秃子酋长,一开始以为差不多,结果写着写着就发现不对劲了.最后写出了个神仙回滚莫队解法,感觉很妙,记录下. 进入神仙分析时刻 首先,我们来考虑 ...

  6. CH59X/CH58X/CH57X sleep模式下串口唤醒收发数据

    整体程序逻辑: 下方的具体程序及使用是基于CH592进行的 SLEEP模式睡眠唤醒是由协议栈管理的,还在睡眠时,无法接收到数据. 已经通过使能HAL_SLEEP开启睡眠.如果需要在睡眠时实时接收串口传 ...

  7. 20.5 函数转发器/已知的DLL/DLL重定向/模块的基地址重定位--《Windows核心编程》

    一.函数转发器 函数转发器是D L L的输出节(导出段)中的一个项目,用于将对一个函数的调用转至另一个 DLL中的另一个函数. 可以在DLL中使用函数转发器: #pragma comment(link ...

  8. kafka-Kafka3.4版本创建topic出现zookeeper is not a recognized option

    问题描述:在linux云服务器上搭建了一套kafka3.0集群,然后按照以前的创建topic指令: ./kafka-topics.sh --zookeeper hadoop01:2181,hadoop ...

  9. 【调试】pstore原理和使用方法总结

    什么是pstore pstore最初是用于系统发生oops或panic时,自动保存内核log buffer中的日志.不过在当前内核版本中,其已经支持了更多的功能,如保存console日志.ftrace ...

  10. 2023年多校联训NOIP层测试2

    2023年多校联训NOIP层测试2 爆零了 T1 HDU 4786 Fibonacci Tree \(0pts\) @wangyunbiao: 不可以,总司令 我:不,可以,总司令 @wangyunb ...