当前位置: 首页 > news >正文

MySQL用户管理

目录

  • 一、用户
    • 用户信息
    • 创建用户
    • 删除用户
    • 从远端登录
    • 修改用户密码
  • 二、数据库的权限
    • 给用户授权
    • 回收权限


与Linux操作系统类似,MySQL中也有超级用户和普通用户之分。,如果一个用户只需要访问MySQL中的某一个数据库,甚至数据库中的某一个表,那么可以为其创建一个普通用户,并为该用户赋予对应的权限,而不让该用户看到数据库中的其他数据,防止该用户对其他数据进行误操作。

一、用户

用户信息

MySQL当中默认有一个叫mysql的数据库。

在这里插入图片描述

进入mysql后查看该数据库中的表,可以看到其中有一个名为user的表。

在这里插入图片描述

查看user表中存储的就是MySQL中用户相关的信息。

在这里插入图片描述

部分字段说明:

  • user: 表示该用户的用户名。
    host: 表示该用户可以从哪个主机登录,localhost表示只能从本机登录,%表示可以从任意地方登录。
  • authentication_string: 表示该用户的密码经过password函数加密后的值。
  • xxx_priv: 表示该用户是否拥有对应权限。

在查看用户信息时为了避免刷屏,可以只选择其中的部分字段进行显示。

在这里插入图片描述

MySQL中可以存在同名的用户,只要这些同名用户对应的登录主机不同即可,因为user表中的主键是复合主键,由表中的user列和host列共同承担。

在这里插入图片描述

创建用户

创建用户的SQL语句

CREATE USER '用户名'@'登录主机' IDENTIFIED BY '密码';

比如下面创建一个用户名为john,从本地主机登录的用户,并查看该表。

在这里插入图片描述

这时便可以用新创建的普通用户来连接MySQL服务器了。

在这里插入图片描述

由于mysql是个网络服务也可以从其它地方登录,若windows下也安装了MySQL,创建的这个用户以windows命令窗口进行远程登录。

在这里插入图片描述
可见不允许登录,因为常见用户时设置的是本地登录。

删除用户

删除用户的SQL语句。

DROP USER '用户名'@'登录地址';

顺便演示将该用户从user表中删除,在重新设置为可以从任意主机登录。
在这里插入图片描述

创建用户

在这里插入图片描述

说明:

  • 删除用户时如果不指明用户的登录地址,则默认删除的是登录地址为%的用户。

从远端登录

由于我们创建的这个用户可以从任意地方登录,因此如果你在Windows下也安装了MySQL,那么就可以在Windows的cmd窗口进行远程登录。
在这里插入图片描述
说明:

  • 创建用户的SQL当中包含用户的密码,因此该SQL不会被历史记录下来,所以不能通过上下键进行追溯。
  • MySQL本身的认证级别比较高,因此创建用户时设置的密码不能太简单,否则会出现报错,这时你可以选择将密码设置复杂一些,也可以对密码相关的设置进行调整。

修改用户密码

MySQL 5.7.6+ 版本:

ALTER USER 'john'@'%' IDENTIFIED BY '123abc..';SET PASSWORD FOR 'john'@'%' = '123abc..';

MySQL 5.7.5及以下版本:

SET PASSWORD FOR 'john'@'%' = PASSWORD('123abc..');

用户自己修改自己的密码

用户可以自己通过调用password函数,将新密码加密后的值设置到自己password当中。
在这里插入图片描述

超级用户修改任意用户的密码

超级用户可以通过调用password函数,将新密码加密后的值设置到指定用户的password当中。
在这里插入图片描述

通过show命令查看全局变量,可以看到密码设置相关的要求。
在这里插入图片描述

需要安装好插件。

对于MySQL 5.7及以上版本:

INSTALL PLUGIN validate_password SONAME 'validate_password.so';
(在Windows上是validate_password.dll)

对于MySQL 8.0及以上版本:

INSTALL COMPONENT 'file://component_validate_password';

二、数据库的权限

MySQL数据库提供的权限如下:

权限列名上下文
CREATECreate_priv数据库、表或索引
DROPDrop_priv数据库或表
GRANTOPTION Grant_priv数据库、表或保存的程序
REFERENCESReferences_priv数据库或表
ALTERAlter_priv
DELETEDelete_priv
INDEX Index_priv
SELECTSelect_priv
UPDATEUpdate_priv
CREATE VIEWCreate_view_priv视图
SHOW VIEWShow_view_priv视图
ALTER ROUTINEAlter_routine_priv保存的程序
CREATE ROUTINECreate_routine_priv保存的程序
EXECUTEExecute_priv保存的程序
FILEFile_priv服务器主机上的文件访问
CREATE TEMPORARY TABLESCreate_tmp_table_priv服务器管理
LOCK TABLESLock_tables_priv服务器管理
CREATE USERCreate_user_priv服务器管理
PROCESSProcess_priv服务器管理
RELOADReload_priv服务器管理
REPLICATION CLIENTRepl_client_priv服务器管理
REPLICATION SLAVERepl_slave_priv服务器管理
SHOW DATABASESShow_db_priv服务器管理
SHUTDOWNShutdown_priv服务器管理
SUPERSuper_priv服务器管理

