什么是debian-sys-maint MySQL用户(以及更多)?

我已经被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)' 
  • 什么是debian-sys-maint用于?
    • 有没有更好的方法让软件包维护者做他们正在做的事情?
  • 丢失后恢复最简单的方法是什么?
  • 什么是这个用户的正确/最小的一组权限?
    • 似乎不好的主意“授予*。* …的所有特权”

编辑

另外的问题 – /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

希望这可以帮助 :)

戴夫