2010-08-10 3 views
1

Многие настольные приложения используют таблицы SQL для управления разрешениями и ролями своих пользователей. Фактически они ограничивают доступ к некоторым частям приложения в своем коде приложения. Это означает, что им нужна постоянная строка соединения для SQL-сервера с максимальными разрешениями.Каков наилучший способ управления разрешениями настольных приложений базы данных?

Моя цель C# 2010, SQL Server 2005 или 2008.

Что делать, если с какой-либо причине кто-то найти эту строку соединения? (Трассировка сети, взлом программного обеспечения, Уволен сотрудник или ...), он может изменить все с помощью только Managemenst Studio, и вы не можете понять, какой клиент это сделал. Если вы хотите изменить строку соединения. Вы должны сделать это во многих клиентах и ​​в плохом дизайне вам нужно перекомпилировать приложение.

Так что я хочу знать, стоит ли использовать реальный SQL-логин вместо имени пользователя и пароля в таблицах? создать строку соединения для каждого пользователя с помощью логинов SQL?

Таким образом, нет страха потерять соединительную строку. Также в кодах SQL вы можете использовать функцию GetUser(), чтобы указать, какой пользователь действительно выполнил запрос?

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

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

ответ

1

По возможности используйте проверку подлинности Windows.

Определить роли. Добавить группы в роли. Добавить пользователей в группы (в соответствии с обычным способом управления файловой системой Windows).

Choosing an Authentication Mode

См: Application Roles

+0

Проверка подлинности Windows означает, что каждый пользователь должен быть добавлен в базу данных. Не очень удобное решение в этом сценарии ... – jeroenh

+2

@jeroenh: Аутентификация Windows на SQL может использовать группы безопасности. Вам не нужно добавлять каждого пользователя отдельно (и многие организации уже будут иметь подходящие группы). –

0

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

Смотрите, например this question

+0

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

0

Для лучшей безопасности, вам необходимо один специальный счет базы данных для каждого пользователя; каждая учетная запись должна иметь только привилегии, необходимые для задач, которые может выполнять соответствующий пользователь. Обычно вы предоставляете привилегии ролям (например, «клерк», «менеджер», «супервизор») и предоставляете эти роли пользователям. Очевидно, для этого требуется определенная работа, чтобы определить, какие привилегии необходимы каждой роли. Во многих случаях может потребоваться не допускать прямого доступа к некоторым таблицам, а только к представлениям в базе данных, которые скрывают некоторые части, которые не должны быть видимыми для этой роли, или хранимые процедуры, которые выполняют некоторые дополнительные проверки, и убедитесь, что каждая транзакция обрабатывается в целом.

Смежные вопросы