我已经被默认安装在从 Ubuntu 存储库安装的 mysql-server 软件包上的“debian-sys-maint”用户咬了好几次。
通常情况下,我提取了我们的生产数据库(不在 Debian/Ubuntu 上运行)的新副本以进行故障排除或新开发,并且忘记排除 mysql.user 表,因此失去了 debian-sys-maint 用户。
如果我们出于某种原因添加新的 mysql 用户,我必须将它们“合并”到我的开发环境中,而不是仅仅覆盖表。
在没有用户的情况下,我的系统似乎仍然可以正常运行,但会出现以下错误:
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 中的密码是否已经散列或者这是明文密码?当你去重新创建用户时很重要,而且我似乎从来没有在第一次尝试时就做对了。
谢谢
它用于的一件主要事情是告诉服务器滚动日志。它至少需要重新加载和关闭权限。
查看文件/etc/logrotate.d/mysql-server
脚本使用它
/etc/init.d/mysql
来获取服务器的状态。它用于优雅地关闭/重新加载服务器。这是 README.Debian 的引述
最好的计划就是不要失去它。如果您确实丢失了密码,请使用其他帐户重置密码。如果您失去了 mysql 服务器上的所有管理员权限,请按照指南重置 root 密码,然后修复
debian-sys-maint
.您可以使用这样的命令来构建一个 SQL 文件,以后可以使用该文件重新创建帐户。
密码在安装时没有经过散列/加密,但新版本的 mysql 现在可以加密凭据(请参阅:https ://serverfault.com/a/750363 )。
debian-sys-maint用户默认是root 等效用户。它被 Debian 系统上的某些维护脚本使用,并且作为副作用,允许在盒子上具有 root 访问权限的用户查看 /etc/mysql/debian.cnf 中的明文密码(好还是坏?)
您可以通过以下方式重新创建用户:
只需确保密码与/etc/mysql/debian.cnf 中的密码匹配
我只想发表评论,但我认为正确的语法值得拥有自己的条目。这将创建debian-sys-maint用户:
如果您还有 /etc/mysql/debian.cnf 文件,只需使用其中的密码即可。
随意提出一个更
偏执的安全解决方案。您还可以:
这将为您提供重新创建 debian-sys-maint 用户的选项。现有用户和数据库是安全的。
debian-sys-maint
如果您只是出于某种logrotate.d
目的而需要添加用户,则不应授予ALL PRIVILEGES
或GRANT OPTION
- 这是一个不必要的巨大安全漏洞。相反,您可以只添加具有这样RELOAD
权限的用户(假设您正在访问您的数据库root
,并且您将 xxxxxx 替换为您的密码)2019 更新
该答案可能已过时-请参阅下面的强烈意见。
代替
我认为
因为密码没有散列......?
debian-sys-maint 所需权限
除了 debian-sys-maint 用户所需的最小权限集之外,其他答案已经充分解决了所有问题。在这方面,这里的许多答案都是错误的,实际上是危险的。不要在没有阅读和理解以下内容的情况下降低 debian-sys-maint 权限(包括授权选项):
Debian 维护者并没有随意地将所有权限授予用户。这是需要什么,在哪里以及为什么。其中一些特权是其他特权的超集,但我将单独列出它们,以防您想要自定义事物并删除对它们的要求:
最后一个当然是对特权的主要要求。mysql_upgrade 的手册页指出:
警告 如果您决定减少 debian-sys-maint 拥有的权限,请确保您准备好手动处理任何未来的 debian 安全更新和/或涉及 MySQL 的升级。如果您使用降低的 debian-sys-maint 权限对 MySQL 软件包执行更新,并且如果 mysql_upgrade 无法完成,它可能会使您的数据库处于未定义(读取损坏)状态。在更新出现之前,降低权限可能不会有任何明显的日常问题,因此不要以您已经降低权限而没有有害影响的事实作为认为它是安全的基础。
作为对此的附注,请查看此 mysqlperformanceblog 帖子,了解您可能想要禁用 debian 特定内容的原因。
使用 MySQL 5.6+ 时,我建议使用该
mysql_config_editor
命令为'debian-sys-maint'@'localhost'
使用相关密码的用户创建一个条目,这意味着密码不需要以纯文本形式存储在服务器上。mysql_config_editor set --login-path=debian-sys-maint --host=localhost --user=debian-sys-maint --password
/etc/mysql/debian.cnf
在此之后,可以更改debian 特定的配置文件,因此用户名和密码详细信息不会存储在文件中。最后,更改 MySQL 的 logrotate 文件,以便它使用存储在
~/.mylogin.cnf
文件中的登录详细信息,而不是通过替换 debian 特定文件/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf
和
/usr/bin/mysqladmin --login-path=debian-sys-maint
希望这可以帮助 :)
戴夫