【MySQL用户管理】

目录:

  • 前言
  • 用户管理
    • 创建用户
    • 删除用户
    • 修改用户密码
      • 修改用户密码安全检测设置
    • 用户权限
      • 添加权限
      • 回收权限
  • 总结

前言

剑指offer:一年又13天


用户管理

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |  
| performance_schema |
| sys                |
+--------------------+
10 rows in set (0.00 sec)mysql> use mysql;  -- 选择数据库 mysql
Database changedmysql> show tables;
+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              |
| db                        |
| engine_cost               |. . .. . .
| user                      |  -- 找到 user表,MySQL所有注册用户的信息都保存在这里
+---------------------------+
31 rows in set (0.00 sec)mysql> select * from user\G   -- 默认有三行记录
*************************** 1. row ***************************Host: localhost  -- 登录主机:本地主机(只能从本地主机登录)User: root       -- 用户名Select_priv: Y          -- 各种操作权限,这个是查询权限Insert_priv: Y Update_priv: YDelete_priv: Y. . .. . .Event_priv: YTrigger_priv: Y
Create_tablespace_priv: Y. . .. . .plugin: mysql_native_passwordauthentication_string: *0EE49BEF4A01530FDD960C259978FF754862A592 -- 加密后的登录密码password_expired: Npassword_last_changed: 2023-11-19 15:32:07password_lifetime: NULLaccount_locked: N
*************************** 2. row ***************************Host: localhostUser: mysql.session. . .. . .
*************************** 3. row ***************************Host: localhostUser: mysql.sys. . .. . .

创建用户

语法:

CREATE USER 'user_name'@'登录位置' IDENTIFIED BY 'user_password';

示例:

mysql> create user 'zhangsan'@'localhost' identified by '123456';  -- 密码这里报错就往下看:安全设置那里
Query OK, 0 rows affected (0.00 sec)mysql> select * from user\G
*************************** 4. row ***************************Host: localhost  -- 登录主机User: zhangsan   -- 用户名Select_priv: N  -- 新用户操作权限都是:NInsert_priv: NUpdate_priv: N. . .. . .authentication_string: *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 -- 密码password_expired: Npassword_last_changed: 2023-12-11 20:10:04password_lifetime: NULLaccount_locked: N
4 rows in set (0.00 sec)

注意:
上方登录位置设置为本地主机是无法远端登录的。
想要远端登录登录位置可以设置为指定的IP或者是 ‘%’, '%'表示任意主机登录。

mysql> create user 'zhangsan'@'%' identified by '123456'; -- 登录位置设置为 % 表示可以从任一主机登录,实际使用是绝对不用这样

删除用户

语法:

DROP USER 'user_name'@'登录位置';

示例:

mysql> select host,  user from user;
+-----------+---------------+
| host      | user          |
+-----------+---------------+
| localhost | mysql.session |
| localhost | mysql.sys     |
| localhost | root          |
| localhost | zhangsan      |
+-----------+---------------+
4 rows in set (0.00 sec)mysql> drop user 'zhangsan'@'localhost';
Query OK, 0 rows affected (0.00 sec)mysql> select host,  user from user;
+-----------+---------------+
| host      | user          |
+-----------+---------------+
| localhost | mysql.session |
| localhost | mysql.sys     |
| localhost | root          |
+-----------+---------------+
3 rows in set (0.00 sec)

修改用户密码

语法

-- 默认修改自己的密码
SET PASSWORD = PASSWORD('新密码');
-- 可以修改自己的,或者root修改其他人的
SET PASSWORD FOR 'user_name'@'登录位置' = PASSWORD('新密码');

示例:

mysql> set password for 'zhangsan'@'localhost' = password('123abc');
Query OK, 0 rows affected, 1 warning (0.00 sec)

修改用户密码安全检测设置

MySQL对密码的要求:数字、大小写字母和特殊字符都要有,如果不符合要求就不能使用。

