d a*_*s y 22 authentication plugins mysql-5.7
我试图为root. 当我运行时:
mysql> SELECT * from mysql.user where User="root";
Run Code Online (Sandbox Code Playgroud)
表明:
+-----------+------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+------------------+----------------+---------------------+--------------------+------------------+------------+--------------+------------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+----------------------+-----------------------+-----------------------+------------------+-----------------------+-------------------+----------------+
| Host | User | Select_priv | Insert_priv | Update_priv | Delete_priv | Create_priv | Drop_priv | Reload_priv | Shutdown_priv | Process_priv | File_priv | Grant_priv | References_priv | Index_priv | Alter_priv | Show_db_priv | Super_priv | Create_tmp_table_priv | Lock_tables_priv | Execute_priv | Repl_slave_priv | Repl_client_priv | Create_view_priv | Show_view_priv | Create_routine_priv | Alter_routine_priv | Create_user_priv | Event_priv | Trigger_priv | Create_tablespace_priv | ssl_type | ssl_cipher | x509_issuer | x509_subject | max_questions | max_updates | max_connections | max_user_connections | plugin | authentication_string | password_expired | password_last_changed | password_lifetime | account_locked |
+-----------+------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+------------------+----------------+---------------------+--------------------+------------------+------------+--------------+------------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+----------------------+-----------------------+-----------------------+------------------+-----------------------+-------------------+----------------+
| localhost | root | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | | | | | 0 | 0 | 0 | 0 | mysql_native_password | | N | 2018-06-13 15:11:59 | NULL | N |
+-----------+------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+------------------+----------------+---------------------+--------------------+------------------+------------+--------------+------------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+----------------------+-----------------------+-----------------------+------------------+-----------------------+-------------------+----------------+
Run Code Online (Sandbox Code Playgroud)
这份文件说,
mysql_native_password 本机身份验证插件向后兼容。不支持身份验证插件的旧客户端确实使用本机身份验证协议,因此它们可以连接到支持可插入身份验证的服务器。
但从技术上讲,我并没有得到太多。它与root用户密码有什么关系吗?
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '<password>';
Run Code Online (Sandbox Code Playgroud)
和
ALTER USER 'root'@'localhost' IDENTIFIED BY '<password>';
Run Code Online (Sandbox Code Playgroud)
它有什么区别吗?
jyn*_*nus 28
长期以来,MySQL 支持不同的身份验证插件,基本上是可编程的代码片段,以证明 mysql 帐户归任何声称拥有的人所有。
这样做的原始方法是设置密码,以特定方式对其进行散列,然后将其存储在 mysql.user 表中。但是,这不是您进行身份验证的唯一方法,例如:
caching_sha2_password),理论上它更安全(我不是说它是或不是,但当然默认的“本机”很糟糕),但可能需要更新客户端驱动程序和应用程序,因此出于兼容性原因,您始终可以恢复到旧版本。在“企业”世界中,很多时候都需要非常特殊的身份验证方法,而不仅仅是用户和密码。
基本上,mysql_native_password 是传统的身份验证方法 - 它不是很安全(它只使用密码的散列),但它与旧驱动程序兼容。如果您要启动一个新的 mysql 服务,您可能希望从一开始就使用新插件(和 TLS)。如果您有特殊需要,您可以使用其他方法- 如果您有某些特殊需要,您甚至可以编程)。
您可以为每个单独的用户选择不同的方法- 例如,您的普通应用程序可以使用 mysql_native_password 或新的 sha2 密码,但您可以确保您的管理员帐户使用 2-factor 身份验证令牌,并确保您的管理员帐户使用 2-factor 身份验证令牌和 unix_socket 用于收集统计信息的监视用户在mysql服务器上。那些其他身份验证方法可能会或可能不会使用 mysql.user 表上的密码字段,就像原生方法一样(它们可能将密码存储在 elswhere,或者它们甚至可能没有密码的概念!)。
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '<password>';
Run Code Online (Sandbox Code Playgroud)
和
ALTER USER 'root'@'localhost' IDENTIFIED BY '<password>';
Run Code Online (Sandbox Code Playgroud)
本质上是一样的,mysql_native_password 通常是默认的认证方式。有了WITH你可以决定使用哪种方法。例如,如果使用GRANT USAGE ON *.* TO root@localhost IDENTIFIED WITH socket_auth,则将该用户设置为使用 unix 套接字身份验证。MariaDB 使用稍微不同的语法:VIA unix_socket. 运行这些命令主要会导致 mysql.user 表的更新。
注意ALTER/GRANT在下次用户登录时自动工作,而UPDATE直接 mysql.user 表可能需要一个FLUSH PRIVILEGES,并且在某些情况下(Galera 等)有一些问题。
| 归档时间: |
|
| 查看次数: |
107066 次 |
| 最近记录: |