Дизайн базы данных - раскрытие первичного ключа - PullRequest
2 голосов
/ 10 ноября 2009

Представьте, что у меня есть таблица клиентов.

И в этой таблице есть столбец идентификаторов, Primary Key int, Identity, весь этот джаз. У нашего клиента также есть имя.

Теперь, если бы я должен был отправить информацию в отчете или по электронной почте, где была ссылка на мой сайт, чтобы однозначно идентифицировать этого Клиента, было бы хорошей практикой использовать поле первичного ключа ID

Все мои инстинкты говорят мне, что это ужасно, и что суррогатные идентификаторы ДОЛЖНЫ использоваться ТОЛЬКО для базы данных - и никогда не подвергаться воздействию внешнего мира таким образом.

Но я ищу тот убийственный аргумент, который я мог бы использовать в будущем, если (когда) будет представлен с этим делом.

Мысли

Ответы [ 14 ]

0 голосов
/ 10 ноября 2009

Вы можете реализовать механизм безопасности, не требуя от пользователей входа в систему. Вы не должны просто полагаться на безвестность для защиты этих данных.

Требование идентификатора в URL-адресе, а также какой-либо пароль (случайным образом назначенный хэш) может быть необходимой защитой.

0 голосов
/ 10 ноября 2009

Начну с этого. Использование вашего суррогатного ключа в качестве ссылки на какой-либо объект базы данных очень распространено. Фактически, многие популярные фреймворки делают именно это из коробки (ASP MVC, Ruby on Rails, CodeIgniter).

Однако вместо этого вы можете использовать какой-нибудь естественный ключ. Вы также можете попробовать Base64 кодирование поля ID. Даже такие небольшие меры помогут предотвратить «исследование» вашей базы данных кем-либо.

0 голосов
/ 10 ноября 2009

Не стоит раскрывать простой идентификатор для широкой публики. Я обхожу это путем шифрования параметра строки запроса.

0 голосов
/ 10 ноября 2009

Да, лучше / чище / лучше использовать что-то вроде имени пользователя вместо фактического первичного ключа для внешних ссылок. Однако, если нет «естественного» идентификатора для использования, используйте первичный ключ. Пока вы используете его для идентификации строки и не вкладываете в нее семантическое значение, в этом нет ничего плохого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...