Mysql MariaDB 10.1在centos 7上将旧密码更改为新密码,并启用安全身份验证

Mysql MariaDB 10.1在centos 7上将旧密码更改为新密码,并启用安全身份验证,mysql,database,mariadb,centos7,database-administration,Mysql,Database,Mariadb,Centos7,Database Administration,我现在已经将MariaDB 5.5升级到10.1,它说mysql使用安全身份验证并将旧密码更改为新密码。我已在my.cnf中禁用安全身份验证,并且可以登录 现在我的问题是如何将旧密码更改为新密码并在数据库上启用安全身份验证 建议我怎么做。我假设您的MariaDB服务器没有您不知道其密码的其他用户,并且您具有修改用户和设置系统级变量所必需的权限。超级私人可能足够了:) 注意:您可能会面临将自己锁定在外的风险,但只要您登录,更改这些设置就不会使您退出当前会话,这样您就可以在出现问题时进行恢复,而无需

我现在已经将MariaDB 5.5升级到10.1,它说mysql使用安全身份验证并将旧密码更改为新密码。我已在my.cnf中禁用安全身份验证,并且可以登录

现在我的问题是如何将旧密码更改为新密码并在数据库上启用安全身份验证


建议我怎么做。

我假设您的MariaDB服务器没有您不知道其密码的其他用户,并且您具有修改用户和设置系统级变量所必需的权限。超级私人可能足够了:)

注意:您可能会面临将自己锁定在外的风险,但只要您登录,更改这些设置就不会使您退出当前会话,这样您就可以在出现问题时进行恢复,而无需重新启动。我总是使用第二个连接进行测试,因为将自己锁定在数据库之外是一件很麻烦的事情。并不是说我对那件事一无所知

注2:为了安全起见,我强烈建议使用类似以下内容的SQL备份用户表:

CREATE TABLE mysql.user_backup_YYYYMMDD LIKE mysql.user;
INSERT INTO mysql.user_backup_YYYYMMDD SELECT * FROM mysql.user;
您可以通过使用以下sql(即在mysql客户端中运行)更改系统变量“secure_auth”(如果您的用户帐户具有所需的权限),实时修改“secure_auth”设置(这样您就不必重新启动mariadb服务器):

或 设置全局安全\u auth=“关闭”

要查看当前值,请执行以下操作:

SHOW GLOBAL VARIABLES LIKE '%auth%';
要通过重新启动使其永久化,请更改以下内容中的值: /etc/my.cnf.d/server.cnf(或者可能是您的/etc/my.cnf-希望这两个选项都没有设置,但值得检查)

(注意:正如您所发现的,在重新启动mariadb服务器之前,.cnf中的更改不会被加载)

启用auth_secure后,使用“旧密码”的用户将无法像以前那样登录。如果可能的话,最简单的方法是升级所有帐户上的密码类型,以避免试图同时支持这两种类型时出现任何问题

您可以使用以下SQL查看当前帐户和(加密)密码:

SELECT user, host, password FROM mysql.user;
在更新之前,您可以通过将此sql与mysql.user表中的密码字段进行比较来验证您的密码是否与您认为的密码相同:

SELECT OLD_PASSWORD('What You Think Your Password Is');
同样的事情,但是对于新密码:

SELECT PASSWORD('newpass');
SET PASSWORD FOR 'foo'@'%' = PASSWORD('newpass');
从那里,您可以选择,但通常的方法是设置密码:

SELECT PASSWORD('newpass');
SET PASSWORD FOR 'foo'@'%' = PASSWORD('newpass');
其中foo和%是mysql.USER表中的主机和用户字段

另一个(funky)选项是使用ALTER USER命令和noidentifiedBY子句清除密码,如下所述:

显然,这可能会导致安全问题

还可以通过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客户端。如果像《盗梦空间》那样反复执行,返回命令将是%2和%3,依此类推,具体取决于您下了多少层。但时间不会变慢。

这感觉像是超级用户或Unix和Linux SE的问题。更不用说,如果你做了网络搜索,我打赌这个问题已经得到了回答。您尝试了什么?我已经在my.cnf中禁用了安全身份验证,并且能够登录mysql,成功更改了root的密码。现在我想重新启用安全身份验证,所以我只是将其从my.cnf中删除,同样的问题仍然存在。我开始困惑如何启用和使用新密码。