Ну, это может быть немного наивно, но как насчет простого шифрования на стороне сервера [php, я полагаю] перед записью в БД, а затем расшифровывания его обратно при чтении? Похоже, ваша проблема в том, что вы не хотите, чтобы администратор сервера легко считывал ваши данные. Если вы используете Symfony, вы, вероятно, можете сделать это достаточно глубоко в модели, чтобы ваш код не изменился.
После некоторых раскопок, вот как бы я это сделал, если бы чувствовал себя особенно смелым.
Отредактируйте buildParams () в xxx / symfony / vendor / propel / util / BasePeer.php, на 860 вы найдете
$params[] = array('column' => $crit->getColumn(), 'table' => $crit->getTable(), 'value' => $crit->getValue());
изменить на
$params[] = array('column' => $crit->getColumn(), 'table' => $crit->getTable(), 'value' => your_encryption_method($crit->getValue()));
(если я что-то пропустил) все записи symfony / propel в базу данных в конечном итоге вызовут эту функцию, поэтому все, что вы пишете в базу данных, шифруется с помощью your_encryption_method ().
Попробуйте, и если это работает, и вы все еще чувствуете себя смелым, измените функцию addHydrate () в xxx / symfony / vendor / propel-generator / classes / propel / engine / builder / om /php5/PHP5BasicObjectBuilder.php (строка 668), поэтому код propel hydrate () генерируется для вас при вызове symfony propel-build-model или symfony-propel-build-all автоматически расшифрует все из базы данных.
в настоящее время оно должно выглядеть как
case PropelTypes::DATE:
case PropelTypes::TIME:
case PropelTypes::TIMESTAMP:
$script .= "
\$this->$clo = \$rs->get$affix(\$startcol + $n, null);
";
break;
default:
$script .= "
\$this->$clo = \$rs->get$affix(\$startcol + $n);
";
вы хотите изменить его на что-то вроде
case PropelTypes::DATE:
case PropelTypes::TIME:
case PropelTypes::TIMESTAMP:
$script .= "
\$this->$clo = \$rs->get$affix(\$startcol + $n, null);
";
break;
default:
$script .= "
\$this->$clo = \my_decryption_function($rs->get$affix(\$startcol + $n));
";
После того, как вы сделаете это изменение, запустите symfony propel-build-model и дайте мне знать, сработало ли это :-). Удачи, и вы, вероятно, уже знаете это, но сделайте резервные копии этих файлов, прежде чем изменять их ... о, и так как вы модифицируете ядро Symfony, у ваших других проектов будут проблемы, если вы не хотите, чтобы все они записывали зашифрованные данные в дб