【发布时间】:2017-05-18 20:43:22
【问题描述】:
用例
要设置开发环境,需要一个应用程序数据库的 mysql 转储。转储源是生产数据库。
问题
我不想将转储提供给任何人,因为它包含(散列的)用户密码。
解决方案构思
在授予对转储的访问权限之前,在服务器端替换所有用户密码(用于开发目的的所有用户一个密码就可以了)。
环境
- Laravel 应用程序
- MySQL 数据库
- bash 脚本可以在 Capistrano 上运行或通过 ssh 在服务器上手动执行
任何想法如何以聪明的方式解决这个问题?
示例转储(仅 users 表)
# ************************************************************
# 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 */;
【问题讨论】:
-
请在您的问题中添加示例转储(用相同数量的随机字符替换散列密码)以及该示例转储所需的输出。
-
最简单的方法是将数据库加载到本地服务器,更新密码,创建第二个转储。
-
@Cyrus 我添加了一个示例转储(仅数据库的用户表)
-
@VasilShaddix 我正在寻找自动化解决方案……
-
您可以控制流程的哪一部分?我的意思是,你有能力改变哪些部分?你能规定什么被倾倒在首位吗?或者,您是否遇到了文本转储,需要清理该文件?另外:您使用的是什么操作系统?是否只需要使用 bash 完成?我们在谈论多少条记录?
标签: php mysql bash laravel laravel-5