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

MySQL用户管理(15)

文章目录

  • 前言
  • 一、用户
    • 用户信息
    • 创建用户
    • 修改密码
    • 删除用户
  • 二、数据库的权限
    • MySQL中的权限
    • 给用户授权
    • 回收权限
  • 总结


前言

  其实与 Linux 操作系统类似,MySQL 中也有 超级用户普通用户 之分

  如果一个用户只需要访问 MySQL 中的某一个数据库,甚至数据库中的某一个表,那么可以为其创建一个普通用户,并为该用户赋予对应的权限,而不让该用户看到数据库中的其他数据,防止该用户对其他数据进行误操作,由此就有了我们该篇的讲解,即 用户管理!


一、用户

用户信息

  MySQL 当中默认有一个名为 mysql 的数据库

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述
部分的字段说明:

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

  我们还可以只选择部分字段进行展示:
在这里插入图片描述
  同时我们注意到因为 user 表中的主键是复合主键,由表中的 user 列和 host 列共同承担,所以 MySQL 中可以存在同名的用户,只要这些同名用户对应的登录主机不同即可

在这里插入图片描述

创建用户

  创建用户的 SQL 如下:

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

  比如下面创建一个用户名为 HQ ,并且可以从任意地方登录的用户

在这里插入图片描述
  创建用户成功后,该用户的相关信息也就被写入到刚才的 user 表中了

在这里插入图片描述
  这时便可以用新创建的普通用户来连接 MySQL 服务器了

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

在这里插入图片描述

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

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

修改密码

  你可能会看到有些博主说 set password = password(‘你的密码’); 事实上在 MySQL 5.7.6 及更高版本中,PASSWORD() 函数已被弃用,且修改密码的语法发生了变化,所以这种方法失效了,有用的如下:

  用户自己和超级用户修改自己的密码

ALTER USER '用户名'@'主机名' IDENTIFIED BY '你的密码';
FLUSH PRIVILEGES; #刷新权限一下

删除用户

  删除用户的SQL语句如下:

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

在这里插入图片描述
  删除用户时如果不指明待用户的登录地址,则默认删除的是登录地址为 % 的用户。

二、数据库的权限

MySQL中的权限

权限列名上下文
CREATECreate_priv数据库、表或索引
DROPDrop_priv数据库或表
GRANT OPTIONGrant_priv数据库、表或保存的程序
REFERENCESReferences_priv数据库或表
ALTERAlter_priv
DELETEDelete_priv
INDEXIndex_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如下:

-- 对于 MySQL8.0及以上版本,GRANT 语句 不能直接结合 IDENTIFIED BY 子句 来创建用户或修改密码。这两个操作需要分开执行。(问就是尝试过,绷)
-- 1. 创建用户(或修改密码)
CREATE USER IF NOT EXISTS 'HQ'@'%' IDENTIFIED BY '@Lhq123456';
-- 如果用户已存在,改用:
-- ALTER USER 'HQ'@'%' IDENTIFIED BY '@Lhq123456';-- 2. 授予权限
GRANT SELECT ON Test.* TO 'HQ'@'%';
FLUSH PRIVILEGES;
  • ‘用户名’@‘登录地址’:表示给哪一个用户授权。
  • 库名.对象名:表示要授予用户哪个数据库下的哪个对象的权限。
  • 权限列表:表示要授予用户何种权限,多个权限之间用逗号隔开。
  • IDENTIFIED BY ‘密码’:创建用户的同时也要设置一个密码

  比如下面创建用户 HQ ,并授予用户在 Test 数据库下所有对象的 select 权限
在这里插入图片描述

  授权后通过 show grants for ‘用户名’@‘登录地址’ 命令,可以查看该用户现有的权限

在这里插入图片描述

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

  进入 Test 数据库后,也能查看其中的所有表

在这里插入图片描述
  但该用户目前只能查看表中的信息,而不能对表中的数据进行修改,因为我们只授予了该用户 select 权限。如下

在这里插入图片描述

  下面将 Test 数据库下的所有权限都授予该用户

在这里插入图片描述

  这时该用户才可以对表中的数据进行其他操作

在这里插入图片描述

回收权限

  回收权限的SQL如下:

REVOKE 权限列表 ON 库名.对象名 FROM '用户名'@'登录地址';
  • 回收权限的语法与授权一样,只不过将 to 关键字改为了 from

比如下面将用户 HQ 在 Test 数据库下的所有权限回收

在这里插入图片描述

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


总结

  怎么样,这篇也不难吧,但是更令人振奋的是马上就要迎来 MySQL 的尾声了,至少我接下来很大一段时间不会再更新 MySQL 专栏了

http://www.dtcms.com/a/294047.html

相关文章:

  • AI安全“面壁计划”:我们如何对抗算法时代的“智子”封锁?
  • 漏洞生命周期管理:从发现到防护的全流程方案
  • Linux权限机制:设计哲学、实现原理与安全实践
  • 如何加固Endpoint Central服务器的安全?(下)
  • adb: CreateProcessW failed: 系统找不到指定的文件
  • RAG项目实战:LangChain 0.3集成 Milvus 2.5向量数据库,构建大模型智能应用
  • uniapp+vue3小程序点击保存图片、保存二维码
  • 盘古信息PCB解决方案:重构PCB制造基因,开启智造新纪元
  • 半导体 CIM(计算机集成制造)系统
  • 三大论坛联动,2025合成生物学盛会助力生物制造高质量发展
  • 设备仿真合集 | 工业制造数字孪生协同管控
  • Docker详解及实战
  • 【轨物洞见】光伏逆变器数据:分布式电站价值回归的“第一块多米诺骨牌”
  • mac测试ollama llamaindex
  • Log4j CVE-2021-44228 漏洞复现详细教程
  • fastdds:默认qos入门
  • LeetCode|Day23|326. 3 的幂|Python刷题笔记
  • 牛客刷题 -- 二叉树遍历
  • 百度大涨,AIGC视频生成模型蒸汽机将会给百度带来什么?
  • 【Windows命令手册】Windows中的常用命令,并与 Linux 做比较
  • BiLLM:突破大语言模型后训练量化的极限
  • Linux Debian操作系统、Deepin深度操作系统手动分区方案参考
  • 利用红黑树封装实现map,set
  • Keil MDK5 介绍与安装教程
  • Python Day22 - 复习日
  • 【bug】Jetson Orin NX apt更换国内源
  • #Linux权限管理:从“Permission denied“到系统安全大师
  • 如何使用 minio 完成OceanBase社区版的归档和备份
  • [Bug | Cursor] import error: No module named ‘data‘
  • SpringCloud sentinel服务熔断 服务降级