Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Безопастность на уровне базы данных / 17 сообщений из 17, страница 1 из 1
30.09.2009, 14:14
    #36225130
blest
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Безопастность на уровне базы данных
Есть таблица контрагентов. Нужно, чтобы каждый созданный контрагент мог создавать своих контрагентов. Реализовать хочу 2-мя таблицами: 1 таблица контрагентов(со своими полями и ограничениями уникальности) и 2-я таблица иерархической структуры:
Код: plaintext
 Id   PId   CId
- Инкремент, айдишник родительского контрагента и айдишник его заведеного контрагента. Думаю это правильно.
Заполняться таблицы будут из клиентского приложения, и вывод будет делаться туда же. Вопрос в безопастности на уровне базы данных.
Контрагент будет заходить в программу под своим логином/паролем. Соответственно как сделать, чтобы ни каким ошибочным запросом этот контрагент не смог увидеть не своих созданных контрагентов? Как это можно сделать (логином в базу/схемой или чем-нибудь еще) ?
...
Рейтинг: 0 / 0
30.09.2009, 17:40
    #36225845
LSV
LSV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Безопастность на уровне базы данных
Делайте доступ только через ХП. И наступит счастье.
Иначе от прямых запросов не защититься.
Можно попробовать вместо ХП применить вьюху, в кот. есть типа функция-фильтр по "вычислению" прав.
Но ХП лучше, хотя геморнее.
...
Рейтинг: 0 / 0
30.09.2009, 18:01
    #36225946
shelsoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Безопастность на уровне базы данных
blest Реализовать хочу ...
Простой вопрос о дублях в такой схеме
1) А что будет если есть некая организация ООО "Рога и копыта" которую завел и Контрагент1 и Контрагент2 ? Организация то одна а заведена дважды ?
2) Или конрагент2 является Контрагентом1
....
Вот тут ваши две таблицы не катят И по всей видимости без кросс-таблиц связи вам не обойтись. Что-то типа <контрагент> => <доступные_контрагенты> => <все_конрагенты>
...
Рейтинг: 0 / 0
30.09.2009, 19:00
    #36226090
blest
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Безопастность на уровне базы данных
shelsoftblest Реализовать хочу ...
Простой вопрос о дублях в такой схеме
1) А что будет если есть некая организация ООО "Рога и копыта" которую завел и Контрагент1 и Контрагент2 ? Организация то одна а заведена дважды ?
2) Или конрагент2 является Контрагентом1
....
Вот тут ваши две таблицы не катят И по всей видимости без кросс-таблиц связи вам не обойтись. Что-то типа <контрагент> => <доступные_контрагенты> => <все_конрагенты>

Ну да, как раз об этом щас и думаю. =)
В вашем варианте можете рассказать, что такое доступные_контрагенты?
...
Рейтинг: 0 / 0
01.10.2009, 22:36
    #36228483
12345678
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Безопастность на уровне базы данных
http://www.youtube.com/watch?v=OkzoBY2FZmo&NR=1
...
Рейтинг: 0 / 0
03.10.2009, 19:42
    #36230962
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Безопастность на уровне базы данных
shelsoft
Простой вопрос о дублях в такой схеме
1) А что будет если есть некая организация ООО "Рога и копыта" которую завел и Контрагент1 и Контрагент2 ? Организация то одна а заведена дважды ?

Очень сложный вопрос

Убей двойника

/topic/10671&pg=1&hl=%f3%e1%e5%e9+%e4%e2%ee%e9%ed%e8%ea%e0
...
Рейтинг: 0 / 0
05.10.2009, 09:25
    #36232010
Денис Ильин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Безопастность на уровне базы данных
на уровне хранимых процедур нужно защиту делать.
это, скажем так, гораздо лучше расширяется.
да и с вставками будет проблем меньше, например: можно запретить вводить названия, у которых в рамках одного слова встречаются буквы из разных алфавитов и т.п... пытаться искать уже существующие названия с изменённой капитализацией и т.д., и т.п., как это сделать чисто на вьюхах не понятно, да и наверное, не нужно.
...
Рейтинг: 0 / 0
05.10.2009, 17:05
    #36233397
blest
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Безопастность на уровне базы данных
Денис Ильинна уровне хранимых процедур нужно защиту делать.
это, скажем так, гораздо лучше расширяется.
да и с вставками будет проблем меньше, например: можно запретить вводить названия, у которых в рамках одного слова встречаются буквы из разных алфавитов и т.п... пытаться искать уже существующие названия с изменённой капитализацией и т.д., и т.п., как это сделать чисто на вьюхах не понятно, да и наверное, не нужно.

Так, а на уровне хранимых процедур вы имеете ввиду для каждого пользователя создавать свою хранимку и в ней делать нужны выборки/фильтры ну и всякие дополнительные проверки?
...
Рейтинг: 0 / 0
05.10.2009, 19:38
    #36233777
Senya_L
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Безопастность на уровне базы данных
blestТак, а на уровне хранимых процедур вы имеете ввиду для каждого пользователя создавать свою хранимку и в ней делать нужны выборки/фильтры ну и всякие дополнительные проверки?Озверели?!
...
Рейтинг: 0 / 0
05.10.2009, 21:43
    #36233906
blest
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Безопастность на уровне базы данных
Senya_LblestТак, а на уровне хранимых процедур вы имеете ввиду для каждого пользователя создавать свою хранимку и в ней делать нужны выборки/фильтры ну и всякие дополнительные проверки?Озверели?!

Так я ж и прошу объяснить..
...
Рейтинг: 0 / 0
05.10.2009, 22:33
    #36233949
