【MySQL用户管理】

news2024/9/20 6:26:42

目录:

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

前言

剑指offer:一年又13天


用户管理

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |  
| performance_schema |
| sys                |
+--------------------+
10 rows in set (0.00 sec)

mysql> use mysql;  -- 选择数据库 mysql
Database changed

mysql> 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: Y
           Delete_priv: Y
				. . .
				. . .
            Event_priv: Y
          Trigger_priv: Y
Create_tablespace_priv: Y
				. . .
				. . .
                plugin: mysql_native_password
 authentication_string: *0EE49BEF4A01530FDD960C259978FF754862A592 -- 加密后的登录密码
      password_expired: N
 password_last_changed: 2023-11-19 15:32:07
     password_lifetime: NULL
        account_locked: N
*************************** 2. row ***************************
                  Host: localhost
                  User: mysql.session
				. . .
				. . .
*************************** 3. row ***************************
                  Host: localhost
                  User: 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  -- 新用户操作权限都是:N
           Insert_priv: N
           Update_priv: N
  				. . .
				. . .
 authentication_string: *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 -- 密码
      password_expired: N
 password_last_changed: 2023-12-11 20:10:04
     password_lifetime: NULL
        account_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 requirements

mysql> 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 changed

mysql> 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.coloradmin.cn/o/1354712.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[Python进阶] Python处理txt文件:open

7.1 Python处理txt文件:open 在Python中,通过open函数可以打开一个文件,创建一个file对象,然后对该对象进行读写。 函数语法: open(name[, mode[, buffering]…]) 参数说明: name:文件名 mode&…

你真的知道2024程序员搞钱新姿势吗?

2023年已经过去,2024的序曲已经奏响!回顾2023,我们经历了降薪裁员的大趋势,身为程序员也有点惶惶不可终日,害怕会失去工作,害怕面对家人无奈的模样,害怕跟不上时代的步伐,沦为被大环…

Minitab 各版本安装指南

Minitab下载链接 https://pan.baidu.com/s/1PLqocknkoRGGI9lbV3e45A?pwd0531 1.鼠标右击【Minitab 21(64bit)】压缩包(win11及以上系统需先点击“显示更多选项”)选择【解压到 Minitab 21(64bit)】。 2.打开解压后的文件夹,鼠标右击【setu…

众和策略安全可靠:如何区分大盘股和小盘股?大盘股指数有哪些?

股票根据流转盘能够划分为大盘股、中盘股、小盘股这三大类,那么,怎么区别大盘股和小盘股?大盘股指数有哪些?下面众和策略为我们准备了相关内容,以供参考。 怎么区别大盘股和小盘股? 根据个股的市值来区别…

使用异构图学习破解推荐系统 - 第 1 部分

Lokesh Sharma – Medium 一、说明 所以,这是独家新闻:异质图拥有一个充满潜力的世界,而常规图却无法做到这一点。传统的同构图很难处理不同关系和边类型的复杂性。现在是大炮的时候了——先进的架构可以解决具有多种边缘和关系类型的数据集的…

Go后端开发 -- Go Modules

Go后端开发 – Go Modules 文章目录 Go后端开发 -- Go Modules一、什么是Go Modules?二、GOPATH的工作模式1.GOPATH模式2.GOPATH模式的弊端 三、Go Modules模式创建项目1.go mod命令2.go mod环境变量3.使用Go Modules初始化项目4.修改模块的版本依赖关系 四、Go Modules下impo…

快速实现前后端表单交互(minui)

