MySQL8认证插件——No-Login Pluggable Authentication

mysql_no_login插件用于阻止直接登录,常用于执行有权限要求的存储程序和视图,以及作为代理账户。安装该插件涉及添加到服务器插件目录和配置文件,或在运行时使用INSTALLPLUGIN命令。卸载则可通过服务器重启或UNINSTALLPLUGIN命令。此插件确保账户只能通过DEFINER或代理账户访问,增强了安全性。
摘要由CSDN通过智能技术生成

mysql_no_login服务器端身份验证插件阻止所有客户端连接到任何使用它的账户。此插件的用例包括:

● 必须能够以提升的权限执行存储的程序和视图,而不会将这些权限暴露给普通用户的账户。

● 不应允许直接登录但只能通过代理账户访问的代理账户。

插件和库名称

插件或文件

插件或文件名称

Server-side plugin

mysql_no_login

Client-side plugin

None

Library file

mysql_no_login.so

安装无登录插件身份验证

要供服务器使用,插件库文件必须位于MySQL插件目录(由 plugin_dir 系统变量命名的目录)中。如有必要,通过在服务器启动时设置 plugin_dir 的值来配置插件目录位置。

插件库文件的基本名称是mysql_no_login。文件名后缀因平台而异(例如,对于Unix和类Unix系统为.so,对于Windows为.dll)。

要在服务器启动时加载插件,请使用 --plugin-load-add 选项命名包含该插件的库文件。使用此插件加载方法,每次服务器启动时都必须给定该选项。例如,将这些行放在服务器my.cnf文件中,根据需要调整平台的.so后缀:

[mysqld]
plugin-load-add=mysql_no_login.so

修改my.cnf后,重新启动服务器以使新设置生效。

或者,要在运行时加载插件,请使用以下语句,根据需要调整平台的.so后缀:

INSTALL PLUGIN mysql_no_login SONAME 'mysql_no_login.so';

INSTALL PLUGIN立即加载插件,并将其注册在mysql.plugins系统表中,以使服务器在每次后续正常启动时加载它,而不需要 --plugin-load-add

要验证插件安装,请检查Information Schema PLUGINS表或使用SHOW PLUGINS语句。例如:

mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE '%login%';
+----------------+---------------+
| PLUGIN_NAME | PLUGIN_STATUS |
+----------------+---------------+
| mysql_no_login | ACTIVE |
+----------------+---------------+

如果插件无法初始化,请查看服务器错误日志中的诊断消息。

卸载无登录可插拔身份验证

用于卸载无登录身份验证插件的方法取决于您的安装方式:

如果您在服务器启动时使用 --plugin-load-add 选项安装了插件,请在不使用该选项的情况下重新启动服务器。

如果您在运行时使用 INSTALL PLUGIN 语句安装插件,那么它将在服务器重新启动时保持安装状态。要卸载它,请使用 UNINSTALL PLUGIN

UNINSTALL PLUGIN mysql_no_login;

使用无登录可插拔身份验证

使用 mysql_no_login 进行身份验证的账户可以用作存储程序和视图对象的 DEFINER。如果这样的对象定义还包括 SQL SECURITY DEFINER,那么它将使用该账户的权限执行。DBA可以使用这种行为来提供对机密或敏感数据的访问,这些数据只能通过控制良好的接口公开。

以下示例说明了这些原则。它定义了一个不允许客户端连接的账户,并将一个只公开 mysql.user 系统表的某些列的视图与之关联:

CREATE DATABASE nologindb;
CREATE USER 'nologin'@'localhost' IDENTIFIED WITH mysql_no_login;
GRANT ALL ON nologindb.* TO 'nologin'@'localhost';
GRANT SELECT ON mysql.user TO 'nologin'@'localhost';
CREATE DEFINER = 'nologin'@'localhost'
SQL SECURITY DEFINER
VIEW nologindb.myview
AS SELECT User, Host FROM mysql.user;

要向普通用户提供对视图的受保护访问,请执行以下操作:

GRANT SELECT ON nologindb.myview TO 'ordinaryuser'@'localhost';

现在,普通用户可以使用该视图访问它所显示的有限信息:

SELECT * FROM nologindb.myview;

用户试图访问视图公开的列以外的列会导致错误,未被授予访问权限的用户试图从视图中进行选择也会导致错误。

说明: 因为nologin账户不能直接使用,所以设置它使用的对象所需的操作必须由root或类似账户执行,该账户具有创建对象和设置DEFINER值所需的权限。

mysql_no_login插件在代理场景中也很有用。使用mysql_no_login进行身份验证的账户可以用作代理账户的代理用户:

-- create proxied account
CREATE USER 'proxied_user'@'localhost' IDENTIFIED WITH mysql_no_login;
-- grant privileges to proxied account
GRANT ... ON ... TO 'proxied_user'@'localhost';
-- permit proxy_user to be a proxy account for proxied account
GRANT PROXY ON 'proxied_user'@'localhost' TO 'proxy_user'@'localhost';

这使得客户端可以通过代理账户(proxy_user)访问MySQL,但不能通过直接作为被代理用户(proxied_user)连接来绕过代理机制。使用 proxy_user 账户进行连接的客户端具有 proxied_user 账户的权限,但 proxied_user 本身不能用于连接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贺浦力特

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值