사람의 이름이 Null 인 경우 어떻게 데이터베이스를 손상시킬 수 있습니까?


55

BBC 에서이 기사를 읽고있었습니다 . Jenifer Null이라는 사람에 대한 이야기와 비행기 티켓 예약, 인터넷 뱅킹 등과 같은 온라인 데이터베이스를 사용하는 동안 매일 문제에 직면하는 방법을 알려줍니다.

나는 데이터베이스에 정통하지 않고 자주 사용하지 않습니다. 학습을 위해 웹 사이트를 만들 때 서버 측 양식 유효성 검사에는 정규식이 사용되었습니다. 내가 기억하는 것에서 "Null"이라는 이름을 행복하게 받아 들일 것입니다. 나는 그것을 시도하지 않았다.

이 상황이 발생했을 때 누군가 기술에 대해 설명 할 수 있습니까? 양식 유효성 검사가 하나 string == NULL이상의 작업을 수행하고 있습니까? 그럼에도 불구하고 나는 생각하지 않습니다 NULL is same as "NULL".


32
이 기사는 분명히 기자에 의해 작성되었습니다. 널은 많은 혼란의 원인이며, 언론인이 덜 혼란스러워하지는 않을 것입니다.
ypercubeᵀᴹ

2
모든 사람 : 관련 질문 또는 기사에 대한 링크가있는 주석이 아래 커뮤니티 위키 답변 으로 이동 되었습니다 . 이 페이지에 링크를 추가하는 대신 해당 답변을 편집 (또는 편집 제안)하십시오.
Paul White

답변:


42

'null'을 null 열의 문자열로 반환하는 데이터베이스 인터페이스 (예 : 프레임 워크 라이브러리)를 보았습니다. 디버깅을 위해 이것을 켜거나 끄는 플래그가 있다고 생각합니다. 이 플래그를 사용하면 개발자가 빈 필드가 널값 또는 빈 값의 결과인지 쉽게 판별 할 수 있습니다. 이것은 특히 프로덕션 환경에서 좋지 않은 설정이며 기사에서 설명하는 문제를 설명합니다.

'null'을 널값으로 변환하는 역 처리는 이름 필드에 대한 응용 프로그램 오류를 생성해야합니다. 나는 이것이 다소 빨리 해결 될 것으로 기대합니다.


실제로 이것은 모든 데이터가 문자열로 변환되는 형식화되지 않은 언어의 프레임 워크에서 매우 일반적입니다. 작업 한 지 몇 년이 지났지 만, 예를 들어 초기 버전의 ColdFusion에는이 문제가 있다고 생각합니다.
Jules

25

당신의 혼란의 좋은 덩어리가 기자의 것에서 비롯 될 가능성이 높습니다. 이 기사에서는 데이터베이스뿐만 아니라 전체 애플리케이션 시스템을 사용하는 문제에 대해 설명합니다. 이것은 대량 소비를 목표로 한 글이기 때문에 완전히 합리적이지만, 기술적 인 세부 사항은 저자에 의해 빛나거나 오해됩니다.

DB의 API가 아닌 애플리케이션 계층에서 이러한 문제가 많이 발생했을 수 있습니다. 마법의 가치는 반 패턴으로 업계에서 우연히 드러나기 어렵습니다. 아주 쉽게 어떤 프로그래머는 "누군가 입력 한 '널 (null)'의 라인을 따라 조건을 작성할 수 있습니다. 그들은 널이 의미하는 것이기 때문에 가치가 없다는 것을 의미해야합니다!" SQL 주입을 방지하려는 잘못된 시도는 언급 된 Null의 잘못된 처리 또는 작은 따옴표를 포함하는 Hawaiian 성 (표준 SQL 문자열 분리 문자)도 원인이 될 수 있습니다.

비즈니스 논리 또는 DB 제약 조건이 다른 것을 기대할 경우 이러한 값을 NULL 또는 빈 문자열로 잘못 변환하는 응용 프로그램은 쉽게 오류를 생성 할 수 있습니다. 이것은 당연히이 기사에서 설명한 실망스러운 사용자 경험으로 귀결됩니다.


5
오브라이언이 하와이 인인지 몰랐어요.
glglgl

19

기사 자체에는 문제 를 보여주는 스택 오버플로 질문에 대한 링크가 포함되어 있습니다. 코드가있는 Flex 응용 프로그램에있었습니다.

currentChild.appendChild("Fred");

단어 Fred를 포함하는 요소를 XML 문서에 추가하지만 코드는 다음과 같습니다.

currentChild.appendChild("null");

텍스트 "null"을 포함하는 요소가 아닌 빈 요소를 추가합니다.

XML 자체는 텍스트 값 "NULL"에 문제가 없으므로 이러한 텍스트를 포함해도 문제가 없습니다. 실제로 NULLXML에서는 특별한 의미가 없습니다.


13

내가 언급하지 않은 것 중 하나는 우리가 SQL에 대해서만 말하는 것이 아닙니다.

이름이 데이터베이스에서 시작 / 종료 될 수 있지만 일반적으로 MULTIPLE 채널이 포함됩니다. 데이터베이스, Sql, php, html, javascript ... Java, C #, VB, Perl, Phython, Ruby, bash, batch 등 등 ...

파이프 라인의 각 단계에는 데이터를 한 형식에서 다른 형식으로 변환하는 작업이 포함될 수 있습니다. SQL 테이블에서 json, xml, CSV 등 ...

이 복잡한 체인의 어느 시점에서나 잘못된 프로그래밍이나 퍼지 프로그래밍 언어 ( 예 : Javascript null 처리 )의 한 부분 만 취합니다 ...

따라서 데이터베이스에있는 문제로 제한하지 마십시오. "스택"의 어느 곳에 나있을 수 있기 때문입니다.


8

이 인기있는 질문에 대한 의견으로 원래 남겨진 다양한 링크에 대한 커뮤니티 위키 답변


4

관계형 데이터베이스는 누락되거나 관련이없는 값을 수용해야합니다. 예를 들어, 고객 목록은 휴대폰 번호 또는 성별을 포함 할 수있다. 기업이 고객이되고 싶다면 어떻게해야합니까?

값이 누락되었음을 나타내는 특수 표시기가 사용됩니다. 이 특수 플래그는 NULL입니다. 따라서 조잡한 프로그래밍으로 인해 누락 된 값 표시기 (NULL)가 Jennifer Null의 성과 혼동 될 수 있으며, 아마도 실제 이름이 아닌 데이터가없는 것으로 해석 될 수 있습니다.

그것은 은행 계좌를 개설하는 것과 비슷하지만 돈을 입금하지 않습니다. 잔액은 0입니다. 이것은 당신이 균형이 없다는 것을 의미하지는 않습니다. 잔액이 있고 값이 "0"임을 의미합니다. 그러나 조잡한 프로그래밍은 "존재하지 않음"으로 0을 잘못 해석하여 계정이 전혀 없다고 판단 할 수 있습니다.


2

Null이라는 사람과는 다르게 동작하는 잘못 작성된 소프트웨어, 심지어 프레임 워크가 많이 있습니다.

그러나 인간적인 요소를 잊어 버리지 마십시오. 아마도 인간은 화면과 인쇄물에서 이름을보고 실수라고 생각하고 사람을 삭제하는 것이 또 다른 원인일까요?

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.