Денис Ильин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Безопастность на уровне базы данных
человек начал думать в правильном направлении, но немножко не додумал.
хранимая процедура, скажем, будет одна. будут даны пользователю права на её исполнение.
скажем, эта процедура будет возвращать.. ну скажем, она будет возвращать всех подчинённых пользователя.
в момент исполнения хранимой процедуры id пользователя, который её вызвал - известен.
далее есть несколько способов, самый тупой и лобовой - это написать большой оператор switch / case. не лобовой - обратиться к таблице подчинения с headID = (id нашего пользователя)
в общем идея такая - нужные данные (и только те, к которым имеет право доступа!) пользователь получает благодаря своему волшебному userID.
в sql server этот id можно получить с помощью функции suser_id(), аналогичные штуковины есть и на (всех?..) остальных СУБД.

как то так.
...
Рейтинг: 0 / 0
05.10.2009, 22:36
    #36233955
Денис Ильин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Безопастность на уровне базы данных
т.е. комбинируем 2 аутентификации:
1) имеет ли право пользователь вообще исполнять такую хранимую процедуру? это встроенный в сервер метод
2) гибкий метод (самопальный), основанный на знании userID. можно гибко давать практически любые права, детализация идёт вплоть до отдельных записей ( первый способ аутентификации такую возможность не даёт)
...
Рейтинг: 0 / 0
07.10.2009, 09:27
    #36236514
blest
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Безопастность на уровне базы данных
Денис Ильинчеловек начал думать в правильном направлении, но немножко не додумал.
хранимая процедура, скажем, будет одна. будут даны пользователю права на её исполнение.
скажем, эта процедура будет возвращать.. ну скажем, она будет возвращать всех подчинённых пользователя.
в момент исполнения хранимой процедуры id пользователя, который её вызвал - известен.
далее есть несколько способов, самый тупой и лобовой - это написать большой оператор switch / case. не лобовой - обратиться к таблице подчинения с headID = (id нашего пользователя)
в общем идея такая - нужные данные (и только те, к которым имеет право доступа!) пользователь получает благодаря своему волшебному userID.
в sql server этот id можно получить с помощью функции suser_id(), аналогичные штуковины есть и на (всех?..) остальных СУБД.

как то так.

Про айдишник пользователя понятно. Тогда я насколько понял в основной таблице нужно создавать дополнительное поле, куда записывать этот userID пользователя создавшего строку? чтобы потом юзер имел возможность обратиться к тем строкам, которые он создал и уже в таблице подчиненя назначать различные права на его созданные строки, так?
...
Рейтинг: 0 / 0
07.10.2009, 16:40
    #36237992
Senya_L
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Безопастность на уровне базы данных
blestПро айдишник пользователя понятно. Тогда я насколько понял в основной таблице нужно создавать дополнительное поле, куда записывать этот userID пользователя создавшего строку? чтобы потом юзер имел возможность обратиться к тем строкам, которые он создал и уже в таблице подчиненя назначать различные права на его созданные строки, так?Если уж Вы хотите "застолбить" отдельные строки в таблице за разными пользователями, то владение надо как-то обозначить. А как это сделаете - дело личное и зависит в том числе от СУБД. Заведите таблицу пользователей БД, а в таблице данных хранить их userID.

Общее, пожалуй одно: исполняемая ХП должна иметь полный доступ к целевой таблице, пользователь должен иметь права на исполнение ХП, но не имеет права на SELECT из таблицы. ХП выступает в качестве "черного ящика", которая фильтрует выходной рекордсет. Например, в MSSQL это опция EXECUTE AS, в FB - гранты на SELECT для ХП. Как-то так.
...
Рейтинг: 0 / 0
07.10.2009, 17:20
    #36238109
shelsoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Безопастность на уровне базы данных
Cat2Убей двойника
К моменту "убивания" записи как ключивые могут быть уже обвехованы договорами, сотрудниками и прочей ... ерундой. Читаю вашу ссылку вспоминаю что "есть хирурги, а есть терапевты у которых само неужное отваливается" ))) Отдельная тема как заводить объект в базу дабы не было дубликатов

Senya_L...
Еще раз настаиваю на своем подходе преиведенном выше. А именно использовании ACL-кросстаблицы связи с полями типа ID_USER и ID_CONTRAGENT. Хранение ID_USER в данных исключает возможность дать доступ на строку таблицы нескольким пользователям.

Для автора топика что такое ACL тоже найдете в вики


______________________________________________________
Давайте считать обступившее нас со всех строн коричневое море шоколадным
...
Рейтинг: 0 / 0
07.10.2009, 17:32
    #36238127
Senya_L
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Безопастность на уровне базы данных
shelsoftSenya_L...
Еще раз настаиваю на своем подходе преиведенном выше. А именно использовании ACL-кросстаблицы связи с полями типа ID_USER и ID_CONTRAGENT. Хранение ID_USER в данных исключает возможность дать доступ на строку таблицы нескольким пользователям. Я не против. Так оно, конечно, правильнее, но и сложнее. Если автора не пугают трудности и он решит использовать более сложные схемы - дам еще такой тынц .
...
Рейтинг: 0 / 0
07.10.2009, 17:32
    #36238128
Денис Ильин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Безопастность на уровне базы данных
А как это сделаете - дело личное и зависит в том числе от СУБД. Заведите таблицу пользователей БД, а в таблице данных хранить их userID.

можно в таблице с данными, на которые требуются права, скажем, хранить эти права в виде битовой маски, при чём не для отдельных пользователей, а сразу для групп пользователей.
вполне себе кросс-RDBMS решение.
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Безопастность на уровне базы данных / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]