2016-02-18 2 views
0

Я занимаюсь разработкой приложения для ПК с несколькими пользователями. Для управления пользователями я использую DMBS (Oracle, MySQL, MSSQL, Postgre). Таким образом, каждый пользователь имеет учетную запись пользователя базы данных.Разрешить подключение к СУБД только через конкретное приложение

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

Я нашел это website by SQLDUDE, где он описывает некоторые методы.

Один из способов доступа к данным только через конкретное приложение - это триггер входа в систему, который проверяет имя_приложения. Однако он также описывает, что этот метод можно легко подделать, так как пользователь может указать имя приложения, как только он это узнает в строке соединения. (detailed explanation here - see Solution for Scenario #2)

Он также упоминает Роли приложения.

Более безопасный подход, который можно использовать для этого, называется «Приложение Роли». При подключении из приложения вы принимаете определенную роль , и только этой роли предоставляются привилегии, необходимые в базе данных .

Так что в основном пользователь входит в систему с его учетными данными, но не имеет прав вообще (только подключиться).

Затем в приложении я вызываю sp_setapprole с паролем, как только соединение установлено, поэтому предоставляются правила приложения.

После этого вызова завершается успешно, то соединение получает привилегию роли приложений и теряет привилегию действительного пользователя, который то, что мы хотим. Поэтому, если кто-то попытался подключиться к базе данных из SSMS или SQLCMD, они будут обращаться к БД, используя свои учетные данные, у которых не будет иметь требуемых разрешений для таблиц, поскольку только права на таблицы имеют только роль приложения . Это более безопасно & надежный подход, но тот, который требует изменения кода приложения и в качестве администратора базы данных, вам нужно будет создать роль приложения в SQL Server.

Таким образом, роли применения звучат как способ пойти.

Мой вопрос:

ли роли приложений СУБД стандартные и доступны для большинства систем СУБД?

Есть ли способ отслеживать логин sp_setapprole (например, WireShark)?

Конечно кто-то может перепроектировать приложение и получить учетные данные для роли приложения - но я думаю, что это неизбежно :)

+1

Я бы * сильно * предложил работать в обратном направлении. Сделайте это так, чтобы он не * имел значение *, если пользователь хочет напрямую подключиться. Или введите промежуточный уровень (под вашим контролем, на вашем сервере (серверах)) и не позволяйте * любому * прямому доступу к базе данных, независимо от того, какое приложение используется. –

ответ

1

Я видел одно простое решение на месте, и она работала отлично.Вот оно:

  • приложение отвечает за создание пользователей в базе данных
  • Перед созданием пользователя, приложение хэшируются/зашифрованы свой пароль, так что если вы выбрали пароль «123456» он будет создан, как " RRU2992191910 "(только пример)
  • Если пользователь попытался подключиться к базе данных с помощью« 123456 », это не будет успешным
  • Только приложение смогло подключиться к базе данных, поскольку оно хэшировано/зашифровано в соответствии с паролем пользователем

Это не самое безопасное решение в мире, но оно очень простое и делает то, что вы хотите. И его можно портировать на разные РСУБД без каких-либо дополнительных затрат.

+0

это гений! – Tommy