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

【重学 MySQL】九十八、MySQL用户管理全指南:创建、修改、删除

【重学 MySQL】九十八、MySQL用户管理全指南:创建、修改、删除

  • **1. 创建用户(CREATE USER)**
    • **基础语法**
    • **进阶选项**
    • **示例**
  • **2. 修改用户(ALTER USER / RENAME USER)**
    • **修改账户属性**
    • **重命名用户**
    • **密码管理**
  • **3. 删除用户(DROP USER)**
    • **基础语法**
    • **批量删除示例**
  • **4. mysql 命令结构解析**
    • **完整示例**
      • **示例1:查询数据库版本**
      • **示例2:远程查询用户列表**
      • **示例3:导出查询结果到文件**
    • **常见问题与解决方案**
      • **问题1:连接失败(ERROR 2003)**
      • **问题2:认证失败(ERROR 1045)**
      • **问题3:SQL语句执行错误**
    • **高级用法**
      • **批量执行多条SQL**
      • **处理特殊字符**
      • **静默模式(减少输出)**
    • **安全建议**

1. 创建用户(CREATE USER)

基础语法

CREATE USER 'username'@'host' IDENTIFIED BY 'password';
  • 参数说明
    • username:用户名(推荐小写,避免大小写敏感问题)。
    • host:允许访问的主机(localhost仅限本地,%表示任意主机,如192.168.1.%匹配网段)。
    • password:强密码(MySQL 8.0默认要求至少8位,包含字母、数字、符号)。

进阶选项

  • 指定认证插件(兼容旧应用):
    CREATE USER 'old_app'@'host' 
    IDENTIFIED WITH mysql_native_password BY 'password';
    
  • 密码过期策略(强制定期修改):
    CREATE USER 'temp_user'@'%' 
    IDENTIFIED BY 'TempP@ss!' 
    PASSWORD EXPIRE INTERVAL 90 DAY; -- 90天后密码失效
    

示例

-- 本地管理员账户
CREATE USER 'admin'@'localhost' IDENTIFIED BY 'Secur3P@ss!';-- 允许远程访问的开发者账户
CREATE USER 'dev_user'@'192.168.1.%' IDENTIFIED BY 'DevP@ss!';

2. 修改用户(ALTER USER / RENAME USER)

修改账户属性

ALTER USER 'username'@'host' 
IDENTIFIED BY 'new_password', 
HOST 'new_host', 
ATTRIBUTE 'email' = 'user@example.com'; -- 可添加元数据
  • 示例
    ALTER USER 'dev_user'@'192.168.1.%' 
    IDENTIFIED BY 'NewDevP@ss!',
    HOST '10.0.0.%'; -- 修改主机范围
    

重命名用户

RENAME USER 'old_name'@'host' TO 'new_name'@'host';
  • 示例
    RENAME USER 'admin'@'localhost' TO 'superadmin'@'localhost';
    

密码管理

  • 强制修改密码(下次登录时):
    ALTER USER 'username'@'host' PASSWORD EXPIRE;
    
  • 历史密码检查(防止重复使用):
    SET GLOBAL password_history = 6; -- 禁止使用最近6个旧密码
    

3. 删除用户(DROP USER)

基础语法

DROP USER 'username'@'host';
  • 注意:删除用户会自动撤销其所有权限,无需手动执行REVOKE

批量删除示例

-- 删除所有以'test_'开头的用户
DROP USER IF EXISTS 'test_%'@'%';

在MySQL命令行中,使用mysql -h|--host -P|--port -u|--user -p|--password -e的组合可以直接执行SQL语句而无需进入交互式环境,特别适合脚本化操作或快速查询。以下是完整指南及注意事项:

4. mysql 命令结构解析

mysql -h 主机名/IP -P 端口 -u 用户名 -p -e "SQL语句" 数据库名
  • 关键参数
    • -h:主机地址(如192.168.1.100db.example.com),默认localhost
    • -P:端口号(如3307),默认3306必须大写P)。
    • -u:用户名(如admin)。
    • -p:密码提示(执行时按回车输入密码,密码不跟在-p后,避免泄露)。
    • -e:直接执行的SQL语句(需用双引号包裹)。
    • 末尾的数据库名:可选,指定操作的数据库。

完整示例

示例1:查询数据库版本

mysql -h localhost -P 3306 -u root -p -e "SELECT VERSION();" 

执行后系统提示输入密码,成功登录后输出MySQL版本。

示例2:远程查询用户列表

mysql -h 192.168.1.100 -u remote_user -p -e "SELECT user, host FROM mysql.user;" mydb

连接远程主机192.168.1.100mydb数据库,查询用户信息。

示例3:导出查询结果到文件

mysql -u root -p -e "SELECT * FROM employees LIMIT 10;" company_db > employees.csv

company_db数据库中employees表的前10条记录导出为CSV文件。

常见问题与解决方案

问题1:连接失败(ERROR 2003)

  • 原因:网络不通、防火墙阻止、MySQL服务未启动。
  • 解决
    • 检查服务状态:sudo systemctl status mysqld(Linux)。
    • 测试端口连通性:telnet 192.168.1.100 3306
    • 关闭防火墙或开放端口:sudo ufw allow 3306/tcp

