|
|
|
Разграниечие прав, паттерн
|
|||
|---|---|---|---|
|
#18+
Есть ли в природе паттерн, описывающий схему разграничение прав? Например как лучше хранить права доступа, я пришел пока к такому решению Module_ID | UserID | Read | Write | Edit | Delete | Condition | Company Info 123213 1 1 1 1 company=user.company ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2012, 19:35:43 |
|
||
|
Разграниечие прав, паттерн
|
|||
|---|---|---|---|
|
#18+
maxterbear, Это дело лучше получится, если заюзать стандартные возможности SQL-сервера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2012, 19:43:26 |
|
||
|
Разграниечие прав, паттерн
|
|||
|---|---|---|---|
|
#18+
ShSergemaxterbear, Это дело лучше получится, если заюзать стандартные возможности SQL-сервера. -1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2012, 00:32:55 |
|
||
|
Разграниечие прав, паттерн
|
|||
|---|---|---|---|
|
#18+
Читая форумы и статьи пришел к выводу, что (как часто бывает) однозначного ответа нет и он зависит от задачи. Варианты: 1)Организация меток на каждой записи(как в UNIX) 2)Создание сущностей - таблиц доступа(как в Windows) Первый случай довольно прост, требует дополнительных полей в каждую таблицу. Но на нем сложно организовать гибкий доступ: Правила вроде "сегодня можно смотреть эту категорию зписей только Васе, а завтра всей семье Петровых". Ну так же, на метках я не совсем представляю, как сделать механизм "Открыть доступ Коле, Вите, Ани и группе пользователей Одногруппники". Само ограничение можно настраивать : 1) средствами Grant базы данных. 2) На триггерах и View-шках. 3) Хранимых процедурах (все таблицы закрываются, проверки осуществляются в процедурах). Процедура на каждую операцию CRUD. Хорошо, можно сделать "двойную проверку", но работы больше и практически польностью теряется польза от использования ORM(Entity Framework, nhibernate). 4) На уровне сервера приложения. Для ASP.NET, это актуально, потому что сервер есть. При этом базу можно закрыть от всех, а правила разграничивать в логике ASP.NET. Так же такой вариант мне советовали в ответах на MS для обычных приложений, которым нужен доступ из интернета(предлагают использовать WCF). Плюс, есть еще один вопрос: создавать или не создавать пользователей на уровне БД? Для социальной сети такого обычно не делают(все пользователи просто хранятся в таблице, доступ осуществляется через общего пользователя). Вышеизложенное можно комбинировать(с некоторыми оговорками). Жду критики, рекомендаций и дополнений к моему восприятию ситуации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2012, 08:26:09 |
|
||
|
Разграниечие прав, паттерн
|
|||
|---|---|---|---|
|
#18+
@k@DElpher, Access List тоже по разному можно реализовать: 1) таблица доступа на каждую информационную таблицу БД. +(целостность, нормализованность). -(много таблиц) 2) общая таблица на всё - это как у топик стартера. -(проверка целостности-вручную). +(мало таблиц). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2012, 08:47:32 |
|
||
|
Разграниечие прав, паттерн
|
|||
|---|---|---|---|
|
#18+
@k@DElpher4) На уровне сервера приложения. Для ASP.NET, это актуально, потому что сервер есть. При этом базу можно закрыть от всех, а правила разграничивать в логике ASP.NET. Так же такой вариант мне советовали в ответах на MS для обычных приложений, которым нужен доступ из интернета(предлагают использовать WCF). Единственный архитектурно правильный способ реализации безопасности. Всё остальное - от лукавого. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2012, 09:11:14 |
|
||
|
Разграниечие прав, паттерн
|
|||
|---|---|---|---|
|
#18+
МСУ@k@DElpher4) На уровне сервера приложения. Для ASP.NET, это актуально, потому что сервер есть. При этом базу можно закрыть от всех, а правила разграничивать в логике ASP.NET. Так же такой вариант мне советовали в ответах на MS для обычных приложений, которым нужен доступ из интернета(предлагают использовать WCF). Единственный архитектурно правильный способ реализации безопасности. Всё остальное - от лукавого. Очень согласен). Но почему-то на форумах часто вижу спор о том, где лучше реализовать безопасность и сервер приложений не всегда всплывает сразу. А где-нибудь есть хорошая аргументация и сравнение всех подходов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2012, 09:49:37 |
|
||
|
Разграниечие прав, паттерн
|
|||
|---|---|---|---|
|
#18+
@k@DElpherА где-нибудь есть хорошая аргументация и сравнение всех подходов? Вот тут только общее представление ( Application Architecture Guide v2 ): АутентификацияПроектирование эффективной стратегии аутентификации для бизнес-слоя имеет большое значение с точки зрения обеспечения безопасности и надежности приложения, в противном случае, оно будет уязвимым для атак с подделкой пакетов, атак перебором по словарю, перехватом сеансов и других типов атак. При проектировании стратегии аутентификации руководствуйтесь следующими рекомендациями: Избегайте аутентификации в бизнес-слое, если она будет использоваться только слоем представления или слоем сервисов, располагающимися на том же уровне в пределах границы доверия. Передавайте удостоверение вызывающего в бизнес-слой, только если требуется проводить аутентификацию или авторизацию на основании ID исходной вызывающей стороны . Если предполагается разделять бизнес-слой между многими приложениями, использующими разные хранилища пользователей, рассмотрите возможность применения механизма единой регистрации. Избегайте создания собственных механизмов аутентификации, по возможности пользуйтесь встроенными механизмами платформы. Если слой представления и бизнес-слой развернуты на одном компьютере и требуется выполнять доступ к ресурсам на основании разрешений Списка управления доступом (access control list, ACL) исходного вызывающего, рассмотрите возможность использования олицетворения. Если слой представления и бизнес-слой развернуты на разных компьютерах и требуется выполнять доступ к ресурсам на основании разрешений ACL исходного вызывающего, рассмотрите возможность использования делегирования. Однако делегирование обусловливает более интенсивное использование ресурсов и, кроме того, не поддерживается многими средами, поэтому должно применяться только в случае крайней необходимости. Если требования безопасности позволяют, выполняйте аутентификацию пользователя на границе и реализуйте обращения к нижним слоям с помощью доверенной подсистемы. В качестве альтернативы предлагается подход обеспечения безопасности на основании утверждений (особенно для приложений на базе сервисов), который использует преимущества механизмов интегрированной идентификации и обеспечивает возможность целевой системе проводить аутентификацию утверждений пользователя. АвторизацияПроектирование эффективной стратегии авторизации для бизнес-слоя имеет большое значение с точки зрения обеспечения безопасности и надежности приложения, в противном случае, оно будет уязвимым для разглашения данных, повреждения или подделки данных и несанкционированного получения прав доступа. При проектировании стратегии авторизации руководствуйтесь следующими рекомендациями: Защитите ресурсы, применяя авторизацию на основании удостоверений, учетных групп, ролей или других контекстных данных вызывающей стороны. Максимально сократите дробление на роли, чтобы уменьшить число необходимых сочетаний разрешений. Применяйте авторизацию на основании ролей для бизнес-решений , авторизацию на базе ресурсов для аудита системы и авторизацию на основании утверждений, если требуется поддерживать интегрированную авторизацию по совокупности данных, таких как удостоверение, роль, разрешения, права и другие факторы. По возможности избегайте применения олицетворения и делегирования, потому что это может существенно повлиять на производительность и возможности масштабирования. Как правило, олицетворение клиента при вызове требует больших ресурсов, чем вызов напрямую. Не смешивайте код авторизации и код обработки бизнес-задач в одном компоненте. Поскольку, как правило, авторизация охватывает все приложение, обеспечьте, чтобы инфраструктура авторизации не создавала существенные издержки производительности. Итого, какие можно сделать выводы. Осуществлять безопасность средствами СУБД плохо хотя бы с той точки зрения, что это немасштабируемо. Во-вторых, нужно писать свой слой доступа в виде модуля и т.п., что перечит рекомендации "пользуйтесь встроенными механизмами платформы". В-третьих, если потом нужно будет разделять бизнес-слой между многими приложениями, использующими разные хранилища пользователей (механизм единой регистрации, SSO), то мы будем завязаны под первую БД, в которую изначально зашили безопасность. То есть, никакой изоляции (слабосвязанности). В четвертых, невозможна миграция на другие виды СУБД, так как у каждого хранилища принципиально своя реализация безопасности. В случае же встроенных в ASP.NET инструментов мне достаточно будет переключить просто провайдер (допустим с сиквельного на оракловый) и моя безопасность снова в действии. Заметьте, я не говорю про бизнес-данные (они могут располагаться где угодно), я говорю о расположении безопасности. P.S. И в заключении - скрин. Посмотрите в руководстве, безопасность вынесена в отдельный слой. И никакого отношения к СУБД она не имеет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2012, 11:46:50 |
|
||
|
Разграниечие прав, паттерн
|
|||
|---|---|---|---|
|
#18+
МСУ, Спасибо за подробные разьяснения. Будем получать ценную информацию. А возможно и сюда стоит заглянуть(мне) http://msadmin.codeplex.com/ . :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2012, 12:16:14 |
|
||
|
|

start [/forum/topic.php?fid=18&gotonew=1&tid=1360033]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
183ms |
get topic data: |
13ms |
get first new msg: |
6ms |
get forum data: |
3ms |
get page messages: |
67ms |
get tp. blocked users: |
2ms |
| others: | 237ms |
| total: | 543ms |

| 0 / 0 |