mysql> create user 'test'@'localhost' identified by '123456';  -- 只有数字
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements -- 密码不符合要求mysql> create user 'test'@'localhost' identified by '123AAA'; -- 只有数字和大写字母
ERROR 1819 (HY000): Your password does not satisfy the current policy requirementsmysql> create user 'test'@'localhost' identified by '123Aaa@@@';  -- 数字、大小写字母和特殊字符都有
Query OK, 0 rows affected (0.00 sec)

这样的检查策略是为了保证账户的安全,但同时也会让我们的密码过于复杂,因此为了简化密码,我们可以修改密码配置,让MySQL的密码检查减弱一点。

首先查看一下MySQL中全局密码配置,我们这次只看两个配置:密码长度和密码策略

mysql> show variables like 'validate_password%';
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password_check_user_name    | OFF    |
| validate_password_dictionary_file    |        | 
| validate_password_length             | 8      | -- 密码长度 *
| validate_password_mixed_case_count   | 1      | -- 大小写字母最少个数
| validate_password_number_count       | 1      | -- 数字最少个数
| validate_password_policy             | MEDIUM | -- 密码策略 *
| validate_password_special_char_count | 1      | -- 特殊字符最少个数
+--------------------------------------+--------+
7 rows in set (0.00 sec)

只需要修改两个全局配置:

  • 修改密码策略为 LOW
  • 修改最小密码长度为6
mysql> set global validate_password_policy=low; -- 降低检查策略
Query OK, 0 rows affected (0.00 sec)mysql> set global validate_password_length=6;  -- 减少最小密码长度
Query OK, 0 rows affected (0.00 sec)mysql> show variables like 'validate_password%';
+--------------------------------------+-------+
| Variable_name                        | Value |
+--------------------------------------+-------+
| validate_password_check_user_name    | OFF   |
| validate_password_dictionary_file    |       |
| validate_password_length             | 6     |
| validate_password_mixed_case_count   | 1     |
| validate_password_number_count       | 1     |
| validate_password_policy             | LOW   |
| validate_password_special_char_count | 1     |
+--------------------------------------+-------+
7 rows in set (0.00 sec)

设置成功后就可以使用 '123456’这样的密码了。

mysql> create user 'test'@'localhost' identified by '123456';
Query OK, 0 rows affected (0.00 sec)

补充:

  • 密码策略有三个等级:
  • 0/LOW:只验证长度;
  • 1/MEDIUM:验证长度、数字、大小写、特殊字符;
  • 2/STRONG:验证长度、数字、大小写、特殊字符、字典文件;

用户权限

新创建的用户是没有任何权限的,需要 root 给他分配各种操作权限,比如:谁谁谁 可以在 数据库什么什么 中 查看 哪张表,

添加权限

语法:

GRANT 权限列表 ON 库名.表名 TO 'user_name'@'登录位置';
权限列表有两种写法:
直接写各种各样的操作 :select, drop, insert 等
可以使用 :all 表示添加所有权限数据库与表名这里有三种写法:
*.*       : 所有数据库中的所有表
db1.*     : db1数据库中的所有表
db1.stu   : db1数据库中的stu表

示例1:

