#c# #asp.net #sql #sql-server
#c# #asp.net #sql #sql-сервер
Вопрос:
Недавно я присоединился к новому проекту, в котором предыдущий менеджер по продуктам решил изменить имена столбцов в большинстве таблиц, из того, что я слышал, это было направлено на безопасность / защиту нашего кода, поскольку основная часть — хранимые процедуры SQL.
Вот простая визуализация:
----------- ------------ ---- ---------- -------
| C1 | C2 | C3 | C4 | C5 |
----------- ------------ ---- ---------- -------
| John Doe | 11-11-1944 | M | Street 1 | Julie |
----------- ------------ ---- ---------- -------
| Mary Jane | 13-02-1991 | F | Street 2 | null |
----------- ------------ ---- ---------- -------
Где-то я согласен с ним в том, что нам нужно искажать имена, но не тогда, когда мы разрабатываем, а перед доставкой продукта заказчику. Само приложение находится на .NET C #.
Во-первых, как я могу оправиться от этого? Любая стратегия или, предпочтительно, инструмент (аналогичный строкам uglify для JS)?
Во-вторых, как я могу защитить код (хранимую процедуру) после удаления имен?
Комментарии:
1. Боюсь, я не согласен… Нет никаких веских причин для этого. Любой, у кого есть доступ к базе данных, мог бы разобраться с этим, если бы у него было немного времени, но это значительно усложняет отладку / разработку. Используйте соответствующие функции безопасности базы данных, чтобы ограничить возможности пользователя. Шифруйте сообщения, чтобы избежать перехвата пакетов и т.д…
2. Ой, вы никогда не должны уродовать свою базу данных. Это безумие. Если вы не следуете рекомендациям в своей базе данных, не имеет значения, как вы называете свои столбцы, кто-то все равно получит доступ к вашим данным. И, делая это, то, что он сделал, усложнило жизнь разработчиков, поскольку ничто не имеет логического имени. Имена баз данных должны быть логичными, они должны иметь смысл, и они должны быть понятны, к чему они относятся, независимо от того, используете ли вы хранимые процедуры.
3. Ставьте 1 за смелость при работе с такой системой. Мне кажется, что было бы проще найти работу где-нибудь еще.
Ответ №1:
Я понятия не имею, почему кто-то может подумать, что искажение имен сделает систему более безопасной. Если вам нужна безопасность, используйте функции безопасности базы данных. Например, не разрешайте никому напрямую читать таблицы, требуйте использования хранимых процедур. Или зашифруйте сами данные, чтобы они не были прочитаны. Обычно защищенными являются данные, а не имена столбцов.
Тем не менее, я не понимаю, как вы можете отказаться от «искаженных» имен во время разработки. Вы могли бы использовать представления, которые сопоставляют искаженные имена с не искаженными именами. Однако это просто означает, что у вас есть куча кода, который необходимо изменить при изменении структуры базы данных. Хуже того, это означает, что первоначальные разработчики будут очень смущены, когда будут пытаться решить проблемы после выпуска.
Комментарии:
1. Ссылка, которой поделился @Lee Willis, тоже помогает.
Ответ №2:
С искажением … вы имеете в виду предоставление значащих имен столбцам? Если да, то вы можете создать другую таблицу с тем же определением схемы, что и в вашей опубликованной таблице, затем просто выполните
insert into your_new_table
select c1,c2,c3,c4,c5 from
your_mangled_table
как я могу по-прежнему защищать код (хранимую процедуру) после удаления
имен
Это будет невозможно автоматически. Вам нужно будет ALTER
изменить код вашей процедуры, чтобы изменить имена столбцов / таблиц, чтобы отразить новые изменения.
Ответ №3:
SQL server поддерживает шифрование хранимых процедур. Я никогда не использовал его, поэтому не могу комментировать дальше, но это может вам помочь. http://msdn.microsoft.com/en-gb/library/ms187926.aspx