Запутывать имена таблиц базы данных - PullRequest
3 голосов
/ 11 февраля 2010

Мы собираемся осуществить проект, в котором мы будем обрабатывать очень конфиденциальные данные. Помимо шифрования данных я думал об обфусцировании имен таблиц.

Так, например, tEmployees станет t58633B7A. Это было бы полезно добавить? В конце концов, речь идет о создании уровней безопасности / предотвращения.

P.S. Мы сопоставим обфусцированные имена таблиц с реальными именами в нашем уровне доступа к данным

Ответы [ 5 ]

15 голосов
/ 11 февраля 2010

Это кажется совершенно лишним. Если злоумышленник получил доступ к базе данных, то простое незнание имени таблицы является малой защитой в общей схеме. Вы должны потратить свое время, если что-нибудь, на лучшие механизмы обнаружения и защиты от вторжений.

6 голосов
/ 11 февраля 2010

Хотя вы снова и снова будете слышать, что безопасность через неизвестность - это плохо, это помогает поднять планку атаки, если вы помните, что это не решение.

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

5 голосов
/ 11 февраля 2010

Какая пустая трата времени.

Ну, не совсем ..... в нем есть особенность отпугивать настоящих талантов во время собеседования, и вы можете получить упоминание о TheDailyWTF.

2 голосов
/ 11 февраля 2010

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

0 голосов
/ 02 апреля 2013

Попробуйте создать базу данных с помощью PowerDesigner. При разработке таблицы (Физическая модель данных, PDM) есть имя столбца и код столбца. Введите имя столбца с именем для чтения поля, но для кода столбца введите с именем нечитаемого поля.

Например, чтобы создать EMPLOYEE (скрыто в table_1) со столбцами:

    NAME     CODE     DATA TYPE
    ID       F1       INTEGER
    NAME     F2       VARCHAR(50)
    DOB      F3       DATE

Тем временем в SQLServer создайте таблицу как обычно (скрипт можно получить из меню «Создать базу данных»)

CREATE TABLE table_1(
f1 int,
f2 varchar(50),
f3 date);

и создать вид

CREATE VIEW EMPLOYEE WITH ENCRYPTION
AS  
SELECT f1 ID,f2 NAME ,f3 DOB 
FROM table_1

предложение WITH ENCRYPTION не позволяет пользователю просматривать оператор sql для создания представления.

В коде приложения используйте представление EMPLOYEE вместо table_1

Пример:

insert into EMPLOYEE values('1','kevin','1972/11/24'); 
insert into EMPLOYEE values('2','ted sulivan','1969/06/12');
insert into EMPLOYEE values('3','wei meng lee','1974/04/17');

SELECT * FROM EMPLOYEE;


и объединить его с шифрованием данных (см .: http://blog.sqlauthority.com/2009/04/28/sql-server-introduction-to-sql-server-encryption-and-symmetric-key-encryption-tutorial-with-script/)
Конечно, с помощью этого метода пользователь все еще может гостевую таблицу из представления, но пользователь не может получить взаимосвязь таблицы с Первичным ключом и внешним ключом, представление не имеет реляционной информации.
Но если вы полностью запутываете этот процесс, вообще не используя view, вы должны закодировать с табличной информацией, полученной из PDM.
Надеюсь, что это может помочь вам. Поскольку у меня та же проблема с вами, когда база данных подключена к машине с учетной записью администратора, база данных предоставляется пользователю.

...