php - 自动替换服务器端 mysql 数据库转储中的用户密码 (Laravel)

标签 php mysql bash laravel laravel-5

用例

要设置开发环境,需要应用程序数据库的 mysql 转储。转储来源是生产数据库。

问题

我不想将转储提供给任何人,因为它包含(散列的)用户密码。

解决思路

在授予对转储的访问权限之前,在服务器端替换所有用户密码(用于开发目的的所有用户一个密码就可以)。

环境

  • Laravel 应用
  • MySQL数据库
  • bash 脚本可以在 Capistrano 上运行,也可以通过 ssh 在服务器上手动执行

有什么想法可以巧妙地解决这个问题吗?

示例转储(仅用户表)

# ************************************************************
# Sequel Pro SQL dump
# Version 4541
#
# http://www.sequelpro.com/
# https://github.com/sequelpro/sequelpro
#
# Host: 127.0.0.1 (MySQL 5.7.12)
# Datenbank: app
# Erstellt am: 2017-01-04 14:22:35 +0000
# ************************************************************


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;


# Export von Tabelle users
# ------------------------------------------------------------

DROP TABLE IF EXISTS `users`;

CREATE TABLE `users` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `role` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `tenant_id` int(10) unsigned DEFAULT NULL,
  `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `email` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `password` varchar(60) COLLATE utf8_unicode_ci NOT NULL,
  `remember_token` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `users_email_tenant_id_role_unique` (`email`,`tenant_id`,`role`),
  KEY `users_tenant_id_index` (`tenant_id`),
  CONSTRAINT `users_tenant_id_foreign` FOREIGN KEY (`tenant_id`) REFERENCES `tenants` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

LOCK TABLES `users` WRITE;
/*!40000 ALTER TABLE `users` DISABLE KEYS */;

INSERT INTO `users` (`id`, `role`, `tenant_id`, `name`, `email`, `password`, `remember_token`, `created_at`, `updated_at`)
VALUES
    (1,'admin',1,'appadmin','admin@example.com','123$15$g4qKHcS7zHercuNJobfFxOTWGoW7YN.tphFdddGIIEXkrkE8Etxxx',NULL,'2017-01-04 14:19:04','2017-01-04 14:19:04');

/*!40000 ALTER TABLE `users` ENABLE KEYS */;
UNLOCK TABLES;

/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

最佳答案

我建议使用 sql 方式:

create table users_tmp like users;
insert into users_tmp select * from users;
update users_tmp set password='whatever';

导入之后

rename table users_tmp to users;

关于php - 自动替换服务器端 mysql 数据库转储中的用户密码 (Laravel),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41465842/

相关文章:

bash - 在两个分隔符之间提取多行数据

bash - 如何避免在终端启动时总是输入 id_rsa 的密码?

javascript - 查询阻止从 php 提交响应时的表单

php - FB App 必须使用页面访问 token 调用此方法

PHP根据两行从数据库中检索不同的数据

mysql - SQL:每个饮酒者经常光顾的酒吧(使用 NOT EXISTS)

mysql - 起诉 Laravel 查询生成器时,每月计算客户数量不起作用

mysql - 我将如何设置 if account_status = 1 那么我可以登录否则无法登录?

c++ - 比较两个文件,找到差异吗?

php - 谷歌语音 PHP OAuth 2.0