MySQL User表入门教程

一、User表概述

MySQL的user表位于mysql系统数据库中,是MySQL权限系统的核心,用于存储用户账户信息、认证方式和全局权限。通过操作此表,可实现用户创建、权限分配及安全审计。

二、User表核心字段解析

字段名作用示例值
Host用户允许连接的主机(IP/域名/通配符)localhost%192.168.1.%
User用户名rootapp_user
authentication_string加密后的密码(MySQL 8.0+)*6BB4...(哈希值)
Select_priv是否允许SELECT操作(Y/N)Y
Insert_priv是否允许INSERT操作N
Create_priv是否允许创建数据库/表Y
Grant_priv是否允许授权其他用户N

三、基础操作指南

1. 查看User表信息

-- 切换至mysql数据库
USE mysql;-- 查看表结构
DESC user;-- 查询所有用户
SELECT Host, User FROM mysql.user;-- 查看特定用户权限
SHOW GRANTS FOR 'root'@'localhost';

2. 创建用户

-- 基础语法
CREATE USER 'username'@'host' IDENTIFIED BY 'password';-- 示例1:创建本地用户(仅限本机登录)
CREATE USER 'local_admin'@'localhost' IDENTIFIED BY 'SecurePass123!';-- 示例2:创建远程用户(允许任意IP登录)
CREATE USER 'remote_user'@'%' IDENTIFIED WITH mysql_native_password BY 'RemotePass456!';

3. 授权与权限回收

-- 授予全局权限(所有数据库)
GRANT ALL PRIVILEGES ON *.* TO 'admin_user'@'%';-- 授予特定数据库权限
GRANT SELECT, INSERT ON sales_db.* TO 'report_user'@'192.168.1.%';-- 回收权限
REVOKE DELETE ON sales_db.* FROM 'report_user'@'192.168.1.%';-- 刷新权限(操作后必须执行)
FLUSH PRIVILEGES;

4. 删除用户

-- 安全删除用户
DROP USER IF EXISTS 'old_user'@'localhost';-- 批量删除(示例)
DROP USER 'user1'@'%', 'user2'@'192.168.1.100';

5. 修改密码

-- 方法1:SET PASSWORD(推荐)
SET PASSWORD FOR 'app_user'@'%' = PASSWORD('NewSecurePass789!');-- 方法2:更新user表(需刷新权限)
UPDATE mysql.user SET authentication_string = PASSWORD('AnotherPass012!') 
WHERE User = 'legacy_user' AND Host = 'localhost';
FLUSH PRIVILEGES;

四、安全最佳实践

  1. 最小权限原则
    仅授予用户完成工作所需的最小权限(如SELECT/INSERT而非ALL PRIVILEGES)。

  2. 密码策略

    -- 查看当前密码策略
    SHOW VARIABLES LIKE 'validate_password%';-- 启用强密码校验(MySQL 8.0+)
    SET GLOBAL validate_password.policy = 'MEDIUM';
    
  3. 限制登录来源

    • 使用Host字段限制用户IP(如'user'@'192.168.1.100')。
    • 避免使用'%'作为主机名,除非必要。
  4. 定期审计

    -- 监控异常用户
    SELECT User, Host FROM mysql.user 
    WHERE Host NOT IN ('localhost', '127.0.0.1') 
    AND User NOT LIKE 'mysql.%';
    

五、常见问题解决

  1. 错误1045:Access denied

    • 确认用户存在:SELECT User, Host FROM mysql.user WHERE User = 'username';
    • 检查密码是否正确:ALTER USER 'username'@'host' IDENTIFIED BY 'new_password';
  2. 权限未生效

    • 执行FLUSH PRIVILEGES;后重试。
  3. 用户被锁定

    -- 解锁用户
    ALTER USER 'username'@'host' ACCOUNT UNLOCK;
    

六、进阶管理技巧

  1. 角色(Role)管理(MySQL 8.0+)

    -- 创建角色
    CREATE ROLE 'dev_role';-- 授予角色权限
    GRANT SELECT, INSERT ON app_db.* TO 'dev_role';-- 将角色赋予用户
    GRANT 'dev_role' TO 'dev_user'@'%';
    
  2. 动态权限调整

    -- 实时调整全局权限(无需刷新)
    SET GLOBAL max_connections = 200;
    

通过掌握以上内容,您可高效管理MySQL用户及权限,保障数据库安全与性能。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

iOS 编译 cpp 代码生成 .a 库备忘

