улучшить безопасность на уровне базы данных - разрешены только отдельные запросы - PullRequest
2 голосов
/ 10 марта 2010

Я создаю приложение в silverlight, которое позволит пользователям читать информацию об их платеже. Их логин и пароль будут сохранены в таблице в БД.

Возможно ли повысить безопасность в моем приложении, ограничив данные, к которым имеет доступ запрос? Например, я хочу запретить пользователю выбирать данные, которые ему не принадлежат. Ограничением является то, что мое приложение использует собственную таблицу для пользователей, поэтому я не могу использовать разрешение GRANT: /. Я использую Linq для создания моих запросов sql.

Этот вопрос от моего учителя, который "предлагает" мне улучшить безопасность, так что если это невозможно - это не страшно;)

Ответы [ 3 ]

3 голосов
/ 10 марта 2010

Ну, это довольно неопределенный вопрос, который вы задали, но я рискну нанести удар.

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

CREATE TRIGGER [x] ON [TABLE] FOR INSERT

/* Disallow Users to insert */
IF EXISTS( SELECT 1 1 FROM [Users] WHERE [Users].UserID = [Y])
--Rollback transaction, set error, etc

У вас есть еще детали? В поисках лучшего решения может помочь что-то еще.

1 голос
/ 10 марта 2010

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

Существует 1 и только 1 проект, который имеет детализированное управление доступом для базы данных sql, и это проект SE-PostgreSQL .

"Может предоставить мелкозернистую обязательную контроль доступа к различным базам данных такие объекты, как таблицы, столбцы или кортежи и могут применять последовательные полномочия удаленного / локального клиента интегрирован с операционной системой не зависит от базы данных авторизации. "

0 голосов
/ 10 марта 2010

Создайте представление с именем «MyPayments» в таблице «Payments». Убедитесь, что в определении представления есть предложение WHERE, чтобы представление возвращало только соответствующие данные каждому пользователю. Вот как будет выглядеть выражение WHERE с вашей точки зрения:

ГДЕ PaymentOwner = SUSER_SNAME ()

Системная функция SUSER_SNAME () возвращает имя пользователя, вошедшего в систему. Если первый пользователь входит в систему с именем пользователя 'User1' и вставляет строку, его / ее имя пользователя сохраняется вместе со строкой. Функция SUSER_SNAME () в предложении WHERE определения представления гарантирует, что «User1» видит только те строки, столбец «PaymentOwner» которых имеет значение «User1».

Подробнее здесь

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