mysql 切换用户,切换用户通常有两种场景

首页 2025-10-09 13:52:25


在 MySQL 中切换用户通常有两种场景:
  1. 在 MySQL 命令行客户端(CLI)中,从一个用户切换到另一个用户。
  2. 在 SQL 语句中,将当前会话的权限切换到另一个已存在的用户。
下面我们分别来看这两种情况。

场景一:在 MySQL 命令行客户端中切换用户

这是最常见的操作,本质上是退出当前用户的连接,然后用新用户重新连接

方法:exit 然后重新登录

  1. 退出当前会话在 MySQL 提示符 (mysql>) 后输入 exit 或 quit 或 \q
    sql
    mysql> exit
    Bye
    
     
     
  2. 用新用户重新登录在系统的终端(不是 MySQL 提示符)中,使用新的用户名和密码登录。
    bash
    mysql -u new_user -p
    
     
     
    系统会提示你输入 new_user 的密码。
    plaintext
    Enter password: 
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 12
    Server version: 8.0.29-0ubuntu0.22.04.3 (Ubuntu)
    
    ...
    
    mysql>
    
     
     
    现在你已经成功切换到 new_user 了。

场景二:在当前会话中切换用户(权限切换)

如果你已经登录了 MySQL,并且不想断开连接,但想临时以另一个用户的身份执行操作,可以使用 SET ROLE 或 SET SESSION AUTHORIZATION 命令。
注意:这种方法要求你当前登录的用户具有相应的权限来切换到目标用户。

方法一:使用 SET ROLE (推荐)

SET ROLE 是更现代、更灵活的方法,它允许你在已授予的 “角色” 或用户之间切换。
  1. 授予切换权限首先,需要有一个管理员用户(如 root)将目标用户的权限授予当前用户。
    sql
    -- 假设你当前是 'admin_user',想切换到 'readonly_user'
    -- 使用 root 用户执行以下命令:
    GRANT readonly_user TO admin_user;
    
     
     
  2. 切换角色 / 用户现在,admin_user 可以在自己的会话中切换到 readonly_user
    sql
    -- admin_user 登录后执行:
    SET ROLE readonly_user;
    
     
     
    执行后,当前会话的权限就变成了 readonly_user 的权限。
  3. 验证切换你可以查看当前用户来验证。
    sql
    SELECT CURRENT_USER();
    -- 输出: 'readonly_user'@'localhost'
    
     
     
  4. 切换回原始用户
    sql
    SET ROLE DEFAULT;
    
     
     
    这会将权限切换回你登录时的原始用户(admin_user)。

方法二:使用 SET SESSION AUTHORIZATION (权限要求更高)

这个命令可以直接将会话的权限切换到另一个用户,但它要求当前用户拥有 SUPER 权限或 PROXY 权限,因此风险更高。
sql
-- 假设当前用户有足够权限
SET SESSION AUTHORIZATION 'other_user';
 
切换后,CURRENT_USER() 会显示为 'other_user'@'host'
要切换回来,你需要再次执行 SET SESSION AUTHORIZATION 或重新连接。

总结

方法 命令 场景 优点 缺点
退出重登 exit 然后 mysql -u ... 最常用。在不同用户间完全切换。 简单、安全、直观。 需要断开并重新建立连接。
SET ROLE SET ROLE 'user_name'; 当前会话中临时切换权限。 无需断开连接,灵活,权限控制精细。 需要预先配置权限,有一定复杂性。
SET SESSION AUTHORIZATION SET SESSION AUTHORIZATION 'user_name'; 当前会话中强制切换用户。 无需断开连接。 权限要求高(SUPER),安全性风险大。
对于绝大多数日常操作,场景一(退出重登) 是最简单、最安全的选择。
MySQL连接就这么简单!本地远程、编程语言连接方法一网打尽
还在为MySQL日期计算头疼?这份加一天操作指南能解决90%问题
MySQL日志到底在哪里?Linux/Windows/macOS全平台查找方法在此
MySQL数据库管理工具全景评测:从Workbench到DBeaver的技术选型指南
MySQL密码忘了怎么办?这份重置指南能救急,Windows/Linux/Mac都适用
你的MySQL为什么经常卡死?可能是锁表在作怪!快速排查方法在此
MySQL单表卡爆怎么办?从策略到实战,一文掌握「分表」救命技巧
清空MySQL数据表千万别用错!DELETE和TRUNCATE这个区别可能导致重大事故
你的MySQL中文排序一团糟?记住这几点,轻松实现准确拼音排序!
别再混淆Hive和MySQL了!读懂它们的天壤之别,才算摸到大数据的门道