-- 登录 zhangsan 账号
mysql> show databases; -- 什么都查不到
+--------------------+
| Database           |
+--------------------+
| information_schema |
+--------------------+
1 row in set (0.01 sec)
-- 登录 root 账号-- 赋予张三 对数据库db3所有表的查看 和 在db3中创建表的权限
mysql> grant select, create on db3.* to 'zhangsan'@'localhost';
Query OK, 0 rows affected (0.00 sec)
-- zhangsan端
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| db3                | -- 可以看到 db3
+--------------------+
2 rows in set (0.00 sec)mysql> use db3;
Database changedmysql> show tables;
+---------------+
| Tables_in_db3 |
+---------------+
| EMP           |
| user          |
+---------------+
2 rows in set (0.00 sec)mysql> select empid, ename, job from EMP limit 3; -- 查看表信息
+--------+--------+----------+
| empid  | ename  | job      |
+--------+--------+----------+
| 100002 | NRUZlg | SALESMAN |
| 100003 | DSDpOb | SALESMAN |
| 100004 | TbynUK | SALESMAN |
+--------+--------+----------+
3 rows in set (0.00 sec)mysql> create table tb(id int);  -- 建表
Query OK, 0 rows affected (0.03 sec)mysql> drop table tb;  -- 删除表
ERROR 1142 (42000): DROP command denied to user 'zhangsan'@'localhost' for table 'tb' -- 权限拒绝
-- root端
mysql> grant drop on db3.* to 'zhangsan'@'localhost'; -- 赋予删除表权限
Query OK, 0 rows affected (0.00 sec)mysql> show grants for 'zhangsan'@'localhost'; -- 查看一下 'zhangsan'@'localhost'所有权限
+-----------------------------------------------------------------+
| Grants for zhangsan@localhost                                   |
+-----------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'zhangsan'@'localhost'                    |
| GRANT SELECT, CREATE, DROP ON `db3`.* TO 'zhangsan'@'localhost' | -- 查看、创建、删除
+-----------------------------------------------------------------+
2 rows in set (0.00 sec)
-- zhangsan端
mysql> drop table tb;
Query OK, 0 rows affected (0.02 sec)

示例2:

-- root端
mysql> grant all on db3.* to 'zhangsan'@'localhost'; -- 赋予张三对db3数据库的所有操作权限
Query OK, 0 rows affected (0.00 sec)mysql> show grants for 'zhangsan'@'localhost';
+-----------------------------------------------------------+
| Grants for zhangsan@localhost                             |
+-----------------------------------------------------------+
| GRANT USAGE ON *.* TO 'zhangsan'@'localhost'              |
| GRANT ALL PRIVILEGES ON `db3`.* TO 'zhangsan'@'localhost' |
+-----------------------------------------------------------+
2 rows in set (0.00 sec)

回收权限

语法:

REVOKE 权限列表 ON 库名.表名 FROM 'user_name'@'登录位置';

示例1:

-- root端
mysql> show grants for 'zhangsan'@'localhost';
+-----------------------------------------------------------------+
| Grants for zhangsan@localhost                                   |
+-----------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'zhangsan'@'localhost'                    |
| GRANT SELECT, CREATE, DROP ON `db3`.* TO 'zhangsan'@'localhost' |
+-----------------------------------------------------------------+
2 rows in set (0.00 sec)mysql> revoke drop on db3.* from 'zhangsan'@'localhost'; -- 删除drop权限
Query OK, 0 rows affected (0.00 sec)mysql> show grants for 'zhangsan'@'localhost';
+-----------------------------------------------------------+
| Grants for zhangsan@localhost                             |
+-----------------------------------------------------------+
| GRANT USAGE ON *.* TO 'zhangsan'@'localhost'              |
| GRANT SELECT, CREATE ON `db3`.* TO 'zhangsan'@'localhost' |
+-----------------------------------------------------------+
2 rows in set (0.00 sec)
-- zhangsan端
mysql> drop table EMP;
ERROR 1142 (42000): DROP command denied to user 'zhangsan'@'localhost' for table 'EMP' -- 权限拒绝

示例2:

-- root端
mysql> revoke all on db3.* from 'zhangsan'@'localhost';
Query OK, 0 rows affected (0.00 sec)mysql> show grants for 'zhangsan'@'localhost';
+----------------------------------------------+
| Grants for zhangsan@localhost                |
+----------------------------------------------+
| GRANT USAGE ON *.* TO 'zhangsan'@'localhost' |  -- 没有任何权限了
+----------------------------------------------+
1 row in set (0.00 sec)


总结

有一点需要注意:'user_name'@'登录位置'一般当做一个整体来使用。



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/329614.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

R304S 指纹识别模块功能实现示例

1 基本通信流程 1.1 UART 命令包的处理过程 1.2 UART 数据包的发送过程 UART 传输数据包前,首先要接收到传输数据包的指令包,做好传输准备后发送成功应答包,最后才开始传输数据包。数据包主要包括:包头、设备地址、包标识、包长…