问题2:认证失败(ERROR 1045)

  • 原因:用户名/密码错误、用户无远程访问权限、认证插件不兼容。
  • 解决
    • 重置密码(需管理员权限):
      ALTER USER '用户名'@'主机' IDENTIFIED BY '新密码';
      
    • 检查用户权限:
      SELECT host, user FROM mysql.user;  -- 确认用户是否有远程访问权限(如'%')
      
    • 兼容旧客户端(MySQL 8.0+):
      ALTER USER '用户名'@'主机' IDENTIFIED WITH mysql_native_password BY '密码';
      

问题3:SQL语句执行错误

  • 原因:语法错误、表/列不存在、权限不足。
  • 解决
    • 在交互式环境中先测试SQL语句。
    • 检查用户权限:SHOW GRANTS FOR '用户名'@'主机';
    • 确保表名/列名正确(注意大小写敏感)。

高级用法

批量执行多条SQL

使用分号分隔多条语句(需在-e中整体包裹):

mysql -u root -p -e "USE mydb; \
SET @start_date = '2023-01-01'; \
SELECT * FROM orders WHERE order_date >= @start_date;"

处理特殊字符

若SQL语句包含双引号或特殊符号,需用单引号包裹整个-e参数:

mysql -u user -p -e 'SELECT * FROM "table_with_quotes";' dbname

静默模式(减少输出)

添加-s--silent参数,减少额外输出(如列标题):

mysql -s -u user -p -e "SELECT id, name FROM users;" dbname

安全建议

  • 避免明文密码:不要在命令中直接写密码(如-p密码),易被历史记录或他人窥见。
  • 使用连接池或配置文件:通过~/.my.cnf文件存储凭据(需设置文件权限为600):
    [client]
    user = username
    password = password
    host = localhost
    
  • 限制用户权限:遵循最小权限原则,避免使用ALL PRIVILEGES

通过以上方法,您可以高效、安全地通过命令行执行MySQL操作,适合自动化脚本或快速数据检索场景。


文章转载自:

http://DfH3YalB.zbgqt.cn
http://qL5nEjd6.zbgqt.cn
http://6P5gKxTU.zbgqt.cn
http://0M4NKvYe.zbgqt.cn
http://WXJYabY3.zbgqt.cn
http://HUVCBoTL.zbgqt.cn
http://SW7JQgZY.zbgqt.cn
http://u0O5DuYs.zbgqt.cn
http://geqZKPDl.zbgqt.cn
http://tlOwtJyh.zbgqt.cn
http://ucC4tRsf.zbgqt.cn
http://LFQVKdKW.zbgqt.cn
http://fzPzr2rb.zbgqt.cn
http://zwH4KGOR.zbgqt.cn
http://BglqJklS.zbgqt.cn
http://H0FXorTY.zbgqt.cn
http://Y8EnGUbP.zbgqt.cn
http://dPe9q7XU.zbgqt.cn
http://NUBfAk1w.zbgqt.cn
http://JUiYmlaa.zbgqt.cn
http://KPIVwSN3.zbgqt.cn
http://eRBsAPom.zbgqt.cn
http://nkp5yXB1.zbgqt.cn
http://kLY7Oek4.zbgqt.cn
http://LbMK2NaG.zbgqt.cn
http://61p7ji4I.zbgqt.cn
http://6ltjXeKX.zbgqt.cn
http://4GOhRvzm.zbgqt.cn
http://rbZo9C6b.zbgqt.cn
http://GdY0l52K.zbgqt.cn
http://www.dtcms.com/a/372767.html

相关文章:

  • 2025时序数据库选型,以IoTDB为主从架构基因到AI赋能来解析
  • 如何用表单快速构建一个用户反馈系统?
  • 2020/12 JLPT听力原文 问题四
  • 基于ConvFormer的双条件域自适应方法的故障诊断模型
  • Day 14: RAG检索增强生成核心技术 - 从原理到实战的完整指南 [特殊字符]
  • mysql 回表查询(二次查询,如何检查,如何规避)
  • vue3+ts使用html2canvas,实现页面截图
  • 疾病语音数据集 WAV格式音频
  • 07 下载配置很完善的yum软件源
  • 【PCIe EP 设备入门学习专栏 -- 8.2.2 PCIe EP Controller Register Types 介绍】
  • 排序---冒泡排序(Bubble Sort)
  • C++/QT day8(9.8)
  • 【Linux网络编程】传输层协议-----UDP协议
  • 医疗连续体机器人模块化控制界面设计与Python库应用研究(上)
  • 分享|构建产教融合的一体化人工智能实验室综合解决方案
  • 从固定 px 到响应式:Vue + Vite 项目响应式改造实战,解决前端不适配的问题
  • java面试:了解MVCC么,详细解释一下
  • ChatGPT 协作调优:把 SQL 查询从 5s 优化到 300ms 的全过程
  • 长春高新需要新叙事
  • Python用PSO优化SVM与RBFN在自动驾驶系统仿真、手写数字分类应用研究
  • android studio JNI 环境配置实现 java 调用 c/c++
  • 安卓非原创--基于Android Studio 实现的新闻App
  • Flutter Android Studio开发实用技巧
  • Android Studio适配butterknife遇到的坑
  • 论文精读(五):面向链接预测的知识图谱表示学习方法综述
  • 使用AI工具一句话生成PPT
  • 《嵌入式硬件(五):IMX6ULL所需的基础》
  • Vue响应式更新 vs React状态更新:两种范式的底层逻辑与实践差异
  • Qt UDP 网络编程详解
  • CUPP针对性字典安全防范