Моя программа COBOL не может подключиться к Oracle, если поле пароля определено дольше, чем фактическая длина пароля для пользователя. то есть, если значение пароля - «mypasswd», переменная хоста для хранения пароля должна быть определена с помощью «PIC X (8)», в противном случае соединение не будет установлено; Например:
1 IDENTIFICATION DIVISION.
2 PROGRAM-ID. SAMPLE.
3 ENVIRONMENT DIVISION.
4 DATA DIVISION.
5 WORKING-STORAGE SECTION.
6 EXEC SQL BEGIN DECLARE SECTION END-EXEC.
7 01 USERNAME PIC X(010).
8 01 PASSWD PIC X(010).
9 01 DBSTRING PIC X(020).
10 EXEC SQL END DECLARE SECTION END-EXEC.
11 EXEC SQL INCLUDE SQLCA END-EXEC.
12
13 PROCEDURE DIVISION.
14 BEGIN-PGM.
15 EXEC SQL WHENEVER SQLERROR
16 DO PERFORM SQL-ERROR
17 END-EXEC.
18 LOGON.
19 MOVE "myuser" TO USERNAME.
20 MOVE "mypasswd" TO PASSWD.
21 MOVE "mydb" TO DBSTRING.
22 EXEC SQL
23 CONNECT :USERNAME IDENTIFIED BY :PASSWD USING :DBSTRING
24 END-EXEC.
25 LOGOUT.
26 DISPLAY "HAVE A GOOD DAY.".
27 EXEC SQL COMMIT WORK RELEASE END-EXEC.
28 STOP RUN.
29 SQL-ERROR.
30 EXEC SQL WHENEVER SQLERROR CONTINUE END-EXEC.
31 DISPLAY "ORACLE ERROR DETECTED:".
32 DISPLAY SQLERRMC.
33 EXEC SQL ROLLBACK WORK RELEASE END-EXEC.
34 STOP RUN.
Я должен получить сбой подключения: ОБНАРУЖЕНА ОШИБКА ORACLE: ORA-01017: неверное имя пользователя / пароль; вход в систему запрещен
Но когда я меняю определение поля пароля на: 8 01 PASSWD PIC X (008). т.е. длина равна длине реального значения пароля (length ("mypasswd") = 8), программа может успешно подключиться к Oracle.
Моя ситуация такова, что нам нужно, чтобы пользователи могли предоставить свое собственное имя пользователя и пароль, поэтому мы должны сначала определить поля имени пользователя и пароля, достаточно длинные, чтобы сохранить максимальную длину, которую мы разрешаем. Однако, как указано выше, все запросы на соединение будут отклонены, если пользователь выберет пароль короче максимального.
Программа перенесена из старой версии Oracle 11.2.0.1.0, где у нас нет этой проблемы, программа работала нормально, операция подключения прошла успешно. Но проблема возникла после перехода на Oracle 12.1.0.1.0.