2014-09-01 3 views
0

Я новичок в PostgreSQL. Я читал из учебника. Я могу успешно получить SELECT, INSERT, DELETE и UPDATE данные (я знаю, что это только основная часть).Функция шифрования PostgreSQL не найдена

Моя проблема теперь в том, чтобы зашифровать данные. Я ищу сейчас учебник, но мне не удалось найти ответ на мой вопрос. Я пробую этот код в «выполнить произвольный SQL» (отредактируйте: в PgAdmin-III? Какой-нибудь другой инструмент?).

INSERT INTO "admin" ("email_address", "password", "role_type", "status") 
VALUES ('encrypt(''sdf'', digest(''secret2'', ''sha256''), ''aes'') ', 'sd', 'admin', 'Active') 

но результат я получаю это

ERROR: function encrypt(unknown, unknown) does not exist 

Как я могу получить эту функцию?

До сих пор, как я уже прочитал, они только показывают код, как его использовать.

ответ

2

Функция encrypt, которую вы называете, является предположительно encrypt(bytea, bytea, text) от the bundled pgcrypto extension.

Для получения более подробной информации см. Документацию, приведенную выше.

Чтобы загрузить расширение:

CREATE EXTENSION pgcrypto; 

как суперпользователя.

Действительно, полезный криптограф не так прост, как вызов функции encrypt. Где вы храните ключ? Является ли сервер базы данных безопасным (и если да, то почему вы шифруете данные)? Может ли атакующий обернуть или заменить функцию encrypt, чтобы украсть ключи? Могут ли они включить ведение журнала запросов и украсть ключ из журнала сервера? Запустить ошибку, которая заставила оператор регистрироваться и украсть ключ из сообщения об ошибке? и т. д.

Правильная криптография - это не просто вопрос о притирании секретного соуса шифрования на код. Вам нужно рассказать о возможных злоумышленниках, против которых вы хотите защитить, что вы не пытаетесь защитить, и каковы их возможности. Затем настройте подходящие системы на основе предполагаемых возможностей злоумышленника и затрат/неудобств/времени простоя/риска, которые вы готовы принять.

+0

Это означает, что мне не нужно зашифровывать мои данные в моей базе данных? Я знаю, что у вас больше опыта, чем у меня, и я просто надеюсь, что могу получить дополнительную информацию о шифровании в базе данных. Честно говоря, документация меня пугает. – user3818576

+0

Простой запрос, который я знаю, это просто выбрать, обновить, удалить и добавить. Но теперь я узнал, что мы можем шифровать данные в базе данных. Мне теперь интересно узнать больше об этом – user3818576

+0

@ user3818576 Возможно, вы захотите прочитать http://dba.stackexchange.com/a/24379/7788. Действительно, если вы не понимаете, что вы пытаетесь выполнить *, зашифровав данные, не делайте этого. –

0

Эти функции являются частью внешнего модуля pgcrypto, и вы должны включить его в базу данных, в которой вы хотите использовать эти функции.

После того, как вы установили PostgreSQL, выполните следующую команду:

psql -d <database> -f /usr/share/postgresql/<version>/contrib/pgcrypto.sql 

Где <database> это имя базы данных, которую вы используете, и <version> с версией PostgreSQL вы установили.

+0

команду, которую вы мне дали. Это применимо в окнах? – user3818576

+1

Do * not * просто запустите скрипт расширения. На самом деле, если вы попытаетесь сделать это, вы должны получить сообщение об ошибке, чтобы вместо этого использовать 'CREATE EXTENSION'. См. Руководство. –

+0

@ user3818576 В любой Windows или другой другой платформе просто «CREATE EXTENSION pgcrypto;». Но серьезно, подумайте о том, чего вы действительно пытаетесь достичь. Плохое шифрование хуже, чем отсутствие шифрования, это ложное чувство безопасности. –

Смежные вопросы