🗣 Wd提问: MySQL proxies_priv
🤖 Ai回答: 在 MySQL 中,`proxies_priv` 是一个系统权限表,位于 `mysql` 数据库中。它用于管理 代理用户(Proxy Users) 的权限 —— 即允许某个用户以另一个用户的名义执行操作。
📌 作用
`proxies_priv` 表的主要功能是:
允许一个用户(代理用户)代表另一个用户(被代理用户)进行身份验证和操作。
这在某些高级场景中非常有用,例如:
应用程序使用一个通用账户连接数据库,但希望以不同“真实用户”的身份执行操作。
实现细粒度的访问控制或审计追踪。
集成外部认证系统(如 LDAP、PAM 等),通过代理机制映射到 MySQL 内部用户。
🗃️ 表结构(MySQL 5.7+)
sql
DESCRIBE mysql.proxies_priv;
输出示例:
| Field | Type | Null | Key | Default | Extra |
| Host | char(255) | NO | PRI | | |
| User | char(32) | NO | PRI | | |
| Proxied_host | char(255) | NO | PRI | | |
| Proxied_user | char(32) | NO | PRI | | |
| With_grant | tinyint(1) | NO | | 0 | |
字段说明:
Host, User:代理用户的身份(即谁可以代理别人)
Proxied_host, Proxied_user:被代理用户的 identity(即代理谁)
With_grant:是否允许代理用户将代理权限授予他人(类似 GRANT OPTION)
✅ 使用示例
1、授予代理权限
sql
GRANT PROXY ON 'real_user'@'localhost' TO 'proxy_user'@'%' WITH GRANT OPTION;
这表示:`proxy_user@%` 可以代理 `real_user@localhost`,并且可以将此权限转授给其他人。
2、查看当前代理权限
sql
SELECT * FROM mysql.proxies_priv;
3、撤销代理权限
sql
REVOKE PROXY ON 'real_user'@'localhost' FROM 'proxy_user'@'%';
⚠️ 注意事项
1、必须启用代理功能:
默认情况下,MySQL 允许代理(除非显式禁用)。
可通过配置项 `check_proxy_users` 和 `mysql_native_password_proxy_users` 控制行为(尤其在插件认证时)。
2、权限检查顺序:
当代理用户登录并声明要代理某个用户时,MySQL 会检查:
代理用户是否有 `PROXY` 权限;
被代理用户是否存在且有效;
是否满足 `WITH GRANT OPTION`(如果需要转授)。
3、与 `mysql.user` 表配合使用:
代理用户本身必须存在于 `mysql.user` 表中,并具有基本登录权限。
被代理用户也必须存在,否则代理失败。
4、安全风险:
代理权限若滥用可能导致权限提升或越权访问。
建议仅在必要场景下使用,并严格限制 `WITH GRANT OPTION`。
🔍 实际应用场景
假设你有一个 Web 应用,所有请求都通过一个统一账号 `app_user@%` 连接数据库,但你想根据不同的前端用户(如 `user1`, `user2`)动态切换权限上下文:
sql
创建真实用户
CREATE USER 'user1'@'localhost' IDENTIFIED BY 'password1';
CREATE USER 'user2'@'localhost' IDENTIFIED BY 'password2';
创建代理用户
CREATE USER 'app_user'@'%' IDENTIFIED BY 'app_password';
授予代理权限
GRANT PROXY ON 'user1'@'localhost' TO 'app_user'@'%';
GRANT PROXY ON 'user2'@'localhost' TO 'app_user'@'%';
然后在应用中连接时指定:
sql
登录后切换身份(需客户端支持)
SET SESSION proxy_user = 'user1@localhost';
💡 注意:不是所有客户端都支持设置 `proxy_user`,通常需要配合特定驱动或中间件(如 ProxySQL、MaxScale 或自定义逻辑)。
🧩 相关命令 & 系统变量
`SHOW PROXY PRIVILEGES;` → 显示当前代理权限(MySQL 8.0+ 支持)
`check_proxy_users` → 是否启用代理用户检查(默认 ON)
`mysql_native_password_proxy_users` → 控制 native password 插件下的代理行为
📚 官方文档参考
[MySQL 8.0 Reference Manual Proxy Users](https://dev.mysql.com/doc/refman/8.0/en/proxy-users.html)
[GRANT Syntax PROXY Privilege](https://dev.mysql.com/doc/refman/8.0/en/grant.htmlgrant-proxy)
✅ 总结
| 项目 | 说明 |
| 表名 | `mysql.proxies_priv` |
| 所属数据库 | `mysql` |
| 功能 | 管理代理用户权限 |
| 关键字段 | Host, User, Proxied_host, Proxied_user, With_grant |
| 常用命令 | `GRANT PROXY`, `REVOKE PROXY` |
| 适用场景 | 多租户、统一入口、外部认证集成等 |
| 安全建议 | 严格控制授权范围,慎用 `WITH GRANT` |
如果你正在调试代理权限问题,或者想了解如何在你的架构中使用代理用户,请提供更多上下文,我可以为你定制解决方案 👍
📣 商家广告:





0
IP地址: 178.235.133.215
搜索次数: 7
提问时间: 2025-12-12 16:50:46
本站所有
❓
问答
均由Ai自动分析整理,内容仅供参考,若有误差请用“联系”里面信息通知我们人工修改或删除。
本站由
🟢
豌豆Ai
提供技术支持,使用的最新版:
豌豆Ai站群搜索引擎系统 V.25.10.25
搭建本站。