Java:结束本机端口被占用进程

前言 在实际开发当中我们,往往在idea中将某个服务的启动给关闭了,但是在nacos的某个服务上,我们却可以看到本地别名服务还是在上面挂载着本地再次启动的时候就提示【端口被占用】,今天就说一下如何解决这个问题 操作 点击即可预…

嵌入式(七)看门狗 | 看门狗工作模式 寄存器 时钟系统

文章目录 1 看门狗原理2 功能3 看门狗工作模式4 看门狗控制寄存器5 时钟系统 及其寄存器 1 看门狗原理 看门狗(Watch Dog Timer, WDT)是一种专门用于监测单片机程序运行状态的芯片组件。其实质是一个计数器,一般给看门狗初始一个比较大的数,…

【数据结构—排序—交换排序】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一、排序的概念及其运用 1、排序的概念 2、排序运用 3、 常见的排序算法 二、交换排序 1、冒泡排序 1.1算法讲解 1.2冒泡排序的实现: 1.2.1头文件的…

超声波模块的驱动(STM32、51单片机等)

一、前言 本文旨在分享单片机对超声波模块的驱动,测量距离和显示 二、超声波的驱动 1、超声波模块 2、模块性能 (1)TCT40-16T/R1 压电陶瓷超声传感器(通用型) 3、接口定义 Vcc、 Trig(控制端&#xff09…

thinkphp学习02-目录结构、控制器、路由、配置文件

目录结构 www WEB部署目录(或者子目录) ├─app 应用目录 │ ├─controller 控制器目录 │ ├─model 模型目录 │ ├─ ... 更多类库目录 │ │ │ ├─common.php 公共函数文件 │ └─event.ph…

聊天Demo

文章目录 参考链接使用前端界面消息窗口平滑滚动至底部vue使用watch监听vuex中的变量变化 参考链接 vue.js实现带表情评论功能前后端实现(仿B站评论) vue.js实现带表情评论仿bilibili(滚动加载效果) vue.js支持表情输入 vue.js表…

【AI视野·今日Sound 声学论文速览 第四十期】Wed, 3 Jan 2024

AI视野今日CS.Sound 声学论文速览 Wed, 3 Jan 2024 Totally 4 papers 👉上期速览✈更多精彩请移步主页 Daily Sound Papers Auffusion: Leveraging the Power of Diffusion and Large Language Models for Text-to-Audio Generation Authors Jinlong Xue, Yayue De…

学习笔记——C++一维数组

1,一维数组的定义方式 三种定义方式 1,数据类型 数组名[ 数组长度 ]; 2,数据类型 数组名[ 数组长度 ]{值1,值2,值3 ……};//未说明的元素用0填补 3,数据类型 数组名[ ]{值1&…

短视频矩阵系统源码--源头技术独立自研框架开发(正规代发布)

一、批量剪辑(采用php语言,数学建模) 短视频合成批量剪辑的算法主要有以下几种: 1. 帧间插值算法:通过对多个视频的帧进行插帧处理,从而合成一段平滑的短视频。 2. 特征提取算法:提取多个视频…

链表

目录 单链表 双链表 单链表 题目如下&#xff1a;模拟一个单链表&#xff0c;实现插入删除操作 解题代码 #include <iostream>using namespace std;const int N 100010;// head 表示头结点的下标 // e[i] 表示节点i的值 // ne[i] 表示节点i的next指针是多少 // idx …

【JaveWeb教程】(7)Web前端基础:Vue组件库Element介绍与快速入门程序编写并运行 示例

目录 Element介绍快速入门示例 Element介绍 不知道同学们还否记得我们之前讲解的前端开发模式MVVM&#xff0c;我们之前学习的vue是侧重于VM开发的&#xff0c;主要用于数据绑定到视图的&#xff0c;那么接下来我们学习的ElementUI就是一款侧重于V开发的前端框架&#xff0c;主…