2017-01-07 1 views
-2

삭제 된 행의 기본 키 값을 재사용 할 기본 키 인덱스 디자인을 고려하고 있습니다 (가장 극단적 인 경우 초 이내).이 경우 가장 효율적인 디자인입니다.기본 키 값을 안전하지 않게 재사용하고 있습니까?

그러나 버그 및 보안 결함이 발생할 수 있습니다. 클라이언트는 여전히 삭제 된 레코드에 대한 이전 키 값을 가질 수 있습니다. 해당 키에 대한 요청은 다른 사용자와 동일한 사용자가 소유 한 행을 반환 할 수 있습니다. 응용 프로그램이 얼마나 잘 작성되었는지에 따라 혼란이 계속 될 수 있습니다.

보안 허점이 없어야합니다. 응용 프로그램이 다른 사용자가 소유 한 행에 대한 액세스 권한을 부여하면 어떤 상황에서도 응용 프로그램이 올바르지 않습니다. 그러나 이로 인해 결함을보다 쉽게 ​​보거나 악용 할 수 있습니다. 내 마음에 큰 문제는 행이 동일한 사용자에 속할 수 있으며 클라이언트가 생각하는 행이 아니기 때문에 응용 프로그램이 예상치 못한 방식으로 작동 할 수 있다는 것입니다.

행에 재사용 카운터를 추가하여 1 바이트 비용으로 약간 줄일 수 있습니다. 삭제 후 기본 키 값이 다시 사용될 때 증가됩니다. 그 카운터를 기본 키의 일부로 만들 것입니다. 이제 재사용 카운터가 일치하면 실수로 행에 액세스 할 수 있습니다. 단 256 번의 ​​재사용을 한 번만 할 수 있습니다. 이 버그는 여전히 가능하며 사용자가 행에 액세스해야하는 경우 적절한 검사를 대체하지는 않지만 적어도 실수로 잘못된 행에 액세스하는 것을 막을 수는 있습니다.

생각하십니까?

일반적인 SQL 데이터베이스는 아니지만 사용자 지정 데이터베이스 용이지만 원리는 직각입니다.

+7

기본 키를 다시 사용하는 것과 같은 문제를 일으킬 수 있다는 것을 알게 된 이유는 무엇입니까?그냥 다른 값을 지정하십시오. 정수를 사용하는 경우 세계에 많은 정수가 있습니다. 당신은 아마 어떤 종류의 "압축 (compaction)"을 원하지만, 그것은 조숙 한 최적화를 제안 할뿐입니다. –

+1

기본 키의 목적은 레코드를 고유하게 식별하는 것입니다. 키를 재사용하자마자 전제를 파괴했습니다. 대신 자연 키를 사용하는 것이 좋습니다. – PhillipXT

+0

메모리를 절약하고 훨씬 효율적이기 때문입니다. 이것은 조기 최적화가 아닙니다. 항상 특정 테이블에 대해 중요하다면 재사용되지 않는 보조 키를 추가 할 수 있지만 일반적인 경우에는 재사용 카운터로 충분하다고 생각합니다. – Eloff

답변

2

응용 프로그램이 다른 사용자가 소유 한 행에 대한 액세스를 허용하면 응용 프로그램이 어떤 상황에서도 올바르지 않습니다.

당신은 거꾸로 있습니다. 정보 제공자는 누가 그것을 볼 수 있는지 결정합니다. 고양이 (1)이 아닌 파일에 대한 사용 권한과 마찬가지로 파일을 읽을 수있는 사용자를 결정하므로 개체에 대한 DBMS 사용 권한에서 누가 읽을 수 있는지 결정합니다. 동일한 테이블의 다른 사용자가 서로의 행을 볼 수 없으면 사용자 ID별로 행을 필터링하는보기를 제공하십시오.

행이 동일한 사용자에 속할 수 있으며 응용 프로그램이 클라이언트가 생각하는 행이 아니기 때문에 예기치 않은 방식으로 동작 할 수 있습니다.

은 거기에 귀하의 질문에 대한 답을있다 : 식별자 을 식별하는 경우, 그것은 잘못된 일을 식별 할 수 없습니다. 클라이언트가이라고 생각하는 것이 아닙니다. 데이터베이스 의 내용은입니다.

두 가지를 나타내는 데 하나의 식별자를 사용하지 마십시오. 사용자가 서로 다른 시간에 똑같은 것으로 인정된다면 다른 시간대에 동일한 것이면 괜찮습니다. 그러나 효율성이나 프로그래밍 편의성을 이유로 식별자를 공유하는 두 가지 다른 요소가 있다면 사용자는 무엇이 무엇인지에 대해 사용자를 오해하게됩니다. 그리고 그게 공평하지 않아, 알지? 사용자는 데이터베이스에서 잘못 지시하지 않고 바로 문제를 해결하는 데 충분한 문제가 있습니다.

귀하의 식별자를 한번에 식별하십시오. 당신이 그 원칙을 당신의 상황에 적용한다면, 그 대답은 즉시 명백합니다.

+0

제임스 감사합니다, 설득력있는 대답이고, 당신의 요지를 봅니다. ID가 재사용되지 않도록 기본 키를 수정합니다. 그것은 더 많은 메모리를 필요로하고 자바 스크립트에서 더 이상 숫자에 맞지 않는다는 것을 의미합니다. 그러나 당신의 주장을 고려할 때 그만한 가치가 있습니다. – Eloff

관련 문제