Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Введение в СУБД MySQL.doc
Скачиваний:
34
Добавлен:
18.04.2019
Размер:
1.45 Mб
Скачать

11. Лекция: Дополнительные функции MySql

  • Битовые функции

    • Побитовое ИЛИ ( | )

    • Побитовое И ( & )

    • Побитовый XOR (побитовое сложение по модулю 2) ( ^ )

    • Сдвиг числа влево ( << )

    • Сдвиг числа вправо ( >> )

    • Инвертировать биты ( ~ )

    • BIT_COUNT(N)

  • Функции шифрования

    • AES_ENCRYPT(строка, строка_ключа)

    • AES_DECRYPT(зашифрованная_строка, строка_ключа)

    • DECODE(зашифрованная_строка, строка_пароля)

    • ENCODE(строка, строка_пароля)

    • DES_DECRYPT(зашифрованная_строка [, строка_ключа])

    • DES_ENCRYPT(строка[, (номер_ключа | строка_ключа)])

    • ENCRYPT(строка [, нач])

    • MD5(строка)

    • PASSWORD(строка)

  • Информационные функции

    • BENCHMARK(количество, выражение)

    • CHARSET(строка)

    • COERCIBILITY(строка)

    • COLLATION(строка)

    • CONNECTION_ID()

    • CURRENT_USER()

    • DATABASE()

    • FOUND_ROWS()

    • LAST_INSERT_ID()

    • LAST_INSERT_ID(выражение)

    • USER()

    • SESSION_USER()

    • SYSTEM_USER()

    • VERSION()

  • Прочие функции

    • FORMAT(X,D)

    • GET_LOCK(строка, таймаут)

    • INET_ATON(выражение)

    • INET_NTOA(выражение)

    • IS_FREE_LOCK(строка)

    • MASTER_POS_WAIT(имя_журнала, позиция_в_журнале [, таймаут])

    • RELEASE_LOCK(строка)

    • UUID()

Битовые функции

MySQL использует для двоичных операций 64-битовые величиныBIGINT, следовательно, для двоичных операторов максимальный диапазон составляет 64 бита.

Побитовое или ( | )

mysql> SELECT 29 | 15;

-> 31

Побитовое и ( & )

mysql> SELECT 29 & 15;

-> 13

Побитовый XOR (побитовое сложение по модулю 2) ( ^ )

mysql> SELECT 1 ^ 1;

-> 0

mysql> SELECT 1 ^ 0;

-> 1

mysql> SELECT 11 ^ 3;

-> 8

Сдвиг числа влево ( << )

mysql> SELECT 1 << 2;

-> 4

Сдвиг числа вправо ( >> )

mysql> SELECT 4 >> 2;

-> 1

Инвертировать биты ( ~ )

mysql> SELECT 5 & ~1;

-> 4

BIT_COUNT(N)

Возвращает количество битов аргумента N, которые установлены в единицу

mysql> SELECT BIT_COUNT(29);

-> 4

Функции шифрования

Функции, описанные в данном разделе, шифруют и дешифруют значения данных. Если вы хотите сохранять результаты функции шифрования, которые могут иметь произвольные байтовые значения, применяйте столбцы типа BLOBвместо CHAR или VARCHAR, чтобы избежать потенциальных проблем с удалением завершающих пробелов, которые изменяют значения данных.

Aes_encrypt(строка, строка_ключа) aes_decrypt(зашифрованная_строка, строка_ключа)

Эти функции позволяют выполнять шифрование и дешифрацию данных с использованием официального алгоритма AES (Advanced Encryption Standard), ранее известного как "Rijndael". Применяется кодирование с 128-разрядным ключом, но можно расширить его до 256 разрядов, должным образом изменив исходные тексты. Длина ключа 128 бит выбрана, поскольку он работает намного быстрее и при этом обеспечивает приемлемый уровень безопасности.

Входные аргументы могут иметь любую длину. Если любой из них равен NULL, результатом функции также будет NULL.

Поскольку AES - алгоритм блочного типа, дополнение применяется для строк с нечетным количеством символов, и поэтому длина результирующей строки может быть рассчитана как 16* (trunc (длина_строки/16) +1).

Если функция AES_DECRYPT() обнаруживает неверные данные или неправильное дополнение, она возвращает NULL. Однако существует вероятность, что AES_DECRYPT() вернет значение, не равное NULL (возможно, "мусор"), если входные данные или ключ неверны.

Вы можете использовать AES-функции для сохранения данных в зашифрованной форме, модифицировав существующие запросы:

INSERT INTO t VALUES (1, AES_ENCRYPT('text', 'password'));

Можно обеспечить даже более высокий уровень безопасности, если не передавать значение ключа для каждого запроса, а сохранять его в переменной сервера во время подключения, например:

SELECT @password:='my password';

INSERT INTO t VALUES (1, AES_ENCRYPT('text', 'password'));

Функции AES_ENCRYPT() и AES_DECRYPT() были добавлены в MySQL 4.0.2 и могут рассматриваться как наиболее криптографически безопасные функции, доступные в MySQL на текущий момент.