1

응용 프로그램에서 ASP 멤버십을 사용합니다.
UserProfile 테이블을 추가했으며 Users (asp 회원)의 외래 키를 가지고 있습니다.
외래 키로 사용자 이름이 이메일이기 때문에 나는 Username을 사용합니다.
어디서나 사용자를 참조해야하는 곳에서는 Username을 외래 키로 사용합니다.
응용 프로그램에서 예를 들어 프로필을 가져올 때 저장 프로 시저에 Username을 전달하여 데이터를 가져옵니다.
이것이 좋은 방법인지 궁금합니다. 여기에 몇 가지 잠재적 인 보안 문제가 있습니까?asp.net 회원에서 username을 외래 키로 사용 하시겠습니까?

답변

5

여기에서 볼 수있는 주된 문제는 외래 키에 대해 많은 "데이터 공간"을 소비하게되면 느려지고 테이블의 데이터베이스 공간을 차지하게됩니다. 또한 데이터베이스 테이블은 문자열 비교를 연결합니다 - 데이터베이스는주의를 기울여이 문자열에 대한 해시를 만들고 뒤에 숫자를 비교합니다. 그러나 약간의 오버 헤드가 있습니다.

UserName을 고유하게 만들고 숫자 외래 키를 사용하여 나머지 테이블에 연결하십시오.

두 번째 문제는 사용자가 이메일을 변경해야하거나 어떤 이유로 든 잘못 전달해야하는 경우 입니다. 이 경우 데이터베이스의 모든 연결을 업데이트하고 다른 유사한 전자 메일이 없는지 확인해야합니다.

또 다른 문제는 전자 메일과 외래 키가 대/소문자를 구분할 수 있는지 여부입니다. 어떤 이유로 든 대소 문자를 구분하면 대처할 수 없습니다.

보안 문제와 관련하여 매개 변수를 사용하여 데이터베이스를 열어보아야합니다. 이는 숫자 키 또는 문자열 키의 경우와 동일하므로이 경우에는 아무런 변화가 없습니다.

+0

예, 공간이 문제가 될 수 있습니다. 그럼 aspnet_Users UserId를 사용하는 것이 더 좋습니까?이 유형이 uniqueidentifier입니까? – 1110

+0

@ 1110 예가 uniqueidentifier입니다. 이는 여러 측면에서 더 좋습니다. – Aristos

0

이것은 오래된 자연 대 대리 키 토론입니다. 어느 쪽의 방법이라도 "팬"이 있지만 단순한 진실은 장단점이 있다는 점입니다. 특정 상황에 가장 적합한 자신의 결정을 내려야합니다.

전자 메일이 PK 인 경우에는 this discussion을 참조하십시오.

1

많은 시스템에서 사용자가 사용자 이름을 변경할 수 있습니다. 귀하의 경우,이를 이메일 주소로 연결합니다. 사용자는이를 변경할 수 있어야합니다.

외래 키로 사용하는 경우 데이터를 동기화 상태로 유지하기 위해 업데이트를 실행해야합니다.

관련 문제