(1)使用minui快速生成表单 (2)修改样式,将生成的html文件发送给后端 (3)前后端交互(后端如何处理不太清楚) 表单初始化:新增修改(包括查看&…

如何远程修改plc程序?

​在工业自动化领域中,PLC(可编程逻辑控制器)是不可或缺的一部分。然而,传统方式下修改PLC程序需要亲临现场,这不仅耗时,还增加了成本。那么有没有一种更加高效、便捷的方法呢?答案是肯定的&…

【REST2SQL】03 GO读取JSON文件

REST2SQL需要一些配置信息,用JSON文件保存,比如config.json 1 创建config.json配置文件 {"hostPort":"localhost:5217","connString":"oracle://blma:5217127.0.0.1:1521/CQYH","_oracle":"ora…

6591A便携式光伏组串测试仪

01 6591A便携式光伏组串测试仪 产品综述: 6591A主要用于1500V光伏组串的测试,能够方便、快速的测试1500V光伏组串在自然光照下的工作特性,可为太阳能电站设计、验收、维护提供测试保障,是电站建设单位、质检部门、生产厂家、科研…

Navicat 技术干货 | 聚合查询的介绍

基础 SQL 查询可以检索、插入、更新和删除记录,而聚合查询可通过提供求和、平均值或最大/最小值等的大型结果集,将数据库交互提升到一个新的水平。本文中,我们将探索聚合 SQL 查询的基础知识,并研究如何有效的利用他们来分析和汇总…

边坡安全监测预警系统——高效率

安装边坡安全监测预警系统的原因是多方面的,涉及到社会效益、经济效益和环境效益。随着国家基础设施建设的快速发展,边坡安全监测预警系统的需求越来越迫切。 边坡安全监测预警系统对于保障人民生命财产安全具有重要意义。在山区、丘陵地带,边…

牛客网面试题知识点记录-03

1.题目讲解重写后子类调用父类的方法总结:当子类重写了父类方法A,父类方法直接调用被重写的父类方法后,调用的是子类的重写的父类方法A。 class Test {public static void main(String[] args) {System.out.println(new B().getValue());}st…

安科瑞电化学储能电能管理系统解决方案——安科瑞 顾烊宇

1 概述 在我国新型电力系统中,新能源装机容量逐年提高,但是新能源比如光伏发电、风力发电是不稳定的能源,所以要维持电网稳定,促进新能源发电的消纳,储能将成为至关重要的一环,是分布式光伏、风电等新能源消…

Java中的异常如何处理?

在Java编程中,异常是一种在程序执行期间发生的意外情况。学会处理异常是编写健壮、可靠程序的关键之一。 为什么需要异常处理? 异常处理允许程序在发生错误时进行优雅而有序的处理,而不是导致程序崩溃。这有助于提高程序的可维护性和用户体…

Alibaba Cloud Linux镜像操作系统超详细测评!兼容CentOS

Alibaba Cloud Linux是基于龙蜥社区OpenAnolis龙蜥操作系统Anolis OS的阿里云发行版,针对阿里云服务器ECS做了大量深度优化,Alibaba Cloud Linux由阿里云官方免费提供长期支持和维护LTS,Alibaba Cloud Linux完全兼容CentOS/RHEL生态和操作方式…

Vue: 多个el-select不能重复选择相同属性

一、场景 1.需求&#xff1a; 用户可自由选择需要修改的对象并同时修改多个属性&#xff0c;需要校验修改对象不能重复选择&#xff0c;但是可供修改属性是固定的 2.目标效果&#xff1a; 二、实现 1.主要代码&#xff1a; <template><el-selectv-model"se…

k8s pod基础 1

发布和yaml文件的初步了解。 pod&#xff1a;是k8s中最小的资源管理组件。 pod也是最小化运行容器化的应用的资源管理对象。 pod是一个抽象的概念&#xff0c;可以理解为一个或者多个容器化应用的集合。 在一个pod当中运行一个容器是最常用的方式。 在一个pod当中可以同时…

深度思考,AI项目的人工智能到底引领的是什么?

项目深度思考&#xff0c;人工智能到底引领的是什么&#xff1f; 人工智能引领技术之舞&#xff1a;项目深度思考项目背景&#xff1a;人工智能的魔法时代技术选择的深度思考&#xff1a;AI大决战团队协作的深度思考&#xff1a;AI联盟大会用户体验的深度思考&#xff1a;AI之光…

鸿蒙HarmonyOs:为什么不支持热更新?

学习了一段时间的鸿蒙开发&#xff0c;发现鸿蒙开发还是比较简单的&#xff0c;今天突然心血来潮&#xff0c;研究了一下鸿蒙热更新&#xff0c;最终得出的结论是鸿蒙暂时不支持热更新。 鸿蒙app开发主要是利用的ArkTs语言&#xff0c;ArkTs又是基于TypeScript语言的&#xff0…