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