2012-06-08 4 views
1

저는 현재 대학 과제를위한 프로그램을 작성하고 있으며, MySQL 데이터베이스에 연결하기 위해 JDBC를 사용해야합니다.JDBC가 본질적으로 안전하지 않습니까?

데이터베이스 암호가 어떤 형태로든 프로그램에 노출되어야한다는 점을 감안할 때 데이터베이스에 액세스하려면 해커에게 암호를 전달해야 할 것입니다.

맞나요? 아니면 뭔가 빠졌습니까?

+0

웹 앱 또는 두꺼운 클라이언트 앱에 대해 이야기하고 있습니까? 이 두 가지 문제는 매우 다릅니다. –

+0

주어진 시나리오에서 직원이 프로그램을 사용하지만 해커 또는 장난스런 직원이 프로그램을 사용하지 못할 이유는 없습니다. (데이터베이스의 테이블에서 사용자를 인증하려고하지만 데이터베이스 비밀번호를 사용하면 모든 데이터를 수집하고 무지개/생일 등) – user1277170

+0

오른쪽, 애플리케이션 유형에 따라 위험이 다르다는 것을 알았 기 때문에 변경했습니다. 당신이 명확히 해달라고 상기 한 내용에 대한 나의 의견. –

답변

0

암호는 응용 프로그램에 노출되어야합니다. 물론 응용 프로그램에 DB에 연결하는 방법은 무엇입니까?

그러나 이것은 큰 보안 결함이 아닙니다. 응용 프로그램이 실행되는 시스템은 어떤 비용으로도 안전해야합니다. 이것은 중요한 것입니다! 해커 또는 심지어 순진한 사용자가 응용 프로그램이 실행되는 컴퓨터에 액세스 할 수있는 경우 충분한 권한이 있는지 전혀 모른 채 시스템에서 혼란을 겪을 수 있습니다. 사용자가 응용 프로그램의 소스 코드와 실행중인 컴퓨터에 액세스 할 수있게되면 매우 우수한 사용자 계정 관리 시스템을 보유하고 있지 않으면 보안을 강화할 수있는 방법이 없습니다.

암호를 텍스트 파일로 외부화하고 소금으로도 저장할 수 있습니다. 기본적으로 가장 잘 사용되는 방법입니다.하지만이 방법은 액세스 권한이있는 사람의 삶을 만듭니다. 당신의 컴퓨터에 약간 더 열심히 ... 그들이 똑똑하다면 여전히 데이터베이스에 침입 할 수있는 소스 코드에 액세스 할 수 있습니다. 그렇지 않은 경우 간단하게 삭제하거나 손상시킬 수 있습니다.

그래서 JDBC에는 아무런 문제가 없습니다 ... 동의하지 않는다면 수 백만 명의 JDBC 사용자를 설득하십시오. 보안은 단일 기술로 구축 한 것이 아닙니다. 여기에는 모든 시스템을 보호하고 각기 다른 노드에서 보호 레이어를 추가하는 작업이 포함되지만 각 보호 레이어가 점점 더 유용성과 유연성을 훼손한다는 사실을 염두에 두어야합니다 (이 때문에 사람들은 1000 개의 레이어를 맨 위에 추가하지 않습니다 응용 프로그램/데이터베이스의 경우 실용적이지 않고 대부분 불필요합니다.

+1

* 해시 * 암호를 저장하면 어떻게 할 건가요? 그것을 데이터베이스 연결 인증의 일부로 보내려면 다시 받으시겠습니까? –

+0

@Greg Kopff 내가 사용하는 DBMS를 사용하면 일반 텍스트 암호로 파일을 만들 수 있습니다. 그러면 SQL 서버를 시작할 때 파일에 암호가 해시되고 ** - 해시처럼 저장됩니다 (다음으로 해시) ** .... 분명히 DBMS는 파일을 변경할 수있는 권한이 있어야하며 파일은 소스 코드에 있어서는 안됩니다. – Renato

+0

이 절차는 CouchDB : http://guide.couchdb.org/draft/security.html#hashing을위한 절차이지만 SQL 데이터베이스와 유사한 절차를 사용할 수 있습니다. – Renato

1

JDBC 연결의 보안이 염려되면이를 암호화하십시오. http://dev.mysql.com/doc/refman/5.0/en/connector-j-reference-using-ssl.html

당신은 성능 패널티를 지불 할 것이지만 이것은 일반 텍스트의 대안입니다. MySQL 설명서에 따르면 :

SSL을 사용하기위한 성능 저하는 쿼리 크기 및 반환되는 데이터의 양에 따라 쿼리 처리 시간이 35 %에서 50 %까지 증가한다는 것입니다.

이 옵션은 대부분의 SQL 및 noSQL 데이터베이스에서 사용할 수 있습니다.

0

JDBC은 Java 응용 프로그램이 데이터베이스 시스템에 연결하는 데 사용하는 standart API입니다. 성숙하고 견고하며 자바 커뮤니티에서 널리 사용됩니다.

일부 응용 프로그램은 소스 코드에서 예를 들어 데이터베이스 연결 자격 증명을 노출하여 API를 부적절하게 사용하지만,

How can I protect MySQL username and password from decompiling?에는이 디자인 문제에 대한 좋은 설명과이를 해결하기위한 몇 가지 제안이 있습니다. 응용 프로그램 외부의 파일에 데이터베이스 자격 증명을 저장하고 다중 계층 아키텍처를 채택하는 것과 같습니다.

관련 문제