|
|
|
Как организовать структуру бд с распределением прав.
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, столкнулся со следующей задачей: Имеется одна большая организация, назовем её "А", в ней есть множество "под-организаций" B1..Bn, и в каждой из них есть ещё всякие отделы C1...Cm. Посоветуйте, как лучше организовать БД и реализовать систему распределения прав доступа на уровне самой БД так, чтобы приложение которое работает с это базой в зависимости от Логина выдавала только данные доступные им, при том, что располагаются они все в одной таблице. Т.е. отделу C1 доступен только список своих сотрудников, список своих проэктов и ресурсов, а "под-организации" естественно имеют доступ к своим данным, данным своих отделов и т.д. На данный момент я реализовал это несколько плохим способом: Имеется своя таблица с логинами и правами, при коннекте вызывается процедура, которая в соответствии с правами вносят туда SessionID и ID доступных отделов. А в представлении запрос вида Select OTDELbl.* from OTDELbl,ACS_OTD where OTDELbl.id=ACS_OTD.id and Session=SessionID. Придумано было самостоятельно, но насамом деле бд значительно сложнее и доходит до 5-6 таблиц и вообщем плохое это решение. Я уверен, что есть более верные способы решить такую задачу, прошу подсказать где можно, что почитать на эту тему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2009, 02:05 |
|
||
|
Как организовать структуру бд с распределением прав.
|
|||
|---|---|---|---|
|
#18+
Начните отсюда: http://www.ibm.com/developerworks/ru/library/selinux/index.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2009, 03:00 |
|
||
|
Как организовать структуру бд с распределением прав.
|
|||
|---|---|---|---|
|
#18+
Сильно зависит от возможностей СУБД С уважением, Naf ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2009, 09:25 |
|
||
|
Как организовать структуру бд с распределением прав.
|
|||
|---|---|---|---|
|
#18+
А как такое можно реализовать например в MsSQL или Oracle? и что для такой задачи больше подойдет? ( ибо идут уже разговоры о покупке нормальной СУБД, в данный момент используется Линтер :) ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2009, 11:35 |
|
||
|
Как организовать структуру бд с распределением прав.
|
|||
|---|---|---|---|
|
#18+
NafСильно зависит от возможностей СУБД С уважением, NafНадо делать на уровне приложения. Ньансы СУБД - по минимуму (права на ХП, вью, таблицы, т.е. то что есть в любой СУБД). Все равно всех приколов безопасности на СУБД не реализовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2009, 13:10 |
|
||
|
Как организовать структуру бд с распределением прав.
|
|||
|---|---|---|---|
|
#18+
LSVNafСильно зависит от возможностей СУБД С уважением, NafНадо делать на уровне приложения. Ньансы СУБД - по минимуму (права на ХП, вью, таблицы, т.е. то что есть в любой СУБД). Все равно всех приколов безопасности на СУБД не реализовать.Некоторые СУБД поддерживают технологию RLS про которую и говорит автор ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2009, 14:34 |
|
||
|
Как организовать структуру бд с распределением прав.
|
|||
|---|---|---|---|
|
#18+
Row-Level Security в РСУБД С уважением, Naf ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2009, 14:49 |
|
||
|
Как организовать структуру бд с распределением прав.
|
|||
|---|---|---|---|
|
#18+
> А как такое можно реализовать например в MsSQL или Oracle? А в чем проблемы? > и что для такой задачи больше подойдет? Oracle - это игла, с которой не спрыгнуть, так что стоит сто раз подумать, надо ли оно. О мелкомягких вообще речи нет. > в данный момент используется Линтер Переходите на PostgreSQL и не парьтесь. Все, что нужно, там есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2009, 15:52 |
|
||
|
Как организовать структуру бд с распределением прав.
|
|||
|---|---|---|---|
|
#18+
guest_20040621, Полностью поддерживаю, последний Линтер, с которым работал, был Линтер-ВС, он же вроде как Линтер 6.0. Слизан донельзя с PostgreSQL (какой версии не помню), по крайней мере для МСВС 3.0v13 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2009, 15:56 |
|
||
|
Как организовать структуру бд с распределением прав.
|
|||
|---|---|---|---|
|
#18+
Naf Row-Level Security в РСУБД До лампочки Row-Level Security. Как например некот. пользователям не дать возможность увидеть важную колонку в таблице, при том что в некот. случаях все таки давать ? Например сумма зарплаты/бонусов и пр. Безопасность в приложении гораздо сложнее любых Row-Level Security. А если потом станет ребром вопрос перехода на СУБД без Row-Level Security ? Зострелиццо штоле ? Например у нас любой запрос подчитывает секурные настройки, чтоб разрешить/запретить некот. действия. Но только на уровне логики системы. Секурность на уровне СУБД ограничивается доступом к юзеров ХП. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2009, 19:01 |
|
||
|
Как организовать структуру бд с распределением прав.
|
|||
|---|---|---|---|
|
#18+
Спасибо за статью, очень полезно. Несколько вопросов: - Не совсем могу понять в каких субд имеется механизм RLS и что он там из себя представляет? - Удалять столбцы и менять тип данных колонки невозможно только в Линтере или в других субд тоже? - Заказчик требует как раз Линтер 6.0. Нам очень хочется переубедить заказчика использовать другую субд, пока проект пилотный у нас слаборазвитая иерархия в бд и прочь, пока не удалось оттестировать её в реальной работе на полную и понятия не имеем с чем мы можем столкнуться при дальнейшей разработке. kamakama и все, кто с ней работал, хочется услышать ваше мнение о работе с ней. - А если реализовать это таким образом, что при создании пользователя ему создается собственный views, при переназначении прав, он пересоздается и т.д... или это всетаки плохая идея? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2009, 02:39 |
|
||
|
Как организовать структуру бд с распределением прав.
|
|||
|---|---|---|---|
|
#18+
LSVNaf Row-Level Security в РСУБД До лампочки Row-Level Security. Как например некот. пользователям не дать возможность увидеть важную колонку в таблице, при том что в некот. случаях все таки давать ? Например сумма зарплаты/бонусов и пр. Безопасность в приложении гораздо сложнее любых Row-Level Security. А если потом станет ребром вопрос перехода на СУБД без Row-Level Security ? Зострелиццо штоле ? Например у нас любой запрос подчитывает секурные настройки, чтоб разрешить/запретить некот. действия. Но только на уровне логики системы. Секурность на уровне СУБД ограничивается доступом к юзеров ХП. Сначала посмотрел бы что за статья по ссылке - там совсем не говорится о существующих в системе RLS, а о том как создать свое подобие, заточенное именно под свои задачи. К стати - по вашей системе. А что будет если злобный пользователь законнектится к вашей БД не через программу? Отвечу - он просто обойдет все те ограничения, которые вы ему навешиваете в программе и, из вашего же примера, увидит сумму ЗП/бонусов. Что будет прогеру если пойдет инфа о том, что эти данные вдруг стали общедоступными (а ведь руководство явно требовало, чтобы этого никто не видел)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2009, 08:30 |
|
||
|
Как организовать структуру бд с распределением прав.
|
|||
|---|---|---|---|
|
#18+
ToshК стати - по вашей системе. А что будет если злобный пользователь законнектится к вашей БД не через программу? Отвечу - он просто обойдет все те ограничения, которые вы ему навешиваете в программе и, из вашего же примера, увидит сумму ЗП/бонусов. Что будет прогеру если пойдет инфа о том, что эти данные вдруг стали общедоступными (а ведь руководство явно требовало, чтобы этого никто не видел)?Ничего не обойдет. Если так уж важно, то в теле запроса критичная колонка будет показываться или NULL-ится для разных пользователей. Если дело касается строк (например продажи "секретной организации"), то такие строки просто не будут выведены. Но настройки такой безопасности выполнены на прикладных настройках моей системы, но никак не на чисто возможностях безопасности самой СУБД. В принципе примерно это же описано в ссылке. Не суперкритичные колонки можно прятать в самом приложении. Иногда так проще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2009, 10:14 |
|
||
|
Как организовать структуру бд с распределением прав.
|
|||
|---|---|---|---|
|
#18+
> Заказчик требует как раз Линтер 6.0. Я бы бежал от такого заказчика. > при создании пользователя ему создается собственный views Забавно. Общее количество вьюх = количество базовых х количество пользователей? Не страшно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2009, 11:27 |
|
||
|
Как организовать структуру бд с распределением прав.
|
|||
|---|---|---|---|
|
#18+
если уж так хочется по-заморачиваться -почитайте про мандатный доступ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2009, 12:14 |
|
||
|
Как организовать структуру бд с распределением прав.
|
|||
|---|---|---|---|
|
#18+
LSVNafСильно зависит от возможностей СУБД С уважением, NafНадо делать на уровне приложения. Ньансы СУБД - по минимуму (права на ХП, вью, таблицы, т.е. то что есть в любой СУБД). Все равно всех приколов безопасности на СУБД не реализовать. А если приложений много? А если есть приложения от стороонего по отношению к разработчмку производителю (например, от производителя СУБД), способные коннектиться и выполнять запросы к данной СУБД? Ить БД - предназначена в общем случае для многих приложений. Или кажное буит выполнять фунции СУБД по управлению данными? Так моно и дальше пойти: вынести всю информационную модель данных в приложения. И так было на заре баз данных, но пока от этого отошли. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2009, 14:00 |
|
||
|
Как организовать структуру бд с распределением прав.
|
|||
|---|---|---|---|
|
#18+
LSV Ничего не обойдет. Если так уж важно, то в теле запроса критичная колонка будет показываться или NULL-ится для разных пользователей. Если дело касается строк (например продажи "секретной организации"), то такие строки просто не будут выведены. Но настройки такой безопасности выполнены на прикладных настройках моей системы, но никак не на чисто возможностях безопасности самой СУБД. В принципе примерно это же описано в ссылке. Не суперкритичные колонки можно прятать в самом приложении. Иногда так проще. Хм ... так выделенное, кажется, и называется Row and Cell Level Security - тоесть то, на что была ссылка. А по поводу того как она организована - используя стандартные средства СУБД или какая-то собственная надстройка в виде педставления, хранимок и т.п. - это уже дело техники. Вам так не кажется? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2009, 04:21 |
|
||
|
Как организовать структуру бд с распределением прав.
|
|||
|---|---|---|---|
|
#18+
vuliad - Не совсем могу понять в каких субд имеется механизм RLS и что он там из себя представляет? если в двух словах, в Oracle вы можете решить Вашу задачу с помощью RLS так: а. создается функция, возвращающая условие отбора строк. б. затем она связывается через политику доступа с таблицей, где вы будете применять этот предикат для вывода разных результатов при одном и том же запросе. почитать можно например здесь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2009, 04:48 |
|
||
|
Как организовать структуру бд с распределением прав.
|
|||
|---|---|---|---|
|
#18+
ToshА что будет если злобный пользователь законнектится к вашей БД не через программу?а если с правами админа? а если похитит жёсткий диск с БД?) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2009, 13:24 |
|
||
|
Как организовать структуру бд с распределением прав.
|
|||
|---|---|---|---|
|
#18+
друг мойToshА что будет если злобный пользователь законнектится к вашей БД не через программу?а если с правами админа? а если похитит жёсткий диск с БД?) Физический доступ к серверу или пароль админа еще получить нужно, а вот какому-нить недохакеру хватит ума установить консоль управления и соединиться с сервером по своему имени пользователя и паролю ... а там - уже дело техники и усидчивости пользователя (можно и ЗП себе набить побольше ради прикола - все ведь имена таблицам даем более-менее осознанные). В этом и есть большая проблема систем, построенных по принципу "толстого клиента" - если вся логика на клиенте, то и защита тоже тамже, а значит можно спокойно обойдя клиент лезть в базу в обход защиты. Или вы, друг мой, можете привести пример, когда двухзвенное приложение (клиент<->сервер СУБД), не использующее никакой защиты доступа на самом сервере СУБД, может противостоять подобным трюкам пользователя? (Сразу оговорюсь - трюк с вшиванием имени и пароля в исполняемый код не приводить - где-то тут недалеко уже не один раз такая тема поднималась) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2009, 13:51 |
|
||
|
Как организовать структуру бд с распределением прав.
|
|||
|---|---|---|---|
|
#18+
ToshВ этом и есть большая проблема систем, построенных по принципу "толстого клиента" - если вся логика на клиенте, то и защита тоже тамже, а значит можно спокойно обойдя клиент лезть в базу в обход защиты. 1) Знаете защитится от всего программно практически невозможно. 2) Если вы так подводите почтенную публику к аппсерверу то не не надо ... Однако хочу заметить что не смотря на всю нелюбовь товарища guest_20040621 к мелкомякгким и "Oracle - это игла, с которой не спрыгнуть" наличие встроенных движков в виде Net и Java дает возможность обойти то что уважаемый LSV обозначил словами "Все равно всех приколов безопасности на СУБД не реализовать" Т.е. поместить промежуточное звено в базу а из клиента сделать "толстый браузер" 3) Автору погуглите по словам "ролевой модели разграничения доступа". Возможно это вам поможет обойтись в проекте малой кровью. И очень плохо если вы изначально не зашили в структуру базы таблицы для разграничения прав доступа по данным исходя из вашей предметной области (о! мой грабель 12-ти летней давности ). У нас в конторе есть изначально типовые варианты под это дело основанные как раз на п. 3 которые кастомизируются под конкретный заказной проект. P.S. по пункту 2 это можно сделать и в других СУБД допускающих создание расширений на языках высокого уровня. Но в силу "мейнстрима" ... ______________________________________________________ Давайте считать обступившее нас со всех строн коричневое море шоколадным ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2009, 15:14 |
|
||
|
Как организовать структуру бд с распределением прав.
|
|||
|---|---|---|---|
|
#18+
> не смотря на всю нелюбовь товарища guest_20040621 к мелкомякгким Это не нелюбовь, это отвращение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2009, 00:31 |
|
||
|
Как организовать структуру бд с распределением прав.
|
|||
|---|---|---|---|
|
#18+
shelsoft 2) Если вы так подводите почтенную публику к аппсерверу то не не надо ХДЕ???? Я даже и не думал про это. Аппсервер это, возможно, и решение, но очень накладное в плане разработки. Я имел ввиду, что если есть возможность использовать немного допиленный механизм СУБД по части RLS - его можно и, даже, возможно, нужно использовать. PS: Просто сейчас именно с такой системой и имею проблемы - когда сначала вся безопасность была перенесена на клиента, а потом кто-то умный влез напрямую в базу и наделал косяков. Сейчас появилась необходимость прикрутить к базе RLS. Потому и предупреждаю о том, что рано или поздно подобные ситуации случаются практически со всеми более-менее крупными системами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2009, 03:40 |
|
||
|
Как организовать структуру бд с распределением прав.
|
|||
|---|---|---|---|
|
#18+
LSVКак например некот. пользователям не дать возможность увидеть важную колонку в таблице, (пожимая плечами) Штатная функциональность. LSVА если потом станет ребром вопрос перехода на СУБД без Row-Level Security ? Зострелиццо штоле ? Нет. Запросить кучу денег за тот ненадёжный геморрой, который Вы предлагаете писать сразу и бесплатно. LSVНичего не обойдет. Если так уж важно, то в теле запроса критичная колонка будет показываться или NULL-ится для разных пользователей. Какого запроса? Который он руками напишет в базу? LSVНе суперкритичные колонки можно прятать в самом приложении. Иногда так проще. "Не суперкритичные" - это новое слово в безопасности. Напоминающее про "осетрину второй свежести". Типа "если в девяти местах колонка не показывается, а в десятом программист про это забыл, то ничего страшного - она ведь не суперкритичная". shelsoft1) Знаете защитится от всего программно практически невозможно. Да и аппаратно тоже. Если не относить к аппаратуре бронедверь и топор для перерубания витой пары :) Речь о том, что в сколько-угодно-звенном приложении размещение защиты не на самом дальнем звене (то есть не в СУБД) дает возможность лёгкого получения данных всем, кто имеет возможность пройти мимо предыдущих звеньев. Не взламывая их, а обойдя. В случае и клиент-сервера и аппсервера - любому, кто имеет прямой коннект к машине сервера БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2009, 01:09 |
|
||
|
Как организовать структуру бд с распределением прав.
|
|||
|---|---|---|---|
|
#18+
> Речь о том, что в сколько-угодно-звенном приложении размещение защиты не на самом дальнем звене (то есть не в СУБД) > дает возможность лёгкого получения данных всем, кто имеет возможность пройти мимо предыдущих звеньев. Не взламывая > их, а обойдя. В случае и клиент-сервера и аппсервера - любому, кто имеет прямой коннект к машине сервера БД. Вас-то кто заставляет писать глупости? При грамотных политиках SELinux даже root не получит локального соединения с СУБД, не говоря о прочих юзерах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2009, 09:02 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=36178133&tid=1543067]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
148ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
82ms |
get tp. blocked users: |
2ms |
| others: | 207ms |
| total: | 473ms |

| 0 / 0 |
