开发数据库凭证最佳做法?

San*_*hal 5 mysql database development-environment credentials

处理内部开发数据库的凭据的最佳实践是什么?对于应用程序还是开发人员?

当前,我们为每个开发数据库创建一个单独的用户/密码,并在代码存储库中提交这些凭据。但是,我们希望摆脱将凭证存储在存储库中的趋势。问题在于我们的开发人员和应用程序都需要访问数据库。

  • 给予开发人员自己的个人帐户以使他们能够访问所有开​​发数据库是一种好习惯吗?甚至所有开发和生产数据库?
  • 开发人员应该在开发环境中使用自己的个人帐户吗?还是应该使用其他的?
  • 如果他们应该使用不同的帐户,那么每个开发数据库都应该有一套单独的凭据吗?还是我们应该创建一个可以访问开发人员可以在其所有应用程序中使用的所有dev数据库的帐户?
  • 如果我们应该为每个开发数据库使用单独的帐户,那么开发人员在为自己建立新的开发环境时应如何获得这些凭据?我们发现,尝试手动跟踪这些内容(例如Wiki)非常容易出错,并且很快就会过时。

如果重要的话,我们使用MySQL(准确地说是Percona)。

aku*_*sky 2

首先确保开发、登台和生产环境100%独立。因此MySQL 帐户也应该是分开的。有助于版本升级顺利且更安全。在 Percona 中,我做了十几个恢复案例,其中开发人员仅仅因为生产和开发数据库共享他的帐户而删除了生产数据库。

话虽如此,开发人员应该在开发数据库上有一个读写帐户,在临时数据库上有一个只读帐户,在生产数据库上有一个只读帐户。

为每个开发人员创建帐户,因此他们负责将它们存储在安全的地方。因此,您无需担心如何安全地存储/共享帐户。

显然密码不应该存储在存储库中。将配置模板保留在源代码树中:

    # cat config.php
    <?php

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

    ?> 
Run Code Online (Sandbox Code Playgroud)

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

    %files www
    %config(noreplace) %attr(640, root, apache)  %{_sysconfdir}/%{project_name}/config.php
Run Code Online (Sandbox Code Playgroud)