2015-04-21 3 views
1

Этот оператор возвращает нуль вместо 64 случайных байт:DBMS_CRYPTO.RANDOMBYTES возвращает нуль

select DBMS_CRYPTO.RANDOMBYTES(64) from dual; 

Что вызывает это вернуть нуль? База данных - это Oracle 10.1.0.2.0, работающая на Windows Server 2003, и я хочу использовать случайные байты как соль для хеширования паролей.

Edit: Вот выход из 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, но решил не использовать эту старую базу данных.

+0

какая ОС вы используете? – anudeepks

+0

Работает на Windows Server 2003. – johanrex

+0

Можете попробовать один раз у пользователя sys и посмотреть, сталкиваетесь ли вы с той же проблемой? – anudeepks

ответ

0

Он отлично работает. Я тестировал его на Oracle 12c.

Update

Я проверил Мой Oracle Support (Metalink), однако, не нашел ничего, связанное с этой функцией, возвращающей NULL. Конечно, не ошибка.

Во всяком случае, глядя глубже в функции и его использование в документации, я наткнулся на SQLNET.CRYPTO_SEED

SQLNET.CRYPTO_SEED

Назначение

Используйте параметр SQLNET.CRYPTO_SEED указать символы генерируют криптографические ключи . Чем более случайными являются символы , тем сильнее клавиши. Строка должна быть 10-70 случайных символов. Этот необязательный параметр необходим для шифрования или контрольных сумм. Шифрование включено, если для клиента указан параметр SQLNET.ENCRYPTION_CLIENT , а для базы данных указан параметр SQLNET.ENCRYPTION_SERVER; checkumming включается, если для клиента задан параметр 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> 
+0

Да, это результат, которого я ожидал. Но вместо этого я получаю null в результате. Я не знаю, что вызывает нуль. – johanrex

+0

@ user1073476 Я думаю, что Лалит хочет сказать вам, что вам нужно обновить вашу СУБД, вашу ОС или и то, и другое. –

+0

Ну, 'DBMS_CRYPTO.RANDOMBYTES' доступен от 10 г и выше. –

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