开发数据库凭据最佳实践?

5
处理内部开发数据库凭证的最佳实践是什么?包括应用程序和开发人员?
当前,我们为每个开发数据库创建单独的用户/密码,并将这些凭据提交到我们的代码库中。但我们想要摆脱在代码库中存储凭证的方法。问题在于我们的开发人员和应用程序都需要访问数据库。
以下是需要考虑的问题:
- 给开发人员提供一个个人帐户,使他们可以访问所有开发数据库是否是良好的实践?甚至包括所有开发和生产数据库? - 开发人员在其开发环境中应该使用自己的个人帐户吗?还是应该使用不同的帐户? - 如果他们应该使用不同的帐户,那么每个开发数据库是否应该有单独的一组凭据?或者我们是否应该创建一个可以访问所有开发数据库的帐户,开发人员可以在所有应用程序中使用? - 如果我们应该为每个开发数据库使用单独的帐户,开发人员如何获取这些凭据以便为自己设置新的开发环境?我们发现手动跟踪这些(例如,wiki)非常容易出错,并且很快就会过时。
如果相关,请注意我们使用MySQL(确切地说是Percona)。

您还应该告诉我们您正在使用哪种数据库管理系统(Postgres、Oracle、DB2等)。对于这些事情的最佳实践因DBMS系统而异。 - user330315
谢谢。我已将其添加到问题中。 - Sander Marechal
1个回答

2
首先,确保开发、预发布和生产环境完全独立。因此,MySQL帐户也应该是分开的。这有助于使版本升级更加顺畅,而且更加安全。在Percona中,我执行了数十个恢复操作,其中一个开发人员删除了生产数据库,仅因为生产和开发数据库共享了他的帐户。
话虽如此,开发人员应该在开发数据库上拥有读写帐户,在预发布数据库上拥有只读帐户,在生产数据库上也应该是只读的。
为每个开发人员创建帐户,使他们负责将其存储在安全的位置。这样,您就不需要烦恼如何以安全的方式存储/共享帐户。
显然,密码不应该存储在代码库中。将配置模板保存在源代码树中:
    # cat config.php
    <?php

    $mysql_user="@@MYSQL_USER@";
    $mysql_password="@@MYSQL_PASSWORD@";
    $mysql_host="@@MYSQL_HOST@";
    $mysql_db="@@MYSQL_DB@";

    ?> 

为了确保在升级过程中不被覆盖,请在.spec文件中说明。

    %files www
    %config(noreplace) %attr(640, root, apache)  %{_sysconfdir}/%{project_name}/config.php

谢谢。只是为了明确:您的开发人员会在开发环境中使用自己的个人帐户进行所有本地应用程序的检出吗? - Sander Marechal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接