原文:
docs.oracle.com/javase/tutorial/reallybigindex.html
原文:
dev.mysql.com/doc/refman/8.0/en/no-login-pluggable-authentication.html
8.4.1.9 无登录可插拔认证
mysql_no_login
服务器端认证插件阻止所有使用它的账户的客户端连接。此插件的用例包括:
- 必须能够执行存储过程和视图并具有提升权限,而不会将这些权限暴露给普通用户的账户。
- 代理账户永远不应允许直接登录,而是仅通过代理账户访问的账户。
以下表显示了插件和库文件名。文件名后缀可能因您的系统而异。该文件必须位于由 plugin_dir
系统变量命名的目录中。
表 8.25 无登录认证的插件和库名称
插件或文件 | 插件或文件名 |
服务器端插件 | mysql_no_login |
客户端插件 | 无 |
库文件 | mysql_no_login.so |
以下各节提供了特定于无登录可插拔认证的安装和使用信息:
- 安装无登录可插拔认证
- 卸载无登录可插拔认证
- 使用无登录可插拔认证
有关 MySQL 中可插拔认证的一般信息,请参阅第 8.2.17 节,“可插拔认证”。有关代理用户信息,请参阅第 8.2.19 节,“代理用户”。
安装无登录可插拔认证
本节描述了如何安装无登录认证插件。有关安装插件的一般信息,请参阅第 7.6.1 节,“安装和卸载插件”。
要使服务器可用,插件库文件必须位于 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
。
要验证插件安装,请检查信息模式PLUGINS
表或使用SHOW PLUGINS
语句(参见 Section 7.6.2, “Obtaining Server Plugin Information”)。例如:
mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE '%login%'; +----------------+---------------+ | PLUGIN_NAME | PLUGIN_STATUS | +----------------+---------------+ | mysql_no_login | ACTIVE | +----------------+---------------+
如果插件初始化失败,请检查服务器错误日志以获取诊断消息。
要将 MySQL 帐户与无登录插件关联,请参阅使用无登录可插拔认证。
卸载无登录可插拔认证
卸载无登录认证插件的方法取决于您安装它的方式:
- 如果您在服务器启动时使用
--plugin-load-add
选项安装了插件,请在不带该选项的情况下重新启动服务器。 - 如果您在运行时使用
INSTALL PLUGIN
语句安装了插件,则在服务器重新启动时仍然保留安装。要卸载它,请使用UNINSTALL PLUGIN
:
UNINSTALL PLUGIN mysql_no_login;
使用无登录可插拔认证
本节描述如何使用无登录认证插件防止帐户被用于从 MySQL 客户端程序连接到服务器。假定服务器正在运行,并启用了无登录插件,如安装无登录可插拔认证中所述。
在CREATE USER
语句的IDENTIFIED WITH
子句中引用无登录认证插件时,请使用名称mysql_no_login
。
使用mysql_no_login
进行身份验证的账户可用作存储过程和视图对象的DEFINER
。如果此类对象定义还包括SQL SECURITY DEFINER
,则将以该账户的权限执行。数据库管理员可以利用此行为提供仅通过受控接口公开的机密或敏感数据的访问。
以下示例说明了这些原则。它定义了一个不允许客户端连接的账户,并将其与一个仅公开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
账户不能直接使用,因此必须由具有创建对象和设置DEFINER
值所需特权的root
或类似账户执行设置对象的操作。
mysql_no_login
插件在代理场景中也很有用。(有关代理涉及的概念讨论,请参阅第 8.2.19 节,“代理用户”。)使用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
本身不能用于连接。
若要了解有关保护代理账户免受直接使用的替代方法,请参阅防止直接登录到代理账户。
原文:
dev.mysql.com/doc/refman/8.0/en/socket-pluggable-authentication.html
8.4.1.10 套接字对等凭证可插拔认证
服务器端auth_socket
认证插件用于认证通过 Unix 套接字文件从本地主机连接的客户端。该插件使用SO_PEERCRED
套接字选项来获取运行客户端程序的用户信息。因此,该插件只能在支持SO_PEERCRED
选项的系统上使用,例如 Linux。
此插件的源代码可作为一个相对简单的示例,演示如何编写一个可加载的认证插件。
以下表显示了插件和库文件名。文件必须位于由plugin_dir
系统变量命名的目录中。
表 8.26 套接字对等凭证认证的插件和库名称
插件或文件 | 插件或文件名 |
服务器端插件 | auth_socket |
客户端插件 | 无,请参阅讨论 |
库文件 | auth_socket.so |
以下各节提供了特定于套接字可插拔认证的安装和使用信息:
- 安装套接字可插拔认证
- 卸载套接字可插拔认证
- 使用套接字可插拔认证
有关 MySQL 中可插拔认证的一般信息,请参阅第 8.2.17 节,“可插拔认证”。
安装套接字可插拔认证
本节描述了如何安装套接字认证插件。有关安装插件的一般信息,请参阅第 7.6.1 节,“安装和卸载插件”。
要使服务器可用,插件库文件必须位于 MySQL 插件目录中(由plugin_dir
系统变量命名的目录)。如有必要,通过在服务器启动时设置plugin_dir
的值来配置插件目录位置。
要在服务器启动时加载插件,请使用--plugin-load-add
选项来命名包含插件的库文件。使用这种插件加载方法,选项必须在每次服务器启动时给出。例如,将以下行放入服务器的my.cnf
文件中:
[mysqld] plugin-load-add=auth_socket.so
修改my.cnf
后,重新启动服务器以使新设置生效。
或者,要在运行时加载插件,请使用此语句:
INSTALL PLUGIN auth_socket SONAME 'auth_socket.so';
INSTALL PLUGIN
立即加载插件,并在mysql.plugins
系统表中注册它,以使服务器在每次后续正常启动时加载它,而无需--plugin-load-add
。
要验证插件安装情况,请检查信息模式PLUGINS
表,或使用SHOW PLUGINS
语句(参见第 7.6.2 节,“获取服务器插件信息”)。例如:
mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE '%socket%'; +-------------+---------------+ | PLUGIN_NAME | PLUGIN_STATUS | +-------------+---------------+ | auth_socket | ACTIVE | +-------------+---------------+
如果插件初始化失败,请检查服务器错误日志以获取诊断消息。
要将 MySQL 帐户与套接字插件关联,请参阅使用套接字可插拔认证。
卸载套接字可插拔认证
卸载套接字可插拔认证插件的方法取决于您安装插件的方式:
- 如果您在服务器启动时使用
--plugin-load-add
选项安装了插件,请在不带该选项的情况下重新启动服务器。 - 如果您在运行时使用
INSTALL PLUGIN
语句安装了插件,则在服务器重新启动时仍然安装。要卸载它,请使用UNINSTALL PLUGIN
:
UNINSTALL PLUGIN auth_socket;
使用套接字可插拔认证
套接字插件检查套接字用户名(操作系统用户名)是否与客户端程序指定给服务器的 MySQL 用户名匹配。如果名称不匹配,则插件将检查套接字用户名是否与mysql.user
系统表行的authentication_string
列中指定的名称匹配。如果找到匹配项,则插件允许连接。authentication_string
值可以使用CREATE USER
或ALTER USER
中的IDENTIFIED ...AS
子句指定。
假设为一个名为valerie
的操作系统用户创建了一个用于通过套接字文件从本地主机进行认证的 MySQL 帐户,该用户将通过auth_socket
插件进行认证:
CREATE USER 'valerie'@'localhost' IDENTIFIED WITH auth_socket;
如果本地主机上的用户使用登录名 stefanie
调用 mysql 并使用选项 --user=valerie
通过套接字文件连接,服务器将使用 auth_socket
对客户端进行身份验证。插件确定 --user
选项值 (valerie
) 与客户端用户名 (stephanie
) 不同,因此拒绝连接。如果名为 valerie
的用户尝试同样的操作,插件会发现用户名和 MySQL 用户名都是 valerie
,允许连接。但是,即使是 valerie
,如果使用不同的协议(如 TCP/IP)进行连接,插件也会拒绝连接。
要允许 valerie
和 stephanie
操作系统用户通过使用账户的套接字文件连接访问 MySQL,可以通过两种方式实现:
- 在创建账户时分别命名这两个用户,一个在
CREATE USER
后面,另一个在认证字符串中:
CREATE USER 'valerie'@'localhost' IDENTIFIED WITH auth_socket AS 'stephanie';
- 如果您已经使用
CREATE USER
为单个用户创建了账户,可以使用ALTER USER
来添加第二个用户:
CREATE USER 'valerie'@'localhost' IDENTIFIED WITH auth_socket; ALTER USER 'valerie'@'localhost' IDENTIFIED WITH auth_socket AS 'stephanie';
要访问账户,valerie
和 stephanie
在连接时都需要指定 --user=valerie
。
原文:
dev.mysql.com/doc/refman/8.0/en/fido-pluggable-authentication.html
8.4.1.11 FIDO 可插拔认证
注意
FIDO 可插拔认证是包含在 MySQL Enterprise Edition 中的扩展,这是一款商业产品。要了解更多关于商业产品的信息,请参见 www.mysql.com/products/
。
MySQL Enterprise Edition 支持一种认证方法,允许用户使用 FIDO 认证对 MySQL 服务器进行认证。从 MySQL 8.0.35 开始,此认证方法已被弃用,并可能在未来的 MySQL 版本中被移除。为了获得类似的功能,请考虑升级到 MySQL 8.2(或更高版本),用户可以使用 WebAuthn 认证 对 MySQL 服务器进行认证。在进行升级之前,您需要了解 MySQL 创新和长期支持(LTS)版本的发布模型。有关更多信息,请参见 Section 3.2, “升级路径”。
FIDO 代表快速身份在线,提供了不需要使用密码的认证标准。
FIDO 可插拔认证提供以下功能:
- FIDO 可以使用智能卡、安全密钥和生物识别读卡器等设备对 MySQL 服务器进行认证。
- 因为认证可以通过除提供密码外的其他方式进行,所以 FIDO 实现了无密码认证。
- 另一方面,设备认证通常与密码认证一起使用,因此 FIDO 认证可用于使用多因素认证的 MySQL 帐户;参见 Section 8.2.18, “多因素认证”。
以下表格显示了插件和库文件的名称。文件名后缀可能因系统而异。Unix 和类 Unix 系统通常使用 .so
,Windows 系统使用 .dll
。文件必须位于由 plugin_dir
系统变量指定的目录中。有关安装信息,请参见 安装 FIDO 可插拔认证。
表 8.27 FIDO 认证的插件和库名称
插件或文件 | 插件或文件名 |
服务器端插件 | authentication_fido |
客户端插件 | authentication_fido_client |
库文件 | authentication_fido.so ,authentication_fido_client.so |
注意
在使用服务器端或客户端 FIDO 认证插件的系统上必须可用 libfido2
库。如果主机上有多个 FIDO 设备,则 libfido2
库决定用于注册和认证的设备。libfido2
库不提供设备选择功能。
服务器端的 FIDO 身份验证插件仅包含在 MySQL 企业版中。它不包含在 MySQL 社区发行版中。客户端插件包含在所有发行版中,包括社区发行版,这使得来自任何发行版的客户端都可以连接到加载了服务器端插件的服务器。
以下各节提供了特定于 FIDO 可插拔认证的安装和使用信息:
- 安装 FIDO 可插拔认证
- 使用 FIDO 认证
- FIDO 免密码认证
- FIDO 设备注销
- MySQL 用户 FIDO 认证的工作原理
有关 MySQL 中可插拔认证的一般信息,请参见第 8.2.17 节,“可插拔认证”。
安装 FIDO 可插拔认证
本节描述了如何安装服务器端的 FIDO 身份验证插件。有关安装插件的一般信息,请参见第 7.6.1 节,“安装和卸载插件”。
要使服务器可用,插件库文件必须位于 MySQL 插件目录中(由plugin_dir
系统变量命名的目录)。如果需要,通过在服务器启动时设置plugin_dir
的值来配置插件目录位置。
服务器端插件库文件基本名称为authentication_fido
。文件名后缀因平台而异(例如,对于 Unix 和类 Unix 系统,为.so
,对于 Windows 为.dll
)。
要在服务器启动时加载插件,请使用--plugin-load-add
选项命名包含插件的库文件。使用此插件加载方法,选项必须在每次服务器启动时给出。
要加载插件,请在您的my.cnf
文件中添加类似以下行,根据需要调整.so
后缀以适应您的平台:
[mysqld] plugin-load-add=authentication_fido.so
修改my.cnf
后,重新启动服务器以使新设置生效。
或者,要在运行时加载插件,请使用此语句,根据需要调整.so
后缀以适应您的平台:
INSTALL PLUGIN authentication_fido SONAME 'authentication_fido.so';
INSTALL PLUGIN
立即加载插件,并在mysql.plugins
系统表中注册它,以使服务器在每次后续正常启动时加载它,而无需--plugin-load-add
。
要验证插件安装,请检查信息模式PLUGINS
表,或使用SHOW PLUGINS
语句(参见 Section 7.6.2,“获取服务器插件信息”)。例如:
mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME = 'authentication_fido'; +---------------------+---------------+ | PLUGIN_NAME | PLUGIN_STATUS | +---------------------+---------------+ | authentication_fido | ACTIVE | +---------------------+---------------+
如果插件初始化失败,请检查服务器错误日志以获取诊断消息。
要将 MySQL 帐户与 FIDO 认证插件关联,请参见使用 FIDO 认证。
使用 FIDO 认证
FIDO 认证通常用于多因素认证的背景下(参见 Section 8.2.18,“多因素认证”)。本节展示了如何将基于 FIDO 设备的认证纳入多因素帐户中,使用authentication_fido
插件。
在以下讨论中假定服务器正在运行,并启用了服务器端 FIDO 认证插件,如安装 FIDO 可插拔认证中所述,并且客户端 FIDO 插件在客户端主机的插件目录中可用。
注意
在 Windows 上,只有当客户端进程以具有管理员权限的用户身份运行时,FIDO 认证才能正常工作。
还假定 FIDO 认证与非 FIDO 认证一起使用(这意味着 2FA 或 3FA 帐户)。FIDO 也可以单独使用,创建以无密码方式进行身份验证的 1FA 帐户。在这种情况下,设置过程略有不同。有关说明,请参见 FIDO 无密码认证。
配置为使用authentication_fido
插件的帐户与 FIDO 设备关联。因此,在进行 FIDO 认证之前需要进行一次设备注册步骤。设备注册过程具有以下特点:
- 与帐户关联的任何 FIDO 设备必须在使用帐户之前注册。
- 注册要求客户端主机上有一个 FIDO 设备,否则注册将失败。
- 用户在注册过程中收到提示时,应执行适当的 FIDO 设备操作(例如,触摸设备或进行生物识别扫描)。
- 要执行设备注册,客户端用户必须调用mysql客户端程序或 MySQL Shell,并指定
--fido-register-factor
选项以指定正在注册设备的因素或因素。例如,如果帐户设置为将 FIDO 用作第二身份验证因素,则用户使用--fido-register-factor=2
选项调用mysql。 - 如果用户帐户配置为将
authentication_fido
插件设置为第二或第三因素,则在注册步骤可以继续之前,所有前面因素的身份验证必须成功。 - 服务器根据用户帐户中的信息知道 FIDO 设备是否需要注册或已经注册。当客户端程序连接时,如果设备必须注册,服务器会将客户端会话置于沙盒模式,以便在执行其他操作之前必须进行注册。用于 FIDO 设备注册的沙盒模式类似于处理过期密码的模式。请参阅第 8.2.16 节,“服务器处理过期密码”。
- 在沙盒模式下,除了
ALTER USER
语句之外,不允许使用其他语句。注册是通过此语句的形式执行的。当使用--fido-register-factor
选项调用时,mysql客户端会生成执行注册所需的ALTER USER
语句。注册完成后,服务器会将会话从沙盒模式切换出来,客户端可以正常进行操作。有关生成的ALTER USER
语句的信息,请参考--fido-register-factor
的描述。 - 当为帐户执行设备注册后,服务器会更新该帐户的
mysql.user
系统表行,以更新设备注册状态并存储公钥和凭证 ID。 - 只能由帐户指定的用户执行注册步骤。如果一个用户尝试为另一个用户执行注册,则会出现错误。
- 用户在注册和身份验证过程中应使用相同的 FIDO 设备。如果在客户端主机上注册了 FIDO 设备后,重置设备或插入不同设备,则身份验证将失败。在这种情况下,必须取消与帐户关联的设备注册,并重新进行注册。
假设您希望一个账户首先使用 caching_sha2_password
插件进行认证,然后再使用 authentication_fido
插件进行认证。可以使用类似以下语句创建多因素账户:
CREATE USER 'u2'@'localhost' IDENTIFIED WITH caching_sha2_password BY '*sha2_password*' AND IDENTIFIED WITH authentication_fido;
要连接,提供因素 1 密码以满足该因素的认证,并将 --fido-register-factor
设置为因素 2 以启动 FIDO 设备的注册。
$> mysql --user=u2 --password1 --fido-register-factor=2 Enter password: *(enter factor 1 password)*
一旦因素 1 密码被接受,客户端会进入沙盒模式,以便为因素 2 进行设备注册。在注册过程中,您将被提示执行适当的 FIDO 设备操作,例如触摸设备或进行生物识别扫描。
当注册过程完成时,连接到服务器是允许的。
注意
在注册后,无论账户的认证链中是否存在额外的认证因素,连接到服务器都是允许的。例如,如果前面的示例中的账户定义了第三个认证因素(使用非 FIDO 认证),则在成功注册后连接将被允许,而无需对第三个因素进行认证。然而,后续的连接将需要对所有三个因素进行认证。
FIDO 无密码认证
本节描述了如何单独使用 FIDO 创建支持无密码认证的 1FA 账户。在这种情况下,“无密码”意味着认证会发生,但使用的是除密码之外的方法,例如安全密钥或生物识别扫描。这并不是指使用密码为空的基于密码的认证插件的账户。那种“无密码”是完全不安全的,不建议使用。
使用 authentication_fido
插件实现无密码认证时,需要满足以下先决条件:
- 创建无密码认证账户的用户需要
PASSWORDLESS_USER_ADMIN
权限,以及CREATE USER
权限。 authentication_policy
值的第一个元素必须是星号(*
),而不是插件名称。例如,默认的authentication_policy
值支持启用无密码认证,因为第一个元素是星号:
authentication_policy='*,,'
- 有关配置
authentication_policy
值的信息,请参阅配置多因素认证策略。
要将authentication_fido
用作免密码认证方法,必须将帐户创建为将authentication_fido
作为第一因素认证方法。还必须为第一因素指定INITIAL AUTHENTICATION IDENTIFIED BY
子句(不支持第 2 或第 3 因素)。此子句指定 FIDO 设备注册时将使用随机生成的还是用户指定的密码。设备注册后,服务器会删除密码并修改帐户,使authentication_fido
成为唯一的认证方法(1FA 方法)。
所需的CREATE USER
语法如下:
CREATE USER *user* IDENTIFIED WITH authentication_fido INITIAL AUTHENTICATION IDENTIFIED BY {RANDOM PASSWORD | '*auth_string*'};
以下示例使用RANDOM PASSWORD
语法:
mysql> CREATE USER 'u1'@'localhost' IDENTIFIED WITH authentication_fido INITIAL AUTHENTICATION IDENTIFIED BY RANDOM PASSWORD; +------+-----------+----------------------+-------------+ | user | host | generated password | auth_factor | +------+-----------+----------------------+-------------+ | u1 | localhost | 9XHK]M{l2rnD;VXyHzeF | 1 | +------+-----------+----------------------+-------------+
要执行注册,用户必须使用与INITIAL AUTHENTICATION IDENTIFIED BY
子句关联的密码对服务器进行身份验证,可以是随机生成的密码,也可以是'*
auth_string*'
值。如果帐户是刚刚创建的,用户执行此命令并在提示处粘贴先前生成的随机密码(9XHK]M{l2rnD;VXyHzeF
):
$> mysql --user=u1 --password --fido-register-factor=2 Enter password:
选项--fido-register-factor=2
用于表示INITIAL AUTHENTICATION IDENTIFIED BY
子句当前充当第一因素认证方法。因此,用户必须使用第二因素提供临时密码。成功注册后,服务器将删除临时密码并修改mysql.user
系统表中的帐户条目,将authentication_fido
列为唯一(1FA)认证方法。
创建无密码认证帐户时,重要的是在CREATE USER
语句中包含INITIAL AUTHENTICATION IDENTIFIED BY
子句。服务器将接受没有子句的语句,但由于没有办法连接到服务器注册设备,因此生成的帐户无法使用。假设您执行了这样的语句:
CREATE USER 'u2'@'localhost' IDENTIFIED WITH authentication_fido;
后续尝试使用帐户连接将失败,如下所示:
$> mysql --user=u2 --skip-password Failed to open FIDO device. ERROR 1 (HY000): Unknown MySQL error
注意
使用通用第二因素(U2F)协议实现无密码认证,该协议不支持设置要注册的设备的 PIN 等其他安全措施。因此,设备持有者有责任确保设备以安全方式处理。
FIDO 设备注销
可以注销与 MySQL 帐户关联的 FIDO 设备。在多种情况下,这可能是可取或必要的:
- 要用不同设备替换 FIDO 设备。必须注销先前的设备并注册新设备。
在这种情况下,帐户所有者或任何具有CREATE USER
权限的用户都可以注销设备。帐户所有者可以注册新设备。 - FIDO 设备被重置或丢失。直到当前设备被注销并执行新的注册为止,认证尝试将失败。
在这种情况下,由于账户所有者无法进行身份验证,因此无法注销当前设备,必须联系 DBA(或任何具有CREATE USER
权限的用户)来执行此操作。然后账户所有者可以重新注册重置的设备或注册新设备。
注销 FIDO 设备可以由账户所有者或任何具有CREATE USER
权限的用户执行。使用以下语法:
ALTER USER *user* {2 | 3} FACTOR UNREGISTER;
要重新注册设备或执行新的注册,请参考使用 FIDO 认证 中的说明。
FIDO 认证 MySQL 用户的工作原理
本节概述了 MySQL 和 FIDO 如何共同工作以对 MySQL 用户进行认证。有关如何设置 MySQL 账户以使用 FIDO 认证插件的示例,请参见使用 FIDO 认证。
使用 FIDO 认证的账户必须在连接到服务器之前执行初始设备注册步骤。设备注册后,认证可以继续进行。FIDO 设备注册过程如下:
- 服务器向客户端发送随机挑战、用户 ID 和依赖方 ID(唯一标识服务器),依赖方 ID 由
authentication_fido_rp_id
系统变量定义。默认值为MySQL
。 - 客户端接收该信息并将其发送给客户端 FIDO 认证插件,后者再将其提供给 FIDO 设备。
- 用户执行适当的设备操作(例如,触摸设备或进行生物识别扫描)后,FIDO 设备生成公钥/私钥对、密钥句柄、X.509 证书和签名,然后返回给服务器。
- 服务器端 FIDO 认证插件验证签名。验证成功后,服务器将凭证 ID 和公钥存储在
mysql.user
系统表中。
注册成功后,FIDO 认证遵循以下流程:
- 服务器向客户端发送随机挑战、用户 ID、依赖方 ID 和凭证。
- 客户端将相同的信息发送给 FIDO 设备。
- FIDO 设备提示用户执行适当的设备操作,根据注册时所做的选择。
- 此操作解锁私钥并签署挑战。
- 签署的挑战返回给服务器。
- 服务器端 FIDO 认证插件使用公钥验证签名,并响应以指示认证成功或失败。
原文:
dev.mysql.com/doc/refman/8.0/en/test-pluggable-authentication.html
MySQL8 中文参考(二十八)(2)https://developer.aliyun.com/article/1566113