Tar*_*ara 3 mysql database database-administration mariadb centos7
我现在已经将 MariaDB 5.5 升级到 10.1,它说 mysql 使用安全身份验证并将旧密码更改为新密码。我在 my.cnf 中禁用了安全身份验证并能够登录。
现在我的问题是如何将旧密码更改为新密码并在数据库上启用安全身份验证。
建议我该怎么做。
我将假设您的 MariaDB 服务器没有其他您不知道密码的用户,并且您拥有修改用户和设置系统级变量所需的特权。Super_Priv 可能就够了 :)
注意:您冒着将自己锁定的风险,但只要您已登录,更改这些设置就不会将您从当前会话中注销,因此您可以在出现问题时恢复,而无需重新启动。我总是使用第二个连接进行测试,因为将自己锁定在数据库之外是一种嗡嗡声。并不是说我对此一无所知。
注意2:我强烈建议使用类似于此的 SQL 备份用户表以确保安全:
CREATE TABLE mysql.user_backup_YYYYMMDD LIKE mysql.user;
INSERT INTO mysql.user_backup_YYYYMMDD SELECT * FROM mysql.user;
Run Code Online (Sandbox Code Playgroud)
您可以通过使用以下 sql 更改系统变量“secure_auth”(如果您的用户帐户具有所需的权限)(即在 mysql 客户端中运行):
SET GLOBAL secure_auth="ON";
Run Code Online (Sandbox Code Playgroud)
或 SET GLOBAL secure_auth="OFF";
要查看当前值是多少:
SHOW GLOBAL VARIABLES LIKE '%auth%';
Run Code Online (Sandbox Code Playgroud)
要通过重新启动使其永久化,请更改您的值:/etc/my.cnf.d/server.cnf(或可能是您的 /etc/my.cnf - 希望它没有在两者中设置,但值得检查)
[mysqld]
secure-auth=on
Run Code Online (Sandbox Code Playgroud)
(注意:正如您所发现的,在您的 mariadb 服务器重新启动之前,不会加载 .cnf 中的更改)
启用 auth_secure 后,使用“旧密码”的用户将无法像以前那样登录。如果可能的话,目前最简单的方法是升级所有帐户的密码类型,以避免在尝试同时支持两者时出现任何问题。
您可以使用以下 SQL 查看当前帐户和(加密的)密码:
SELECT user, host, password FROM mysql.user;
Run Code Online (Sandbox Code Playgroud)
在更新之前,您可以通过将此 sql 与 mysql.user 表中的 PASSWORD 字段进行比较来验证您的密码是否是您认为的密码:
SELECT OLD_PASSWORD('What You Think Your Password Is');
Run Code Online (Sandbox Code Playgroud)
同样的事情,但对于新密码:
SELECT PASSWORD('newpass');
Run Code Online (Sandbox Code Playgroud)
从那里,您可以选择,但通常的方法是设置密码:
SET PASSWORD FOR 'foo'@'%' = PASSWORD('newpass');
Run Code Online (Sandbox Code Playgroud)
其中 foo 和 % 是 mysql.user 表中的 HOST 和 USER 字段。
另一个(时髦的)选项是使用ALTER USER命令清除密码并且没有INDENTIFIED BY 子句,如下所述:
https://mariadb.com/kb/en/library/alter-user/
显然,这可能会导致安全反喜。
您还可以通过更新语句设置密码字段,例如,如果您想将其设置回已保存的值:
UPDATE mysql.user SET PASSWORD="SOME SAVED VALUE" where USER = "sqllove" and host = "localhost";
Run Code Online (Sandbox Code Playgroud)
或者您可以将其设置回“旧密码”格式,如果您知道密码:
UPDATE mysql.user SET PASSWORD=OLD_PASSWORD("Old Password") where USER = "sqllove" and host = "localhost";
Run Code Online (Sandbox Code Playgroud)
这种方法的一个(可怕的)好处是,如果您要为多个用户设置密码,则可以在一个命令中完成 - 例如,使通过 localhost 在同一台机器上连接的人的密码“容易”:
UPDATE mysql.user set PASSWORD=PASSWORD("easy") where host="localhost";
Run Code Online (Sandbox Code Playgroud)
并确保您的最新用户更改立即可见,完成后,一些最终 SQL:
FLUSH privileges;
Run Code Online (Sandbox Code Playgroud)
我会一直登录到 MariaDB 客户端 - 进行更改、刷新、从另一个帐户进行测试、重新登录任何服务(即使出现问题,它们仍会继续工作,但下次登录尝试会失败),一旦安全,然后登录出去。
提示:如果您在 unix 中并登录到客户端并且需要运行 shell 命令,而不是退出您的客户端,您可以点击Ctrl-Z以获得一个 shell 提示(挂起您的客户端)程序,然后您可以运行 shell命令(即运行第二个客户端!或重新启动连接到数据库的服务),准备好后,输入%1以返回客户端(您可能需要点击enter以重新加载提示)。这适用于 unix 中的大多数控制台程序,而不仅仅是 MariaDB 客户端。如果您像Inception一样重复执行此操作,则返回命令将是 %2 和 %3 ,依此类推,具体取决于您下降的级别。但时间不会变慢。