웹 응용 프로그램의 사용자 암호를 안전하게 저장하는 방법을 묻는 질문이 종종 있습니다 (RDBMS를 사용하여 Facebook 또는 Twitter에 대해 이야기하고 있지 않습니다). 일반적인 대답은 "암호를 입력 한 다음 TDES 또는 SHA512와 같은 강력한 알고리즘으로 해시합니다"입니다.
내 질문은 : RDBMS 사용자로서, 대부분의 엔진에는 내장 인증 메커니즘이 있기 때문에 암호 저장 문제가 전혀 발생하지 않는 이유는 무엇입니까?
예를 들어 일부 사용자 X가 내 웹 응용 프로그램에서 계정 사용자 암호 Y를 만들려면 다음 쿼리를 어떻게 잘못 발행합니까?
CREATE USER X WITH ENCRYPTED PASSWORD Y IN GROUP baseuser;
그런 다음 내 응용 프로그램 내에서 사용자는 자신의 자격 증명을 사용하여 데이터베이스에 대한 연결을 열 수 있으며 모든 암호 관리를 귀찮게 할 필요가 없습니다.
이 방법에는 여러 가지 장점이 있습니다.
- RDBMS가 암호화 알고리즘을 변경해야한다고 결정하면 보안 업데이트를 적용하기 위해 아무 것도 만질 필요가 없습니다.
- 사용자 인증을 쉽게 관리 할 수 있습니다. 사용자가 관리자 역할로 승격되면 해당 그룹에 사용자를 추가하면됩니다.
- SQL 주입은 이제 의미가 없습니다. 데이터베이스의 각 사용자 (예 : SO와 같은 포럼, 새 게시물 추가, 게시물에 응답, 게시물에 대한 주석 작성 및 편집 / 삭제)와 같이 각 사용자에게 허용하려는 것을 정확하게 허용하는 권한을 관리합니다. / answers / comments);
- 사용자 계정 "익명"은 인증되지 않은 내 응용 프로그램 연결에 사용할 수 있습니다.
- 각 사용자는 그가 제공 한 데이터의 소유자입니다.
그러나이 주제에 대해 거의 모든 질문에 대해 이것이 수행 해야하는 방식이 아니라는 일반적인 합의가있는 것 같습니다. 내 질문은 : 왜?
참고 : 세 번째 포인트에 의해 허용되는 정책 PostgreSQL을, 그리고 보안 정책 마이크로 소프트 SQL 서버한다. 나는이 개념들이 새로 나온다는 것을 알고 있지만 어쨌든 지금 여기에 기술 된 기술이 사용자 계정을 처리하는 표준 방법이 아닌 이유는 무엇입니까?