我已经将MariaDB 5.5升级到10.1,它说mysql使用secure-auth并将旧密码更改为新密码。我在my.cnf中禁用了secure-auth并且能够登录。
现在我的问题是如何将旧密码更改为新密码并在数据库上启用secure-auth。
建议我该怎么做。
答案 0 :(得分:1)
我将假设你的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 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,依此类推,具体取决于您关闭的级别数。但时间不会变慢。