를 사용해야 하는 사용자 이름 또는 사용자의 ID 를 참조하는 인증된 사용자에서 ASP.NET

StackOverflow https://stackoverflow.com/questions/4911

  •  08-06-2019
  •  | 
  •  

문제

그래서에는 간단한 학습 웹 사이트 사용에 내장 ASP.NET 인증 시스템을 가지고 있습니다.

내가 추가하는 이제 사용자는 테이블의 물건은 그의 우편 번호,생년월일 등등.나의 질문은:

  1. 에서 새로운 테이블,해야 핵심 사용자 이름(문자열)또는 사용자 ID 는 GUID 를 찾는 숫자들이 사용하는 asp_ tables.
  2. 는 경우에 사용하는 것이 가장 좋습는 추 guid,사람을 알고 어떻게 얻을 수 있습니까?그것은 보인다되지 않을 수 있으로 쉽게 이름(System.Web.HttpContext.Current.User.Identity.Name)
  3. 제안하는 경우에는 나도 사용하지 않는(guid 나 사용자 이름 필드에 의해 제공됩 ASP.NET 인증)그때 나는 어떻게 그 ASP.NET 인증?하이션은 사용하의 이메일 주소 사용자로 로그인을 하지만 어떻게 나 ASP.NET 인증 시스템을 사용하여 이메일 주소 대신 사용자 이름?(또는 아무 상관이 없이,그것은 그냥 나를 결정 나는"몰"이름이 실제적으로 이메일 주소?

참고:

  • 나 요구하지 않는 방법에 대을 얻을 GUID 습니다.NET,나는 단지를 참조하면 사용자 id 를 열에 asp_ tables guid.
  • 사용자 이름에서 유일한 ASP.NET 인증입니다.
도움이 되었습니까?

해결책

내가 사용하는 것이 좋습니다 사용자 이름으로 기본 키 테이블에 사용자 이름이 될 것입니다 독특하고,거기에 몇 가지 좋은 이유로 이렇게하려면:

  1. 기본 키가 될 것입 인덱스고,따라서 검색한 사용자 정보를 통해 자신의 이름은 매우 빠르다.
  2. 그것이 정지 중복 사용자 이름에서 나타나는
  3. 당신이 없을 사용하는 방법에 대해 걱정하 두 개의 서로 다른 조각의 정보(이름이나 guid)
  4. 그것은 코드를 작성하는 훨씬 더 쉽게 하지 않아 조회 두 비트의 정보입니다.

다른 팁

당신이 사용해야 하는 몇 가지의 고유 ID,GUID 당신이 언급하거나 일부 다른 자동 생성되는 키입니다.그러나,이 번호는 절대로 볼 수 있다.

거대한의 이익이 귀하의 모든 코드를 작동할 수 있는 사용자 ID 지만,사용자의 이름이 정말로 묶여 있습니다.그런 다음,사용자가 자신의 이름을 변경할 수 있습니(이는 내가 발견한 유용한 사이트에서).이것은 특히 유용한 사용하는 경우 이메일 주소 등 사용자의 로그인...매우 편리한 사용자는(그 다음 그들을 기억할 필요가 없 20Id 경우에는 그들의 일반적인 사용자 ID 인기있는 중 하나).

를 사용해야 합니다.그것은 ProviderUserKey 시설의해야 합니다.

Guid UserID = new Guid(Membership.GetUser(User.Identity.Name).ProviderUserKey.ToString());

내가 사용하는 것입니다.를 사용하려면 사용자 이름,당신은 당신을 만들려고"이름을 변경하는 기능"매우 비싸다.

동의함으로 Palmsey, 하지만 거기 있을 것 같은 오류가에서 자신의 코드:

Guid UserID = new Guid(Membership.GetUser(User.Identity.Name)).ProviderUserKey.ToString());

Guid UserID = new Guid(Membership.GetUser(User.Identity.Name).ProviderUserKey.ToString());

내가 말할 것을 사용하 UserID 그래서 사용자 이름을 변경할 수 있습니다에 영향을 미치지 않고 primary key.나는 또한 설정은 사용자 이름 열을 고유한 것이지 중복 사용자 이름.

는 경우에 당신은 주로 검색에 사용자 이름 아닌 UserID 다음 사용자 이름 클러스터 지수를 설정할 수 있도록 기본 키 비 클러스터했습니다.이것은 당신에게 가장 빠르게 액세스를 검색할 때 사용자 이름는 경우,그러나 당신은 주로 검색에 대한 UserIds 그런 다음 이로 클러스터 인덱스입니다.

편집:이것은 또한 더 맞 현재 ASP.Net 회원 테이블 등 그들은 또한 사용자 아이디 primary key.

