MySQL 代理用户无法获取被代理用户权限的配置步骤?

新手上路,请多包涵

求教各位大神,mysql Ver 8.4.5 for Linux on x86_64 (MySQL Community Server - GPL)版本mysql代理用户登录后无法获取被代理用户权限问题如何解决?求教完整的配置过程。

阅读 338
1 个回答

MySQL 8.4.5 代理用户权限配置

1. 创建被代理用户

MySQL 8.4 推荐使用 mysql_no_login 认证插件,而不是 ACCOUNT LOCK,以防止被代理用户直接登录:

CREATE USER 'target_user'@'%' IDENTIFIED WITH mysql_no_login;

如果 mysql_no_login 插件不可用,可以使用 ACCOUNT LOCK

CREATE USER 'target_user'@'%' IDENTIFIED BY 'target_password' ACCOUNT LOCK;

然后授予被代理用户权限:

GRANT SELECT, INSERT, UPDATE, DELETE ON your_database.* TO 'target_user'@'%';

2. 验证 mysql_no_login 插件是否可用

SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS 
WHERE PLUGIN_NAME = 'mysql_no_login';

如果插件未安装,可以手动安装:

INSTALL PLUGIN mysql_no_login SONAME 'mysql_no_login.so';

3. 创建代理用户并授权

CREATE USER 'proxy_user'@'%' IDENTIFIED BY 'proxy_password';
GRANT PROXY ON 'target_user'@'%' TO 'proxy_user'@'%';
FLUSH PRIVILEGES;

4. 验证代理用户权限

SHOW GRANTS FOR 'proxy_user'@'%';
SHOW GRANTS FOR 'target_user'@'%';
SELECT * FROM mysql.proxies_priv WHERE User='proxy_user';

使用代理用户登录后,执行:

SELECT CURRENT_USER(), USER();

CURRENT_USER() 应该返回 target_user,而 USER() 应该返回 proxy_user

5. 检查 MySQL 配置文件

确保 /etc/my.cnf/etc/mysql/my.cnf 中正确加载了 auth_pam.soauth_pam_compat.so 插件:

[mysqld]
plugin-load-add=auth_pam.so
plugin-load-add=auth_pam_compat.so

6. 设置相关参数

SET GLOBAL check_proxy_users=ON;
SET GLOBAL mysql_native_password_proxy_users=ON;
SET GLOBAL sha256_password_proxy_users=ON;

7. 重启 MySQL 服务

sudo systemctl restart mysql

8. 检查日志

如果问题仍未解决,建议查看 MySQL 的日志文件:

tail -f /var/log/mysql/error.log

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题