我已经被debian-sys-maint用户多次咬了,这个用户默认安装在从Ubuntu存储库安装的mysql-server软件包上。
通常会发生什么是我拉我们的生产数据库(这不在Debian / Ubuntu上运行)的新副本,以排除故障或新的开发,忘记排除mysql.user表,从而失去了debian-sys-maint用户。
如果我们为了任何原因添加新的mysql用户,我必须将这些用户“合并”到我的开发环境中,而不是仅仅叠加表。
没有用户我的系统似乎仍然function,但困扰与错误,如:
sudo /etc/init.d/mysql restart Stopping MySQL database server: mysqld...failed. error: 'Access denied for user 'debian-sys-maint'@'localhost' (using password: YES)'
编辑
另外的问题 – /etc/mysql/debian.cnf中的密码是否已经被哈希或者是这个明文密码? 当你重新创build用户时,这很重要,而我从来没有像第一次尝试那样做。
谢谢
什么是debian-sys-maint用于?
默认情况下它用于告诉服务器滚动日志。 它至less需要重新加载和closures权限。
请参阅文件/etc/logrotate.d/mysql-server
它被/etc/init.d/mysql
脚本用来获取服务器的状态。 它用于正常关机/重新加载服务器。
这里是来自README.Debian的引用
* MYSQL WON'T START OR STOP?: ============================= You may never ever delete the special mysql user "debian-sys-maint". This user together with the credentials in /etc/mysql/debian.cnf are used by the init scripts to stop the server as they would require knowledge of the mysql root users password else.
丢失后恢复最简单的方法是什么?
最好的计划是不要失去它。
您可以使用像这样的命令来构build一个SQL文件,稍后您可以使用它来重新创build该帐户。
mysqldump --complete-insert --extended-insert=0 -u root -p mysql | grep 'debian-sys-maint' > debian_user.sql
/etc/mysql/debian.cnf中的密码已被散列
密码不被散列。
你也可以:
sudo dpkg-reconfigure mysql-server-5.0
这将使您可以select重新创builddebian-sys-maint用户。 现有的用户和数据库是安全的。
我只想评论,但我认为正确的语法值得它自己的条目。 这将创builddebian-sys-maint用户:
mysql> GRANT ALL PRIVILEGES on *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY 'plaintextpassword' WITH GRANT OPTION; FLUSH PRIVILEGES;
如果你仍然有/etc/mysql/debian.cnf文件,只需使用那里的密码。
随意想出一个更偏执的安全解决scheme。
debian-sys-maint用户默认是一个等同的根 。 它在Debian系统中被某些维护脚本所使用,并且作为一个副作用,允许用户通过root权限访问/etc/mysql/debian.cnf中的明文密码(好还是不好)?
您可以通过以下方式重新创build用户:
GRANT ALL PRIVILEGES on *.* TO `debian-sys-maint`@`localhost` IDENTIFIED BY PASSWORD('your password') WITH GRANT OPTION;
只要确保密码匹配 /etc/mysql/debian.cnf
如果你需要添加debian-sys-maint
用户只是为了logrotate.d
目的,你不应该授予ALL PRIVILEGES
或者授予GRANT OPTION
– 这是一个不必要的巨大的安全漏洞。 相反,你可以像这样用RELOAD
权限添加用户(假设你以root
身份访问你的数据库,并用你的密码replacexxxxxx)
# add the user with the reload right GRANT RELOAD on *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY 'xxxxxx'; # reload the rights FLUSH PRIVILEGES; # double check select * from mysql.user;
代替
GRANT ALL PRIVILEGES on *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY PASSWORD('your password') WITH GRANT OPTION; FLUSH PRIVILEGES;
我认为
GRANT ALL PRIVILEGES on *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY 'your password' WITH GRANT OPTION; FLUSH PRIVILEGES;
因为密码不被哈希…?
作为一个旁注,看看这个mysqlperformanceblog文章 ,为什么你可能想禁用debian特定的东西。
当使用MySQL 5.6+时,我build议使用mysql_config_editor
命令为用户使用相关密码创build一个'debian-sys-maint'@'localhost'
条目,这意味着密码不需要以纯文本服务器。
mysql_config_editor set --login-path=debian-sys-maint --host=localhost --user=debian-sys-maint --password
在这之后,可以修改debian特定的configuration文件/etc/mysql/debian.cnf
这样用户名和密码的详细信息就不会存储在文件中。
最后,修改MySQL的logrotate文件,以便它使用存储在~/.mylogin.cnf
文件中的login细节,而不是通过replacedebian特定的文件
/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf
同
/usr/bin/mysqladmin --login-path=debian-sys-maint
希望这可以帮助 :)
戴夫