You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Drupal 9数据库迁移至自建MySQL并解密数据用于自定义站点

解决Drupal加密数据访问问题(自定义站点读取用户/图片/节点数据)

先明确加密类型

  • 排查Drupal是否启用了encrypt或类似字段加密模块:查看后台模块列表,或检查modules目录、settings.php文件(看是否有$settings['encryption_key']这类密钥配置)。
  • 若无相关加密模块/配置,大概率是数据库层面的透明加密(如MySQL TDE、服务器磁盘加密)。

字段级加密(如encrypt模块)的处理方法

直接在Drupal环境内编写脚本解密并导出数据,这是最可靠的方式:

  1. 在Drupal根目录新建decrypt_export.php文件,写入示例代码(根据实际加密字段调整):
define('DRUPAL_ROOT', getcwd());
require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);

// 导出解密后的用户数据
$users = \Drupal\user\Entity\User::loadMultiple();
$export_data = [];
foreach ($users as $user) {
    $export_row = [
        'uid' => $user->id(),
        'username' => $user->get('name')->value,
        'email' => $user->get('mail')->value,
        // 替换为实际加密字段,调用Drupal解密服务
        'encrypted_profile' => \Drupal::service('encryption')->decrypt($user->get('field_encrypted_profile')->value)
    ];
    $export_data[] = $export_row;
}

// 生成明文CSV文件
$fp = fopen('users_decrypted.csv', 'w');
fputcsv($fp, array_keys($export_data[0])); // 写入表头
foreach ($export_data as $row) {
    fputcsv($fp, $row);
}
fclose($fp);

// 节点数据可复用类似逻辑,替换为\Drupal\node\Entity\Node::loadMultiple()
  1. 命令行运行脚本:php decrypt_export.php,生成的CSV可直接用于自定义站点。

数据库透明加密的处理方法

  • 在原Drupal环境用mysqldump导出数据:原环境数据库客户端已配置解密权限,导出的SQL文件为明文。命令示例:
mysqldump -u [数据库用户名] -p [Drupal数据库名] > drupal_data_plain.sql
  • 将导出的SQL文件导入自定义站点的数据库,即可直接读取明文数据。

图片数据处理

  • Drupal图片默认存储在sites/default/files目录,自定义站点可直接读取该目录文件;也可将文件复制到新站点存储目录,同步更新数据库内的文件路径字段。

注意事项

  • 妥善保管解密密钥,避免泄露。
  • 导出后随机抽查数据,确认解密结果正确。
  • 自定义字段加密需对应调整脚本内的字段名称与解密逻辑。

内容的提问来源于stack exchange,提问作者josephgut

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 00:22:44