ASP.NET Core: как скрыть идентификаторы базы данных? - PullRequest
0 голосов
/ 29 октября 2019

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

Q: Какие есть варианты, когда вы не хотите передаватьидентификаторы из базы данных на веб-интерфейс? Вы не хотите, чтобы пользователь мог видеть, сколько записей в вашей базе данных.

Что я нашел / услышал до сих пор:

  1. Зашифруйте и расшифруйте Id на бэкэнде
  2. Использовать GUID вместо числового идентификатора с автоинкрементом в качестве PK
  3. Использовать GUID вместе с автоматически увеличиваемым идентификатором в качестве PK

Q: Знаете ли вы что-нибудь еще или у вас есть опыт работы с любым из них? Каковы технические и технические проблемы? Пожалуйста, предоставьте документацию и сообщения в блоге на эту тему, если вы знаете что-либо.

1 Ответ

3 голосов
/ 29 октября 2019

Две вещи:

  1. Само существование идентификатора ничего не говорит вам о количестве записей в базе данных. Даже если идентификатор похож на 10, это не значит, что есть только 10 записей;скорее всего, десятая была создана.

  2. Предоставление идентификаторов не имеет никакого отношения к безопасности, так или иначе. Идентификаторы имеют значение только в контексте таблицы базы данных, в которой они находятся. Поэтому, чтобы различить что-либо на основе идентификатора, пользователь должен иметь доступ непосредственно к вашей базе данных. Если это так, у вас гораздо больше проблем, чем от того, указали ли вы идентификатор.

    Если пользователи не должны иметь доступ к определенным идентификаторам, например, к странице редактирования, где идентификаторпередается как часть URL-адреса, а затем вы контролируете это с помощью политик доступа на уровне строк, а не запутываете или пытаетесь скрыть идентификатор. Безопасность по неизвестности - это не безопасность.

Тем не менее, если вы просто полностью против идеи последовательных идентификаторов, то используйте GUID. Это не влияет на производительность при использовании GUID. Это по-прежнему кластерный индекс, как и любой другой первичный ключ. Очевидно, они занимают больше места, чем что-то вроде int, но мы говорим о разнице в 12 байт на идентификатор - вряд ли о чем беспокоиться в сегодняшнем хранилище.

...