사용자 정보가있는 테이블을 만드는 것이 더 안전하고 모든 테이블에 대해 동일한 테이블을 사용하는 것보다 비밀번호를 사용하는 것이 더 안전합니까?사용자 이름과 비밀번호에 하나 또는 두 개의 테이블을 사용 하시겠습니까?
답변
아니요 :
ID, 사용자 이름, 비밀번호.
id는 자동 증가이며 사용자 이름은 사용자의 필요에 따라 varchar가 20 정도이며 암호는 MD5 또는 SHA1 해시 암호와 소금입니다.
이 두 테이블을 사용하는 것은 의미가 없습니다. 그런 다음 조인을 사용하여 데이터를 가져와야합니다. 그리고 그것은 단지 불필요한 부담입니다.
아니요. 더 안전하지 않습니다. DB에 암호를 저장하기 전에 암호가 Salted + Hashed인지 확인하십시오.
아니요, 어떻게 그것이 더 안전 해지는 지 알 수 없습니다.
실제로 암호를 저장하지 마십시오. 그들의 소금에 절인 해시를 저장하십시오.
추가 읽기 :
-
각 테이블에 액세스하는 다른 사용자 계정을 요구 아뇨하지 않는
- Stack Overflow: Preferred Method of Storing Passwords In Database
링크를 제공해 주셔서 감사합니다! – expora
+1 절대적으로 - 해시가 동일하면 비교할 필요가 있습니다. –
- 그것에게 완전한 고통을 조회 할 것이다 - 심지어 다음과 해커 하나의 로그인을 만들었으므로 상대방을 얻을 수있는 가능성이 있습니다.
SHA-2와 같은 보안 해시와 소금을 사용하여 해시 형태로 비밀번호를 저장하고 있는지 확인하십시오. 일반 텍스트로 저장하지 말고 (IMHO) 암호화하여 저장하지 마십시오.
아담 감사합니다. 나는이 파장을 생각하면서 해커가 모든 것에 접근 할 수 있었 을까? 나는/etc/passwd와/etc/shadow와 같은 유닉스와 파일에 대해 조금 배우면서 나에게 일어난 일이라고 생각한다. 내 질문에 대한 답변을 읽은 후에는 웹 응용 프로그램에서이 아이디어가 도움이되지 않는다는 것이 분명해졌습니다 (유닉스 케이스에는 역사가 없습니다). – expora
다른 사람들과 동의하지 않습니다. 인증 정보를 별도의 테이블에 넣고 가능한 한 최대한 응용 프로그램에서 인증을 끌어 오십시오. 당신은 신경 쓰지 않아야합니다. siteminder 등을 생각해보십시오. 웹 응용 프로그램에는 사용자의 인증 방법에 대한 정보가 없습니다. 암호, 스마트 카드 등 (데스크탑 응용 프로그램에서 Kerberos 또는 Active Directory와 동일)
이 방법은 스프링 보안과 같은 프레임 워크를 사용하는 경우에도 작동합니다. 인증 테이블 만 보도록 인터셉터를 설정하십시오. 인터셉터가 애플리케이션 데이터를 볼 수 없도록, 또는 그 반대의 경우에도 별도의 데이터 소스를 사용할 수도 있습니다.
분명히 응용 프로그램은 여전히 사용자의 권한 부여에 대한 정보를 관리해야합니다. 일반적으로 '역할'테이블에서 처리됩니다. 그러나 사용자가 어떻게 인증 받았는지 알 필요가 없습니다.
별도의 테이블에 사용자 이름과 암호를 저장하면 응용 프로그램이 인증을 처리하는지 여부에 어떤 영향을 미칩니 까? – Matthew
Btw, 이미 꽤 간단한 (강력한) C# 솔리드 해시 클래스 라이브러리 (라이브러리 사용 방법에 대한 간단한 데모 포함)가 있습니다. Link.
은 또한, (그래서 당신이 올바른 암호와 같이 사용자의 입력을 확인할 수 있습니다) 및 해시 알고리즘 자신 (SHA1/MD5/등.) 어떤 보안 혜택이 없습니다
를 선택할 수있는 검증 메커니즘을 제공하지만, 여러 테이블을 사용하면 단일 로그인에 연결된 여러 시스템에 자격 증명을 저장하는 데 유용 할 수 있습니다.
위에서 언급했듯이 비밀번호에 대해 소금에 절인 해시로 보안을 제공해야합니다.
- 1. 데이터베이스; 하나 또는 두 개의 고유 필드?
- 2. 하나 또는 두 개의 managedObjectContext
- 3. DB 구조 : 두 개의 테이블 또는 하나?
- 4. 안드로이드 : 두 개의 활동, 하나 개의 탭은
- 5. mysql 사용자 비밀번호에 오류가 있습니다.
- 6. 캐시 파일 또는 하나 이상의 HTTP 요청을 사용 하시겠습니까?
- 7. 내가 하나 개의 테이블을 내 쿼리
- 8. drupal에서 사용자 비밀번호에 사용자 특정 salt 추가하기
- 9. 두 개의 유사한 객체에 대해 두 개의 개별 테이블을 만들어야합니까?
- 10. 두 개의 필드가있는 테이블을 가정
- 11. 두 개의 테이블을 쿼리에 연결하기
- 12. 이 코드를 하나 또는 두 개의 LINQ 쿼리에 결합하려면 어떻게합니까?
- 13. 두 개의 함수 또는 다른 매개 변수가있는 함수 하나?
- 14. 하나의보기에서 두 개의 테이블을 페이지 매기기 방법
- 15. SQL에 LINQ와 함께 두 개의 테이블을 조인 또는 절
- 16. 두 개의 텍스처를 하나 또는 두 개의 FBO에 바인딩하는 것이 더 빠릅니까?
- 17. 두 개의 인스턴스 (하나 또는 두 개의 데이터베이스 인스턴스)로 응용 프로그램 포크?
- 18. 두 개의 TabBarController 사용
- 19. 두 개의 zend 응용 프로그램 : 하위 도메인에 하나, 루트에 하나.
- 20. 웹 서비스 호출에서 사용자 이름과 암호 사용
- 21. 하나 및 두 개의 열이 동시에있는 GridView
- 22. 루비. 하나 대신 두 개의 스레드
- 23. 두 개의 버튼을 하나 (토글)로 바꾸십시오
- 24. 넷빈즈 - 하나 개의 항아리에
- 25. VBA - 다차원 배열을 두 개의 별도 배열 대신 사용 하시겠습니까?
- 26. 50/50 삽입 및 선택. 두 개의 테이블 또는 하나 개의 테이블
- 27. PHP에서 두 개의 mysql 테이블을 비교하는 방법
- 28. svcutil.exe에 사용자 이름과 암호를 전달 하시겠습니까?
- 29. MySQL 데이터베이스 디자인, 두 가지 유형의 레코드 - 하나의 테이블 또는 두 개의 별도 테이블 사용?
- 30. 두 개의 OR 조건 대신 SELECT 명령을 사용 하시겠습니까?
소금도 테이블에 추가하는 것을 잊지 마십시오. –
반드시 그렇게 할 필요는 없습니다. 모든 암호에 대해 하나의 소금을 사용할 수 있습니다. 데이터베이스가 해킹 당하면 소금이 없습니다. 데이터베이스에 추가하면됩니다. 소금의 개념은 최종 사용자가 최종 해시를 최종 제어 할 수 없다는 것입니다. – Snake
모두에게 감사드립니다! 나는 소금에 절인 해시를 알고 있습니다. 두 개의 테이블을 가지고 있으면 중요한 보안 기능이 추가되는지 궁금합니다. 건배! – expora