Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как правильней организовать аутентификацию?
|
|||
|---|---|---|---|
|
#18+
Ситуация: - есть БД MS SQL Server 2005 с ОЧЕНЬ ценными конфиденциальными данными; - есть к ней веб-интерфейс - приложение на ASP.NET 2.0, исполняется на IIS на единственном выделенном под него сервере. Вся страница при инициализации собирается из БД. Можно: - для всех пользователей определить права НА САМОЙ БД, и просто пытаться из нее брать для пользователя то, что она даст ему с его правами (т.е. каждое подключение к БД осуществляется с учетной записью пользователя) - для всех пользователей ХРАНИТЬ права в БД, на уровне приложения определяя, должна ли быть доступна та или иная информация для него или нет (само же приложение будет работать с БД с очень привилегированной учетной записью, единой для всех) Подозреваю, что первый способ "безопасней", а второй - логичней и проще в реализации. Подозреваю, что при должной организации криптографической защиты и грамотном контроле сессий второй способ может обеспечить не меньшую степень безопасности. Очень плохо представляю, какой уровень доступа к самому SQL Server'у можно получить через web в обход приложения, какие могут быть опасные дыры в IIS, ставящие под угрозу данные при неразграничении прав на саму БД. Прошу подсказать, верны ли мои предположения, как лучше все это организовать, какие преимущества и недостатки у обоих описанных путей, какие тут могут быть подводные камни.vo1d ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2006, 16:48 |
|
||
|
Как правильней организовать аутентификацию?
|
|||
|---|---|---|---|
|
#18+
Для каждого пользователя имеется свой набор данных или пользователей можно объеденить в группы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2006, 17:13 |
|
||
|
Как правильней организовать аутентификацию?
|
|||
|---|---|---|---|
|
#18+
Правильней не спрашивать об этом на форуме Автор топика, сколько процентов людей(из тех что вам ответят) нормально тут разбираются в безопасности? Вам будет предложено много способов(что-то вроде я так всегда делал, и поэтому оно надёжно), но никто не будет нести никакой ответственности за свои предложения, а если вы задали этот вопрос не просто так, то наверное будете её нести :). Вот почему лучше не задавать подобные вопросы в форумах, где каждый выскажет своё мнение, ни на чём не основанное. Ну а если по делу,то 1 и 2 способы нисколько не противоречят друг-другу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2006, 18:50 |
|
||
|
Как правильней организовать аутентификацию?
|
|||
|---|---|---|---|
|
#18+
Для каждого пользователя имеется свой набор данных или пользователей можно объеденить в группы? (manovich) Пользователи делятся в группы, авторизация будет на основе ролей - это все не о том. Вопрос был, как работать с хранилищем данных из приложения: под разными учетными записями (каждому - своя на базе), или под sa/dbo, а права разграничивать на уровне приложения (разумеется, на основе прав/ролей, ОПИСАННЫХ в таблицах БД). Т.е. как безопасней, быстрей, менее хлопотно??...vo1d ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2006, 09:03 |
|
||
|
Как правильней организовать аутентификацию?
|
|||
|---|---|---|---|
|
#18+
А где об этом, блин, спрашивать? Может, мне Дино Эспозито письмо написать прикажете?? Или просто позвонить Дону Ривесту, сказать, "эй, братан, ты самый главный секьюрный перец - посоветуй..." ((: А способы в высшей степени противоречивые - использование одного делает применение другого бессмысленным... Отвечайте, плз, по делу - кто что думает и почему! PS: Если б на форумах за посты еще и ответственность была, все бы давно сидели (:vo1d ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2006, 09:11 |
|
||
|
Как правильней организовать аутентификацию?
|
|||
|---|---|---|---|
|
#18+
Если данные особо ценные, то я бы делал так: Создал достаточное кол-во пользователей в SQL Server Создал бы набор хранимок которые в соответствии с правами выдавали бы только нужные данные, при чем данные были бы в таблицах зашифрованы, а хранимка их перефишровывала. После получение данных в ASP.NET он бы так же рассшифровывались. ---------------------------------------- Knowledge is P...O...w...E...R! My site ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2006, 09:14 |
|
||
|
Как правильней организовать аутентификацию?
|
|||
|---|---|---|---|
|
#18+
Да, для каждой роли по хранимой процедуре, которая возвращает только данные для этой роли. Для каждой роли по пользователю в БД, который имеет доступ только к его процедуре и не имеет доступа к общей таблице. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2006, 12:19 |
|
||
|
Как правильней организовать аутентификацию?
|
|||
|---|---|---|---|
|
#18+
Да как данные пользователю из базы выдергивать - это не вопрос. Вопрос, как к ней подключаться самому приложению ASP.NET: под разными ограниченными учетками (т.е. создавать для пользователей учетки на БД), или под одной мощной (а уже потом заглядывать в свои таблицы, определять, какие права кому положены и что кому дать). Т.е. сам вопрос: на БД создавать для пользователей учетки, роли, разграничивать доступ, или управлять доступом в приложении? PS: А хранимки и шифрование - уже все готово давно, остался только этот вопрос, который покою не дает...vo1d ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2006, 16:37 |
|
||
|
Как правильней организовать аутентификацию?
|
|||
|---|---|---|---|
|
#18+
Мне там еще понадобится обращаться к некоторым системным представлениям и процедурам - как лучше, права на них раздавать, или вызывать из своих?vo1d ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2006, 16:44 |
|
||
|
Как правильней организовать аутентификацию?
|
|||
|---|---|---|---|
|
#18+
Я бы голосовал про БД (Лучше юзать то, что до тебя 10^6 человек проверело, чем свое писать и потом рисковать). А обращение к системным процедумам можно вынести в обычную хранимку. P.S. "управлять доступом в приложении" - можно сделать интерфейс добавление пользователе и разграничение доступа на SQL Server. За то будет вероятность потерять данные только если уйдет пароль Админа. А под другим логинами будет украдена только часть информации.---------------------------------------- Knowledge is P...O...w...E...R! My site ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2006, 17:03 |
|
||
|
Как правильней организовать аутентификацию?
|
|||
|---|---|---|---|
|
#18+
Прежде всего для аутентификации, разделения прав, ограничения доступа и прочих проблем, связанных с безопасностью, самым верным способом является использование готового механизма. Написание же собственных процедур и функций безопасности приведёт к большему количеству незаметных «дырок». Вот почему предлагается использовать готовые схемы и их комбинации. Предлагаются следующие шаги для решения 1.Создание сервера с AD(Active Directory) На отдельном компьютере (Win2kServer или Win2003Server) делаем контроллер домена AD. Создаём пользователей и группы в соотетствии с тем,как будут разграничаться права на sql сервере. Например: создаём группу sqlServerAdmin, юзеров admin1 и admin2 внутри неё а также группу sqlUsers, юзеров sqlUser1,sqlUser2. На AD указываем все необходимые опции,связанные с паролями(там же мы сможем, к примеру, сделать иденификацию по карточке). 2. Организация данных на sql-сервере. Под sql сервер тоже выделим отдельный компьютер. На sql сервере будем использовать только windows аутентификацию, в качестве пользователей и групп будем брать из AD(предыдущий пункт). Предположим, что вся конфедициальная информация хранится в БД с именем db1 в таблицах tbl1, tbl2. Ставим группу sqlAdmins в качестве dbo для db1. Всем остальным группам ограничмваем доступ к db1(разрешаем только выполнять хранимки и всё), а также запрещаем им доступ к каким-либо другим базам данных. Теперь нужно написать хранимые процедуры, которые работают с таблицами tbl1 и tbl2 и выполняют требуемые операции. На выполнение(только на выполнение, ни на изменение, ни на чтение доступа быть не должно) этих хранимых процедуры и должен быть доступ у группы sqlUsers. Результат первых двух шагов: Работа с sql сервером возможна только при аутентификации в window (AD). Те, кому положен доступ, могут работать только с хранимыми процедурами. Тем не менее, предлагаю на этом построение защиты не заканчивать. 3. Ограничение доступа к SQL серверу Возьмём ещё один компьютер , на котором будет стоять терминальный сервер(типа Citrix). Напишем приложение(на VB), которое работает с нашим SQL сервером из пункта два. Юзерам на терминальном сервере разрешим выполнять только это клиенсткое приложение(ограничение прав на запуск только одного конкретного приложения так же решается с помощью ActiveDirectory). На компьютере, где стоит sql сервер, в файерволе запретим какие-либо обращения к компьютеру по сети кроме как с терминалоьного сервера и сервера AD(оставим открытые порты,требуемы для Window аутентификации и для работы sql сервера). Кроме того, для всех из sqlUsers запретим вход в домен со всех компьютеров, кроме как с терминального сервера. Выполнение третьего пункта значительно ограничивает доступ к базе: 1) доступ доступен только с одного компьютера, на котором доменная AD windows аутентификация 2) поскольку на терминальном сервере можно запускать только клиенсткое приложение, то нельзя посылать к серверу какие-либо свои запросы или просто пакеты В качестве «дополнительных» мер предлагается вести в отдельную БД запись о выполнении всех хранимых процедур(кто,когда, с какими параметрами). Это позволит узнать о том, кто и когда какие делал запросы(можно найти виновника утечки). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2006, 19:35 |
|
||
|
Как правильней организовать аутентификацию?
|
|||
|---|---|---|---|
|
#18+
Надежнее если каждый пользователь будет коннектится со своим логином (ну понятно, что не напрямую, а ASP.NET). Но это если количество пользователей не большое и для каждого можно создать учетную запись в SQL Server. Правда при этому про пул подключений к базе данных можно забыть. Если пользователей много, то можно использовать по одному логину для каждой роли. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2006, 21:53 |
|
||
|
Как правильней организовать аутентификацию?
|
|||
|---|---|---|---|
|
#18+
ZeusTheTrueGod писал: На отдельном компьютере (Win2kServer или Win2003Server) делаем контроллер домена AD. Создаём пользователей и группы в соотетствии с тем,как будут разграничаться права на sql сервере. Например: создаём группу sqlServerAdmin, юзеров admin1 и admin2 внутри неё а также группу sqlUsers, юзеров sqlUser1,sqlUser2. На AD указываем все необходимые опции,связанные с паролями(там же мы сможем, к примеру, сделать иденификацию по карточке). Т.е. Вы предлагаете для каждого нового пользователя заводить еще и учетку в домене, а потому уже ее регистрировать на sql-сервере, присоединять к нужным ролям/создавать новую специально для нее. Причем заводить-то ее в домене придется программно (не все же пользователи наперед известны, их порядка 10 тыс...) Геморройно очень, и заводить будет один фиг робот с админскими правами УЖЕ В ДОМЕНЕ - опять страшненько, так можно без всего вообще остаться... Идея про терминальный сервер хорошая - спасибо!!vo1d ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2006, 09:04 |
|
||
|
Как правильней организовать аутентификацию?
|
|||
|---|---|---|---|
|
#18+
Void, как вы себе представляет 10 тысяч юзеров и базу с очень конфедициальной информацией? Все 10 тысяч юзеров имеют к ней доступ? Да кто угодно из них может "слить" какую-то часть вашей базы - поэтому желательно на каждого завести логин и вести логи. Кроме того, каждого юзера предлагается занести в AD именно для того,чтобы делать аутентификацию не самому, а с помощью Windows. Вы бы хоть что-то по реальнее в условии задачи придумали. Да и задач то на добавление юзера не так много - создать логин на контроллере домена, добавить в нужную группу - вот и все задачи. Это можно и без робота сделать. Может нужно переформулировать условие: в базе есть конфедициальная информация и прочая, часть народа должна иметь доступ к конфедициальной(человек 10-15), а остальные - к прочей. Может именно это вам надо? Если не секрет - дайте полное условие.Например, у вас есть 10 ферм, в каждой по 10-15 коров, коровы дают молоко. Информация о надое каждой коровы каждый день - очень конфедициальная, об этом должен знать только её пастух, а вот информация о полном удое на всех фермах за год - не конфедицициальная, и нужно оповестить её для всех 100 работников(пастухи,слесари,доярки).Нужно обеспечить аутнетификацию пользователей бд. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2006, 14:03 |
|
||
|
|

start [/forum/topic.php?fid=18&tid=1391957]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
62ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 216ms |
| total: | 348ms |

| 0 / 0 |
