DBMS_CRYPTO.RANDOMBYTES возвращает ноль
Этот оператор возвращает ноль вместо 64 случайных байтов:
select DBMS_CRYPTO.RANDOMBYTES(64) from dual;
Что заставляет его возвращать ноль? База данных - Oracle 10.1.0.2.0, работающая на Windows Server 2003, и я хочу использовать случайные байты в качестве соли для хеширования паролей.
Изменить: Вот вывод из sqlplus:
Connected to:
Oracle Database 10g Release 10.1.0.2.0 - Production
SQL> select DBMS_CRYPTO.RANDOMBYTES(64) from dual;
DBMS_CRYPTO.RANDOMBYTES(64)
--------------------------------------------------------------------------------
SQL>
Edit2: при переходе на Oracle 11 запрос работает. Я понятия не имею, почему он не работает в Oracle 10, но решил не использовать эту старую базу данных.
1 ответ
Работает отлично. Я проверил это на Oracle 12c.
Обновить
Я проверил My Oracle Support (Metalink), однако не нашел ничего связанного с этой функцией, возвращающей NULL. Конечно, не ошибка.
В любом случае, рассматривая функцию и ее использование в документации, я наткнулся на SQLNET.CRYPTO_SEED.
SQLNET.CRYPTO_SEED
Цель
Используйте параметр SQLNET.CRYPTO_SEED, чтобы указать символы, используемые при генерации криптографических ключей. Чем больше случайных символов, тем сильнее клавиши. Строка должна содержать 10-70 случайных символов. Этот необязательный параметр необходим, когда включено шифрование или контрольная сумма. Шифрование включается, если для клиента указан параметр SQLNET.ENCRYPTION_CLIENT, а для сервера базы данных задан параметр SQLNET.ENCRYPTION_SERVER; контрольная сумма включена, если для клиента указан параметр SQLNET.CRYPTO_CHECKSUM_CLIENT, а для сервера базы данных - параметр SQLNET.CRYPTO_CHECKSUM_SERVER.
Возможно, параметр неправильно установлен в вашей среде. У меня нет версии 10g (хотя и устарела) для тестирования.
Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing option
SQL> select DBMS_CRYPTO.RANDOMBYTES(64) from dual;
DBMS_CRYPTO.RANDOMBYTES(64)
--------------------------------------------------------------------------------
427AECD44D27CDF6CDC8F290D9F8079109BAB8AECD7E687E7ADF8E15825BBDF3D746FBC181059443
965B1425B224CC46E8CD07CC2D02B2E023238E8883520A19
SQL>