如何避免在COBOL程序中硬编码凭据?

har*_*on4 6 security passwords cobol mainframe jcl

我有以下代码连接到COBOL程序内的外部数据库:

MOVE 'I2SFG04'  TO WK-USER
MOVE '12345'    TO WK-PASS

EXEC SQL 
    CONNECT TO :WK-EXT-MACHINE 
    USER :WK-USER 
    USING :WK-PASS
END-EXEC.
Run Code Online (Sandbox Code Playgroud)

但是你可以猜到,我不想硬编码用户并在COBOL程序中传递.那么有一种安全的存储方式,所以有权查看COBOL程序的人都看不到凭据吗?

我的第一种方法是使用SYSIN内容创建一个文件(受RACF保护),因此COBOL程序可以加载它,但它不会显示在源代码中.像这样的东西:

//STEP001  EXEC PGM=IKJEFT01
//STEPLIB  DD DSN=I2SJR04.SYS.DBRMLIB,DISP=SHR
//SYSIN    DD DSN=EF35.PRIVATE.DB.LOGIN,DISP=SHR
//SYSOUT   DD SYSOUT=*
//SYSTSIN  DD *
    DSN SYSTEM(SSID)
    RUN PROGRAM(MYCOBB) PLAN(PLANNAME) -
    LIB('I2SJR04.SYS.LOADLIB')
    END
/*
Run Code Online (Sandbox Code Playgroud)

EF35.PRIVATE.DB.LOGIN文件的内容:

I2SFG04
12345
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来处理这种情况?

Jam*_*son 2

如果它是 IBM zOS 大型机,您不需要提供任何凭证。

您的连接将使用正在运行的作业的用户 ID。

您只需告诉 DBA 该作业将在什么 JCL 用户 ID 下运行——然后他将授予您正在使用的计划的访问权限。