新创建的用户没有任何权限,因此创建用户后需要给用户授权。

给用户授权

给用户授权的SQL语句。

GRANT 权限列表 ON 库名.对象名 TO '用户名'@'登录地址' [IDENTIFIED BY '密码'];

说明一下:

  • ‘用户名’@‘登录地址’:表示给哪一个用户授权。
  • 库名.对象名:表示要授予用户哪个数据库下的哪个对象的权限。
  • 权限列表:表示要授予用户何种权限,多个权限之间用逗号隔开。
  • IDENTIFIED BY '密码’可选:如果用户存在,则在授予权限的同时修改该用户的密码,如果用户不存在,则创建该用户。

为演示创建一个数据库和user表。
在这里插入图片描述

比如下面创建用户john,并授予用户在share_db数据库下所有对象的select权限。

在这里插入图片描述

授权后通过show grants for '用户名'@'登录地址’命令,可以查看该用户现有的权限。
在这里插入图片描述

说明:

  • 创建用户后该用户默认会有USAGE权限,该权限只能用于数据库登录,不能执行任何操作。
  • *.*表示所有数据库的所有对象,库名.*表示某个数据库的所有对象(表、视图、存储过程等)。

此时john用户查看数据库时,就能查看到share_db数据库了。

在这里插入图片描述
说明:

  • 创建用户后该用户默认只能看到information_schema数据库和performance_schema数据库,该数据库中保存的是MySQL服务器所维护的所有其他数据库的信息。

进入share_db数据库后,也能查看其中的所有表,这里只创建了一个。
在这里插入图片描述

但该用户目前只能查看表中的信息,不能对表中的数据进行修改,因为只给授予了该用户select权限,现在还没有对该表进行插入内容。

在这里插入图片描述

DESC 命令的权限要求
DESC/DESCRIBE 命令实际上只需要以下两种权限之一即可使用:

  • SELECT 权限:拥有表的 SELECT 权限
  • SHOW VIEW 权限:这是更基础的元数据查看权限

如下将share_db数据库下的所有权限都授予该用户。
在这里插入图片描述

这时该用户就可以对表中的数据进行其他操作。
在这里插入图片描述

回收权限

回收权限的SQL语句。

REVOKE 权限列表 ON 库名.对象名 FROM '用户名'@'登录地址';

说明:

  • 回收权限的语法与授权一样,只将to关键字改为了from。

例如下面将john用户在user_table数据库下的所有权限回收。

在这里插入图片描述
说明:

  • 回收用户在某一数据库下的权限后,在该用户下一次进入该数据库时才会起作用。
  • 如果回收权限时该用户正在使用对应数据库,那么回收权限后该用户仍然拥有对应的权限。

相关文章:

  • 解锁c++模板:从入门到精通
  • 二叉树三大遍历-精髓(Java)
  • Python 对象引用、可变性和垃圾 回收(标识、相等性和别名)
  • 酒店等场所客房沐浴用品批发要点:满足多样需求,把握关键环节
  • 精讲C++四大核心特性:内联函数加速原理、auto智能推导、范围for循环与空指针进阶
  • numpy模块综合使用
  • 进程间关系与守护进程
  • BGP基础配置实验
  • 机械物理:水力发电站工作原理是什么?
  • EdgeOne Pages MCP 入门教程
  • LVGL简易计算器实战
  • 在 Java 中使用 JSON Pointer 高效提取 JSON 数据
  • C++入门篇——类和对象(下)
  • YashanDB(崖山数据库)V23.4 LTS 正式发布
  • 学习黑客5 分钟深入浅出理解Windows Editions
  • ESG在2050,我们听到了另一种声音 | 活动回顾
  • JavaSE核心知识点02面向对象编程02-07(枚举)
  • 深入理解 JavaScript 中的 FileReader API:从理论到实践
  • Python基础语法(中)
  • 多模态大语言模型arxiv论文略读(六十八)
  • 福州千余公共道路泊车位装“智能地锁”续:运营公司被责令改正并罚款
  • 茅台1935今年动销达到预期,暂无赴港上市计划!茅台业绩会回应多个热点
  • 江西吉水通报一男子拒服兵役:不得考公,两年内经商、升学等受限
  • 科普|“小”耳洞也会引发“大”疙瘩,如何治疗和预防?
  • 外交部:中方期待印巴巩固和延续停火势头,避免冲突再起
  • 人民时评:莫让“假俗乱”讲解侵蚀“文博热”