第一步:下载ios-cmake ios-cmake 第二步:复制ios-cmake到cpp项目目录下,打开终端输入: cmake -B build/ios_arm64 \-DCMAKE_TOOLCHAIN_FILE$(pwd)/ios-cmake/ios.toolchain.cmake \-DPLATFORMOS64 \-DCMAKE_BUILD_TYPERelease …

C++11-下

10. lambda表达式 10.1 C98中的一个例子 在C98中&#xff0c;如果想要对一个数据集合中的元素进行排序&#xff0c;可以使用std::sort方法。 #include <algorithm> #include <functional> int main() { int array[] {4,1,8,5,3,7,0,9,2,6}; // 默认按照小于比较…

教程 | 用Parasoft SOAtest实现高效CI回归测试

在现代软件开发实践中&#xff0c;持续集成&#xff08;CI&#xff09;已成为提升交付效率、优化代码质量的重要基石。然而&#xff0c;随着功能快速叠加与代码迭代加快&#xff0c;回归缺陷的风险也在同步增长。为了保障每次代码提交不会破坏既有功能&#xff0c;功能回归测试…

Leetcode-138. 复制带随机指针的链表

我们用哈希表来解决这个问题 首先创建一个哈希表&#xff0c;再遍历原链表&#xff0c;遍历的同时再不断创建新节点 我们将原节点作为key&#xff0c;新节点作为value放入哈希表中"""# Definition for a Node.class Node:def __init__(self, x: int, next: Node…

【MATLAB 2025a】安装离线帮助文档

文章目录一、在 MATLAB 设置中安装二、从math works 网站下载ISO&#xff1a;适用于给无法联网的电脑安装或自定义路径三、startup文件说明四、重要说明&#x1f9e9;&#x1f9e9;【Matlab】最新版2025a发布&#xff0c;深色模式、Copilot编程助手上线&#xff01; 版本&#…

JDK21虚拟线程和 Golang1.24协程的比较

文章目录前言1、技术原理与实现机制1.1、JDK21虚拟线程本质&#xff1a;调度机制&#xff1a;内存管理&#xff1a;编程模型&#xff1a;1.2. Go 1.24协程GMP调度模型&#xff1a;抢占式调度&#xff1a;内存优化&#xff1a;编程模型&#xff1a;2、性能对比分析2.1、CPU密集型…

聊天室全栈开发-保姆级教程(Node.js+Websocket+Redis+HTML+CSS)

前言 最近在学习websocket全双工通信&#xff0c;想要做一个联机小游戏&#xff0c;做游戏之前先做一个聊天室练练手。 跟着本篇博客&#xff0c;可以从0搭建一个属于你自己的聊天室。 准备阶段 什么人适合学习本篇文章&#xff1f; 答&#xff1a;前端开发者&#xff0c;有一…

Android Coil3视频封面抽取封面帧存Disk缓存,Kotlin

Android Coil3视频封面抽取封面帧存Disk缓存&#xff0c;Kotlin <uses-permission android:name"android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name"android.permission.READ_EXTERNAL_STORAGE" /><uses-permis…

Python网络爬虫(一) - 爬取静态网页

文章目录一、静态网页概述1. 静态网页介绍2. 静态网页爬取技术Requests介绍二、安装 Requests 库三、发送请求并获取响应1. 发送 GET 请求1.1 get() 方法介绍1.2 get() 方法签名介绍1.3 get() 方法参数介绍1.4 示例&#xff1a;发送get请求2. 发送 POST 请求2.1 post() 方法介绍…

企业级WEB应用服务器TOMCAT

企业级WEB应用服务器TOMCAT 一、WEB技术 1.1 HTTP协议和B/S结构 操作系统有进程子系统&#xff0c;使用多进程就可以充分利用硬件资源。进程中可以多个线程&#xff0c;每一个线程可以被CPU调度执行&#xff0c;这样就可以让程序并行的执行。这样一台主机就可以作为一个服务器为…

Linux 系统中,如何处理信号以避免竞态条件并确保程序稳定性?

在 Unix/Linux 系统中&#xff0c;处理信号时避免竞态条件&#xff08;Race Conditions&#xff09;并确保程序稳定性需要遵循关键原则和技巧。以下是核心方法&#xff1a; 1. 保持信号处理函数&#xff08;Signal Handler&#xff09;简单 仅设置标志位&#xff1a;在信号处理…

【Matplotlib】中文显示问题

中文显示问题本地Mac上作图&#xff0c;可以方便地实现中文字体显示。比如在Jupter中&#xff0c;通过&#xff1a;方法一&#xff1a;不下载字体库即可实现中文显示 (MAC)plt.rcParams[font.family][Arial Unicode MS]方法二&#xff1a;下载指定字体训即可实现中文显示plt.rc…