我正在尝试将我们的一个项目打包到 Ubuntu/CentOS 软件包中。该项目是一个典型的 Web 框架,需要部署一个 tomcat war 文件、创建一些目录并运行一个 mysql 脚本,该脚本创建一个新用户 + 带有一些表的数据库等。
现在我不确定如何打包 mysql 脚本。如果机器上尚未安装 mysql,或者用户已经安装了可以运行的 mysql,它应该可以正常工作。我不确定的是如何使用 root 登录 mysql,以便我可以添加新用户和表。
我是否应该在安装过程中提示用户输入其 mysql-root 密码?这可能会增加混乱。或者我可以绕过身份验证吗?假设该过程无论如何都是以 sudo 执行的,我可能能够执行 mysqld_safe --skip-grant-tables &,并使用 mysql-root 登录而无需任何密码。
在安装软件包期间运行 mysql 脚本的常见做法是什么?
答案1
通常的做法是在安装时不这样做。我能想到的 3 个很好的理由是:
- 出于安全原因,尝试将默认用户名/密码组合与软件包一起发送并不是一个好主意,因为它们会成为许多安装的弱点。这会增加最终用户的工作量,但坚持让他们为服务设置自己的凭据会更安全。
- 您无法提前知道用户是否希望将数据库托管在与应用程序相同的服务器上,因此尝试在安装过程中进行设置对于某些用户来说会很烦人且具有侵入性。
- 在安装过程中提示输入超级用户密码是绝对不行的。如果我看到这种情况,我会立即按 Ctrl+C 然后跑一英里。尝试旁路通过滥用提升的权限来实现这一点就更加糟糕了。
如果您想简化安装过程,您可以像许多软件包一样使用默认配置。首次访问时,网站可以检查是否仍设置了默认配置,如果是,则显示初始安装说明。
如果您想铺开红地毯,您可以编写一个单独的安装脚本来完成大部分工作,甚至可以将这个过程编码到您的应用程序中;提示输入新的 MySQL 凭据、服务器和数据库名称。您应该鼓励用户使它们独一无二,而不是提供默认值。一旦您获得这些详细信息,您就可以使用它们来加载初始架构和数据。