이것은 오래된하지만 나는 그냥 사람들이 다음 사항을 확인하십시오:

  1. Aspnet 회원은 데이터베이스를 최적화하고 올 때에 액세스하는 사용자 기록합니다.클러스터 인덱스 검색(최선)에서 sql 서버를 사용하면 레코드를 사용하여 검색 loweredusername 및 editor.이것은 많은 감각으로만 우리는 우리가 제공된 사용자 이름을 갈 때에 먼저 사용자를 보내 그들의 자격 증명입니다.

  2. Guid userid 을 줄 것이 큰 인덱스보다 크기 int 그러나 이것은 정말 중요하기 때문에 우리는 종종만을 검색하 1 기록(사용자)에서 시간과의 관점에서 조각의 수를 읽고 일반적으로 크게 줄을 능가의 수를 쓰고 편집하는 사용자의 테이블은 사람들이 단순히 업데이트하지 않는 모든 정보는 자주합니다.

  3. 이 regsql 스크립트를 만드는 aspnet 회원 테이블을 편집할 수 있는 그는 대신 사용하십시오에 대한 기본값으로 사용자 id 를 사용할 수 있습니다 NEWSEQUENTIALID()를 제공하는 더 나은 성능(내가 이 프로파일링).

  4. 프로필입니다.누군가를 만드는"새로운 학습 웹사이트"시도해서는 안된 바퀴를 재발견 할 수 있습니다.웹 사이트 중 하나가 일을 위해 사용되는 상자의 버전의 aspnet 회원이블(을 제외한 끔찍한 프로파일 시스템)와 사용자의 테이블이 포함된 거의 2 백만의 사용자 기록합니다.심지어 같은 높은 수의 레코드를 선택이었다 그럼에도 불구하고 빠르기 때문에,내가 말했듯 시작하는,데이터베이스는 인덱스에 집중 loweredusername+editor 하자'로 표시됩 인덱스 구을 위한 이러한 기록을 일반적으로 말하자면,sql 하고 있는 클러스터 인덱스가 찾아 1 기록,당신은 어떤 문제가 발생하지 않도의 거대한 숫자가 제공하는 기록을 당신은 열을 추가하는 테이블과 시작할 때 다시 너무 많은 데이터입니다.

  5. 에 대한 걱정 guid 를 이 시스템에서 내게 기반으로 실제 성능고의 경험,시스템을 조기 최적화입니다.이 있는 경우 int 에 대한 귀하의 userid 그러나 시스템을 수행하는 최적의 쿼리문 사용자 지정 인덱스 디자인 등.이 시스템은 확장 되지 않습니다.Microsoft 습니다 일반적으로 좋은 일을 aspnet 회원 db 그리고 더 많은 생산적인 것에 초점을 변경하는 userId int.

내가 사용하는 것이 자동차 증가하는 번호 일반적으로 int.

당신은 유지하려면 키의 크기를 작게 만든다라는 것입니다.이는 인덱스 작은 혜택은 어떤 외국인으로 키습니다.Additonally 지 않을 긴밀하게 연결하는 데이터 디자인은 외부의 사용자 데이터(이것은 사실이 보유 aspnet GUID 뿐만 아니라).

일반적으로 Guid 를 만들지 않는 좋은 기본 키로 그들은 크고 삽입에 일어날 수 있는 잠재적으로 모든 데이터는 페이지 테이블에서 오히려 이상에서 마지막 데이터 페이지입니다.메인 예외를 실행하는 경우 mutilple 복제 데이터베이스가 있습니다.Guid 를 위한 매우 유용한 키 이 시나리오에서 그러나 나는 추측 당신은 하나의 데이터베이스 그래서 이 문제가 되지 않습니다.

만약 당신이 사용하게 될 것 LinqToSql 개발을 위해 내가 사용하는 것이 좋습니다 것이 Int 기본 키로.나는 많은 문제 때 나는 관계를 구축의 비 Int 필드를 경우에도,이며(x)분야 했 제약 조건을 만드는 독특한 분야이다.

나는 확실하지 않으면 이에서 알려진 버그 LinqToSql 또는 무엇을,하지만 문제를 했어에 현재 프로젝트 및 스왑 PKs 및 FKs 에서 여러 테이블이 있습니다.

동의함으로 마이크 돌입니다.하는 것만 GUID 를 사용하는 이벤트에 당신을 추적 할 수 있는 엄청난 양의 데이터입니다.그렇지 않으면,간단한 자동차 증가하는 정수(Id)열에 충분합니다.

해야 하는 경우 GUID,.NET 은 사랑스러운 충분히 얻을 수 있는 하나의 간단한...

Dim guidProduct As Guid = Guid.NewGuid()

Guid guidProduct = Guid.NewGuid();

나에 합의 마이크 Stone.나의 회사에 최근 새로운 사용자를 위한 테이블 밖에서 클라이언트는(반대되는 내부 사용자 인증을 통해 LDAP).외부 사용자,우리가 선택한 저장 GUID 를 기본 키로,그리고 저장과 사용자 이름 varchar 독특한 제약 조건에서 사용자 이름 필드입니다.

또한,당신은 암호를 저장 분야,나는 매우 좋습니다 암호를 저장하는 방법으로 소금,해시된 바이너리에서 데이터베이스입니다.이 방법으로,만약 누군가 해킹을 당신의 데이터베이스,그에 대한 액세스 권한을 가지지 않는 고객의 암호입니다.

내가 사용하는 것에서 guid 를 나의 코드고 이미 언급했듯이 이메일 주소 등 사용자 이름을 사용합니다.그것은,결국,이미 독특하고 기억에 남는 이용자에게 있습니다.어쩌면 도랑 guid(v.논란).

사람을 사용하여 언급된 인덱스에 GUID 를 이 사용되었다는 당신의 코드입니다.나는 이러한 문제가 발생하지 않도록 하는 경우에 특히 삽입이 높은;인덱스가 다시 작성됩니다 모든 삽입할 때마다 기록이다.클러스터 인덱스 작업에서 잘 자동차 증가 Id 지기 때문에 새 레코드가 추가됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top