|
|
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
К вопросу об администрировании и распределению прав... в прогах при работе с данными на SQL сервере. Этот вопрос к работе любого сервера (не только на IB и др.), но ведь вы с базой все равно на какой-нибудь проге работаете... Задал вопрос на Delphi и чей-то, как-то, никому и никак... Хочу узнать как делают это другие... НАПРИМЕР: при вводе данных необходимо обеспечить распределение прав между пользователями типа: - занесение заказов (заявок) - простановка дат изготовления (планирование) - заполнение технологии (порядка работы) - ... При этом на одной форме операций разные пользователи заносят данные только в свои поля... Если делать только на уровне прав базы - то не приятно нажав Ок получить сообщение что у вас нет прав... Лучше вообще не давать это делать... Делать отдельные формы для каждого - глупо (сегодня у него одни права, а завтра - другие). Я создал служебные таблицы в которых храню 'Имена форм', 'Имена объектов на формах' и 'Права доступа к объектам'. На OnCreate формы считываю этот список в массив, а на OnShow раставляю своийства Enabled и Visible в соответствии со списком прав пользователя (который получаю при входе в систему)... При этом 'запрещенные' кнопки, меню... - серенькие или нет совсем. Для удобства элементы разбиты на группы по панелям (чтоб не задавать для каждого). Управление основано на ограничении прав, а не на разрешении... т.е. заносятся только те формы и элементы доступ к которым необходимо ограничить. При этом все реализуется просто (цепляешь по две функции к формам) и правами рулиш без изменения проги (вплоть до права печати отчетов)... Поделитесь своим опытом, кто что знает и какие у кого в этом вопросе проблемы... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2004, 11:59:26 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
Посмотри IBXUserProfile - потом и нам расскажешь, а то у меня времени небыло смотреть :-( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2004, 12:48:07 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
GoldПосмотри IBXUserProfile - потом и нам расскажешь, а то у меня времени небыло смотреть :-( Благодарю... хоть что-то... бум смотреть... А что больше это никому не нужно? Или уже давно решеный вопрос? Тогда дайте хотябы ссылку... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2004, 13:06:58 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
Уровень прав на приложении не совсем хороший тон. Часть прав все равно надо делать на уровне БД. Возможно ограничение на уровне VIEW. в табличку вносится поле содержащее роль того или иного отдела и соответсвенно видимые/невидимые записи отбираются условием типа: Код: plaintext соответсвенно все операции идут через VIEW, правда придется написать триггеры на вьюшку. Другой вариант когда на каждый оперативный отдел делается вьюха через которую работает он и роль отдела имеет права на вьюху. Тоже самое можно сделать через хранимки. На практике желательно избегать прямых прав пользователей на таблицы. Как то я уже обжегся с тех пор препочитаю перестраховаться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2004, 16:02:35 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
ActionList, все действия - через него. Каждому TActionItem прописывается индивидуальный Tag. таким образом вся раздача прав выполняется вложенным циклом. Более сложный случай (то, что и использую). константные массивы: 1. массив форм (массив строк) 2. массив групп действий (массив строк) 3. массив действий [0..CountActions]: название, номер формы, номер группы, тэг. в базе хранится строка из 0 или 1, длинной как массив [3], т.е. на каждое действие доступ есть/нету. После коннекта к базе всем формам рассылается сообщение "обновиться", и в каждой форме свой обработчик закрывает/открывает доступы к обьектам по общедоступному массиву доступа access: array[0..CountActions] of boolean; На главной форме в одном цикле настраивается доступ к главному меню. Так же в одном цикле настраиваются все формы, основанные на ActionList. при такой организации массива 3 через treeView легко делается форма настройки прав. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2004, 16:27:07 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
А почему бы не просматривать RDB$USER_PRIVILEGES и так заранее узнавать о правах. Работа с метаданными - это универсально. Зачем зря пытаться до получения ошибки? К тому же при работе через ODBC текст ошибки можно перехватывать, а текст ошибки формировать Exception-ом в IB(в виде собственного кода) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2004, 17:40:50 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
2 Winni-Pooh Хочу вас уведомить что заЕбешься пишется в этом случае БОЛЬШИМИ БУКВАМИ :))))) Во вторых это вынос разбора прав в приложение - а это evil. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2004, 18:18:48 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
О каком зле ты говоришь? И как ты это зло себе представляешь? Пойми - это обработка МЕТАДАННЫХ! Это универсально изначально. А на метаданные тоже вообще-то можно правильно распределить права. Вот и все. И поверь мне- это самый короткий код(если руки правильно растут), и никакого гемора. :-)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2004, 18:52:25 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
Зло это объем работы для реализации... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2004, 19:06:21 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
Вынос прав в приложение опасен тем что найдутся люди и в зависимости от ценности информации будут вносить изменения ручками в обход твоей безопасности реализованной в приложении. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2004, 19:29:47 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
Я так не думаю.. А по поводу ХП и вьюшек просто добавлю для olol, что последние - прекрасное средство ограничения доступа для массового изменения содержимого таблицы. Поясню: некоторым работникам(ролям)необходимо логически дать право удалять записи из какого-либо журнала. Если просто дать право на DELETE, то юзер по глупости и из чувства ламерства может ухнуть нахрен все содержимое таблицы за раз, хотя тебе хотелось, чтобы удаление могло происходить только по 1 записи(документу) и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2004, 19:32:58 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
Безопасность это комбинация приложения и БД. и нельзя всю выносить все в приложение. Аксиома. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2004, 19:39:53 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
to Tonny Решение типа ActionList хорошо, если проектируешь небольшую информационную систему, а если большую, полиморфную, то наоборот, стремятся убрать из клиента ВСЕ ДАННЫЕ о бизнес-правилах работы клиента. В этом случае ВСЕ ДОЛЖНО ХРАНИТЬСЯ В БАЗЕ ДАННЫХ, даже схемы обработки документов. Только тогда при изменении правил программеру не придется лезть в исходник или мудрить с совершенной системой обновления логических настроек клиента. Представь систему на 150-200 пользователей, с 10-20 видами АРМов, где есть общие универсальные модули работы с данными, зависящими от бизнес-правил ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2004, 19:41:10 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
Вот блин заработался .... прям говорить внятно разучился :))))))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2004, 19:41:53 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
to Igor Elyas Полностью с вами согласен. Но имею в виду причину не безопасность, а гибкость системы в целом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2004, 19:43:26 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
to Igor Elyas Моя последняя реплика к вашей предпоследней, если что.... :D. Предлагаю перейти к обсуждению предложенной мной темы по трехзвенке как более мощной форме распределения прав и контроля Базы Данных и рассматривать как продолжение текущей теме....Просто я не нашел на этом форуме обсуждения трехзвенки ранее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2004, 19:53:27 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
Спасибо за обсуждение, не успел ничего спросить… (рабочий день кончился). Пару слов от себя: GoldПосмотри IBXUserProfile - потом и нам расскажешь, а то у меня времени небыло смотреть :-( Посмотрел… Ну что сказать… Возможно кого-то заинтересует… но хранение прав в BLOB меня не прельщает… Winni-Pooh А почему бы не просматривать RDB$USER_PRIVILEGES… …это универсально. Хоть это форум IB и др., но если говорить об универсальности то, как быть с Oracle, MS и др. Каждый варится в собственном соку… У меня сегодня IB – а завтра его могут уничтожить как класс и все делать на Oracle (на нем - зарплата и сие от меня не зависит). Winni-Pooh …ВСЕ ДОЛЖНО ХРАНИТЬСЯ В БАЗЕ ДАННЫХ, даже схемы обработки документов. Разве в RDB$USER_PRIVILEGES есть перечень прав к формируемым отчетам? Или предлагаешь их туда занести? Igor Elyas Уровень прав на приложении не совсем хороший тон. Часть прав все равно надо делать на уровне БД. Проверка прав прогой вовсе не исключает наличие прав в БД. Я согласен, что безопасность - это комбинация приложения и БД, но разве есть какая-то разница между работой через ХП с ограниченными правами и заданию этих же прав на элементы прогой? Причем когда я, например, вывожу форму для редактирования выполняемой операции, то разные пользователи заносят только свои данные, а доступа к ‘чужим’ у них нет, хотя они отображаются. Главное - я уяснил – что сделал не так уж и плохо… мож кто истчо чо добавит… ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2004, 07:26:55 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
в процессе размышлений на эту тему я пришол к выводу о необходимости создания промежуточного звена, отвечающего за доступ к объектам. Это касается только моего конкретного случая, насколько это подойдет к другим задачам - другой вопрос. В моем случае пользователи работают не с таблицами, полями или процедурами, они работают с документами и свойствами документов. Вот я и думаю, что промежуточный слой должен преобразовывать запросы клиентских приложений на получение/изменение документов в запросы к sql серверу сообразно правам доступа пользователя, который делает запрос. Причем пользователь будет определен как пользователь NT домена, а не пользователь базы данных. Но это только мысли, на практике у меня этот промежуточный слой зашит в клиентскую программу, что конечно не есть гут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2004, 07:46:45 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
Посмотри здесь. имхо: это то что доктор прописал :))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2004, 08:39:36 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
alex_k В моем случае пользователи работают не с таблицами, полями или процедурами, они работают с документами и свойствами документов. Что значит - работают с документами? Если это таблица с полями свойств и BLOB полем для хранения файла документа - то какая разница? Любое действие в проге происходит не само посебе, а нажав соответствующую пимпочку или пунтик меню, кроме 'быстрых' клавиш (которые всеравно должны быть привязаны к ним). Соответственно, если все визуальные элементы будут перечислены с правами доступа, то любое действие в проге можно рулить... И пускай не смущает 'большой' перечень прав... ведь в твоей проге они серано задаются и проверяются... а на деле перечень окажется не очень большим. У меня есть таблица групповых прав и состав групп Например: Технические службы->Конст.Тех.отдел->Технологи->Ведущий технолог Задав юсеру право 'Ведущий технолог' - он автоматом получает и все остальное... Чем ниже право - тем больше, но уже. Можно задать любую группу включив туда всего помаленьку... Весь перечень прав я получаю по ХП одним запросом... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2004, 08:43:17 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
Еще здесь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2004, 08:49:04 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
Dik76Посмотри здесь. имхо: это то что доктор прописал :))) Не понял юмора... я не такой гигант мысли... Ну потратил я на создание этих таблиц и форм их редактирования пару дней... Потом за полчаса переделал программку... Зато теперь не надо менять прогу из-за того, что кому-то что-то надо разрешить или запретить... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2004, 09:14:20 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
Ты не понял, там есть ядро безопасности. Права доступа определяются через него. Переписывать ни чего не надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2004, 09:20:34 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
[quot olol Что значит - работают с документами? [/quot] это значит что в принципе, пользователю не важно что и как. он работает с документом. Медиаплан, счет, прайслист, не важно. В любом случае он видит то что получит. Обычно это табличка в стиле екселя, в которой он заполняет нужные поля. Поэтому эти данные, из которых состоит документ, вполне возможно передавать клиенту и не в виде результата sql запроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2004, 09:22:30 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
Dik76 …там есть ядро безопасности. …Переписывать ни чего не надо. Не для меня все это… В одиночку такое не делают… И что значит ‘ни чего не надо’? Насколько я понял, сама прога должна быть написана с обращением к объекту ядра… Что мне писать новую прогу? Времени нет и на текущие дела… Да и не бесплатно это… to alex_k Если прога берет данные не из таблиц – то я пас… Хотя их наверно тоже можно перечислить и описать (в прогу же закладываешь какую-то логику) Да и с прямым вводом в грид нужно делать немножко по другому… Ведь грид – это один объект, а нужен доступ к ячейкам грида… Я над этим не заморачивался… у меня просто нет прямого редактирования в гридах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2004, 09:56:03 |
|
||
|
|

start [/forum/topic.php?fid=40&msg=32562457&tid=1578417]: |
0ms |
get settings: |
6ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
429ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
| others: | 188ms |
| total: | 685ms |

| 0 / 0 |
