2010-02-05 4 views
2

내가 가지고있는 개념은 많은 Java 클라이언트가 실행 중이고이 데이터베이스를 사용하는 (직접 연결하는) 중앙 MySql 데이터베이스를 사용합니다. 클라이언트는 공개적으로 사용할 수 있으므로 보안이 문제가됩니다.Java 클라이언트에서 데이터베이스 보안

Java가 디 컴파일 될 수 있으므로이 시스템의 보안 부분을 클라이언트 응용 프로그램에 넣을 수 없습니다. 해커가 연결 데이터를 추출하고 해킹을 위해 자신의 앱을 작성할 수 있기 때문에 데이터베이스에 액세스하기 위해 초기 사용자 이름/비밀번호가 있어야합니다.하지만 그 이상으로는 클라이언트에서 아무것도 확보 할 수 없습니다.

그래서, 이것은 매개 변수화 된 저장 프로 시저를 이끌었습니다. 이렇게하면 SELECT & EXECUTE로만 사용 권한을 제한하여 데이터베이스를 조금 보호 할 수 있습니다. 그리고 각 SP에 사용자 이름/암호 매개 변수가 포함되도록 고려 중이므로 하위 수준의 사용자가 관리 SP를 해킹하거나 사용할 수 없도록 각 SP 호출시 사용자 권한 수준을 확인할 수 있습니다.

이것은 보안 수준이 일정한 것으로 보이며 데이터베이스에 대한 다중 레벨 액세스를 허용하지만 SQL 주입이 가능합니다.

매개 변수가있는 SP를 사용하는 경우 SP가 매개 변수를 데이터베이스로 보내기 전에 매개 변수를 정리하려면 어떻게해야합니까? PhP에서 이것은 간단하지만 로컬로 실행되는 Java 클라이언트에서는이 작업을 수행 할 서버 측 응용 프로그램이 없습니다. 나는 어떤 종류의 서버 측 응용 프로그램을 데이터베이스 & 클라이언트에 넣을 수 있다는 것을 알고 있지만 가능한 경우이를 피하고 싶습니다.

달성이 가능합니까? 그러면 '안전'합니까?

이 방법을 사용하는 것이 올바른지, 아니면이 아키텍처를 사용하여 이런 종류의 보안을 구현하는 더 좋은 방법이 있습니까?

+0

SQL 인젝션에 대해 들어 본 적이 있습니까? 여러분이 방금 제안한 것은 전체적으로 훨씬 더 나쁜 취약점을 도입하는 것입니다. – rook

+0

당신이 내 게시물을 읽었을 때 나는 SQL 주입에 대한 나의 우려를 언급하고 SQL을 처리하기 전에 (아마도) 사용자가 입력 한 데이터를 정제 할 방법이 있는지 묻고 있었다. – Dave

답변

5

이 방법을 사용하는 것이 올바른지, 아니면이 아키텍처를 사용하여 이런 종류의 보안을 구현하는 더 좋은 방법이 있습니까?

3 층으로 갈 필요가 있다고 생각합니다. 데이터베이스를 신뢰할 수없는 클라이언트에 직접 노출 할 수 없습니다. 사이에 응용 프로그램 서버가 있어야합니다. 최종 사용자는 응용 프로그램 서버에 로그인합니다 (모든 단일 사용자에 대해 별도의 사용자 이름/암호를 사용하고 사용자가 입력하며 응용 프로그램에 포함되어 있지 않은 것이 이상적입니다). 응용 프로그램 서버 만 데이터베이스에 연결되며 클라이언트에서 가져온 모든 종류의 SQL을 직접 실행하지 않고 허용되는 여러 가지 메소드/쿼리를 정의하는 것처럼 적합하다고 판단되는 작업 만 수행합니다.

클라이언트에서 데이터베이스로 직접 이동하려는 경우 개별 데이터베이스 사용자 계정을 만들고 하드 코드 된 비밀번호는 만들지 마십시오. 그러나 (모든 권한을 적절히 관리하는) DBA에게 너무 큰 번거 로움이 될 수 있으며 구성 실수로 엄청난 보안 문제가 발생할 수 있습니다.

+0

제가 제 질문에 언급했듯이, 저는 3 단계 접근법을 알고 있습니다. 그러나 여러 가지 이유로 그 상황을 피하고 싶습니다. 새 사용자가 관리자 지원없이 로그인하고 로그인 할 수있게하려면 여러 계정 (사용자 당 1 명)을 관리하는 것이 너무 어려울 수 있습니다. 즉, 클라이언트를 다운로드하고 데이터베이스에 액세스합니다 (최저 수준).사용자 순위는 나중에 관리자가 조정하여 DB의 사용자 테이블에서 필드를 조정하여 점진적으로 더 많은 기능 (저장 프로 시저에 대한 더 많은 액세스 권한)을 허용합니다. – Dave

+0

각 호출마다 '확인 권한 등급'은 DB의 추가 오버 헤드이지만이 상황에서 작동 할 것이라고 나는 믿는다.하지만 입력 서버 측을 '정리'할 방법을 찾지 못하면 SQL 인젝션에 취약하다. 이는 SP 내부를 의미합니다. 그것이 내가 아직 고려하지 않은 다른 보안 문제를 찾고 있을지는 모르겠지만, 그게 나에게 충격을주고있다. – Dave

관련 문제