Я занимаюсь разработкой приложения для ПК с несколькими пользователями. Для управления пользователями я использую 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)?
Конечно кто-то может перепроектировать приложение и получить учетные данные для роли приложения - но я думаю, что это неизбежно :)
Я бы * сильно * предложил работать в обратном направлении. Сделайте это так, чтобы он не * имел значение *, если пользователь хочет напрямую подключиться. Или введите промежуточный уровень (под вашим контролем, на вашем сервере (серверах)) и не позволяйте * любому * прямому доступу к базе данных, независимо от того, какое приложение используется. –