스크립트를 통해 데이터베이스에 안전하게 로그인하는 방법은 무엇입니까?

스크립트를 통해 데이터베이스에 안전하게 로그인하는 방법은 무엇입니까?

환경 변수에 데이터베이스 로그인 자격 증명(사용자/비밀번호)을 설정하거나 명령줄 인수로 전달하는 것이 보안 측면에서 허용되는지 궁금합니다.

다른 사람이 환경 변수를 읽거나 실행 중인 프로세스/기록을 읽을 수 있고 자격 증명이 일반 텍스트로 표시되기 때문에 두 가지 접근 방식 모두 위험해 보입니다. (제가 올바르게 이해하고 있습니까?)

이 로그인을 수행하는 데 허용되는 방법은 무엇입니까? 자동화된 작업/프로세스의 일부로 스크립트에서 실행됩니다.

편집: 이것은 Oracle 데이터베이스(11g)입니다.

편집 #2: 한때 Oracle Wallet을 고려했지만 제가 일하는 곳에서는 아직 사용할 수 없습니다.

답변1

나는 Oracle 데이터베이스(또는 해당 문제에 대한 데이터베이스)에 대한 실제 경험이 없지만 표시된 것처럼 Oracle Wallet에 Perl 솔루션이 가능한 것처럼 보입니다.여기(Google 검색어 "oracle 데이터베이스 비밀번호 없는 로그인").

답변2

누구나 명령줄 인수를 읽을 수 있습니다 /proc/<pid>/cmdline. 즉시 종료되는 프로세스의 경우 ps유사한 모니터링 프로그램을 사용하여 다른 사람 에게 계속 표시될 수 있습니다 .

반면에 메모리에 비밀번호를 저장하는 것은 문제가 되지 않습니다. 슈퍼유저 권한 없이는 메모리에 접근할 수 없으며, 보안 소프트웨어는 메모리를 다른 프로세스에 공개하기 전에 메모리의 비밀번호를 덮어쓰는 경우가 많습니다.

가장 일반적인 방법은 파일 권한을 사용하는 것입니다. 비밀번호는 읽을 수 있는 사람만 읽을 수 있는 파일에 저장됩니다. 따라서 파일(키 또는 비밀번호) 자격 증명은 일반적인 명령줄 유출로부터 안전합니다.

답변3

데이터베이스 클라이언트를 열려면 명령줄과 비밀번호 제출을 분리해야 합니다. 물론, 다른 RDBMS/클라이언트는 다르게 작동합니다. 다음은 sqlplus예입니다(기본 ORCL 명령줄 유틸리티).

sqlplus /nolog<<!!

connect $USER/$PASSWD@$SID;

...
--some SQL
...

!!

이렇게 하면 ps프로세스 목록에 비밀번호가 표시되지 않습니다.

답변4

모범 사례에서는 암호를 디스크나 메모리에 일반 텍스트로 저장해서는 안 된다고 명시하고 있습니다. 환경변수에도 문제가 있습니다. 프로덕션 시스템이 주기적으로 "ps auxwwe"를 실행하고 출력을 로그 파일에 기록하는 감시 프로그램을 실행하고 있다고 상상해 보십시오. 귀하의 sqlplus 자격 증명은 전 세계가 읽을 수 있는 모니터 로그에 실수로 기록될 수 있습니다. 보다 일반적인 시나리오는 Splunk/ElasticSearch/Hadoop/Loggly에 로그를 보내는 것입니다.

여기에 파일 스트림을 통해 자격 증명을 안전하게 전달하는 프로그램을 작성했습니다.https://github.com/ryanchapman/safe_sqlplus

자격 증명을 sqlplus 프로그램으로 보낸 후 safe_sqlplus는 자격 증명이 저장된 메모리 부분을 0으로 만듭니다.

관련 정보