powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / Раздача прав на объекты СУБД специальным пользователем
21 сообщений из 21, страница 1 из 1
Раздача прав на объекты СУБД специальным пользователем
    #36900188
Доброго времени суток!

Система : Двухзвенка на Delphi + СУБД PostgreSQL.

Требуется обеспечить возможность раздачи прав пользователям(пользователи заходят под своей учетной записью СУБД) определенным лицам. Есть начальники отделов и они хотят сами раздавать права пользователям своего отдела.

Естественно что они не должны и не будут раздавать права на вьюшки, процедуры и таблицы. Для них было бы понятнее, если они могли создавать группы пользователей и раздавать им права путем проставления галочек напротив терминов предметной области, типа Просмотр ведомости №123, просмотр справочника А, редактирование справочника Б и т.д.

Вот только как это организовать? Если создавать роли и разрешать им включать/исключать пользователей в эти роли, то придется создавать роль на каждое действие, которое требует разграничение доступа(Просмотр ведомости №123, просмотр справочника А, редактирование справочника Б). Вот только ролей получается очень много.

Что можете посоветовать?
...
Рейтинг: 0 / 0
Раздача прав на объекты СУБД специальным пользователем
    #36900312
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 14.10.2010 19:49, Лень региться wrote:

> Что можете посоветовать?

Не маятся дурью и делать своё собственное секьюрити.
Права на таблички и процедуры не использовать.
Row-wise level access control в том числе делать. Думаю, в итоге
он понадобится всё равно. Многие, кто вопросами типа вашего
задаётся, заканчивают всё равно тем, что оказывается он
нужен.

Дело это сложное, но благодарное.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Раздача прав на объекты СУБД специальным пользователем
    #36900409
MasterZiv
Права на таблички и процедуры не использовать.


Что значит не использовать?
Это 2-х звенка, пользователи заходят под учетной записью СУБД. На данный момент создано несколько ролей, которые назначаются учетным записям пользователей и пользователи, даже при очень большом желании(зайдя через SQL менеджер и т.д.) не смогут получить доступ больший чем тот, который дан их ролям.

Но возникла необходимость более гибкой раздачи прав.


MasterZiv
Не маятся дурью и делать своё собственное секьюрити.

Заводить собственную таблицу с пользователями и их паролями(хэшами) + свою систему прав (RBAC, ACL и т.д.). А доступ к БД будет иметь только специальная учетная запись? А как пользователи будут получать данные из БД?
...
Рейтинг: 0 / 0
Раздача прав на объекты СУБД специальным пользователем
    #36900435
Первое, что пришло в голову - все операции с данными делать только через ХП.
Доступ на ХП дать всем пользователям, а внутри ХП делать проверку:
нечто
Код: plaintext
check_permission('VIEW_DOCUMENTS');

Но как-то слишком сложно получается - на каждый чих писать ХП.
...
Рейтинг: 0 / 0
Раздача прав на объекты СУБД специальным пользователем
    #36900673
905
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лень региться,

а если ограничится небольшим перечнем обобщенных действий - тогда для них создать роли и навестить на виды и ХП
очень большой и подробный перечень всех действий будет утомлять начальство )
...
Рейтинг: 0 / 0
Раздача прав на объекты СУБД специальным пользователем
    #36900851
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лень регитьсяпользователи заходят под учетной записью СУБД.
...
даже при очень большом желании(зайдя через SQL менеджер и т.д.) не смогут получить доступ больший чем тот, который дан их ролям.На такой случай в клиентской программе нашей КБД логины/пароли модифицируются неизвестным пользователям способом и, как следствие, использовать свои логины/пароли при коннекте напрямую к БД они не смогут.

Правда, систему прав все равно пришлось реализовать свою, т.к. бизнес-права не могут иметь взаимно однозначного соответствия с правами в СУБД.
...
Рейтинг: 0 / 0
Раздача прав на объекты СУБД специальным пользователем
    #36901027
Кифирчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лень регитьсяПервое, что пришло в голову - все операции с данными делать только через ХП....Но как-то слишком сложно получается - на каждый чих писать ХП.
нормально...
делаете "табличку разграничения прав" - на документы, на операции... структуру под себя...

на её изменение хранимую процедуру, к которой доступ даете ток руководителю...

вывод, например документов, через хранимку, которая сама проверит можно ли текущему пользователю выводить "эту строку"
также и "редактирование справочника Б"... хранимка смотрит в access table, если пользователю нельзя редактировать, то отправаляет error

в отличии от прямого доступа к таблицам, в хранимках можно логить действия пользователей... для возможного разбора полетов...
ИМХО это не сложно, а скорее более удобно

такое тоже делал на PostgreSQL... единственное, если при, так называемом row access, с большим колличество доков, начинает тормозить... надо как-то делить доки на "уровни доступа" и лепить "мандатный доступ"... и в случае необходимости более гибкого варианта применять индивидуально - документ/пользователь
...
Рейтинг: 0 / 0
Раздача прав на объекты СУБД специальным пользователем
    #36901229
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 14.10.2010 23:08, Лень региться wrote:
> Что значит не использовать?
> Это 2-х звенка, пользователи заходят под учетной записью СУБД. На данный момент
> создано несколько ролей, которые назначаются учетным записям пользователей и
> пользователи, даже при очень большом желании(зайдя через SQL менеджер и т.д.) не
> смогут получить доступ больший чем тот, который дан их ролям.

Процедуры используй, и всё. К таблицам доступ вообще не давай.

> Заводить собственную таблицу с пользователями и их паролями(хэшами) + свою
> систему прав (RBAC, ACL и т.д.). А доступ к БД будет иметь только специальная
> учетная запись? А как пользователи будут получать данные из БД?

Процедуры используй, и всё. К таблицам доступ вообще не давай.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Раздача прав на объекты СУБД специальным пользователем
    #36901234
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 14.10.2010 23:08, Лень региться wrote:

> Права на таблички и процедуры не использовать.
=
> Что значит не использовать?

Ты просто подумай, хватит ли тебе возможностей управления
правами на уровне СУБД. Думаю, 80% вероятности, что не
хватит.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Раздача прав на объекты СУБД специальным пользователем
    #36901967
MasterZiv, Кифирчик, miksoft

Спасибо за советы!

Идея с хранимыми процедурами тоже понравилась, но есть 2 НО:

1) Смущает необходимость написания ХП а-ля:
sp_get_documents (тут нам надо показать документы)
sp_get_documents_user (тут нам надо показать документы + информацию об авторах)
sp_get_documents_dept (Документы + информацию об подразделениях)
sp_get_documents_tree (документы для вывода дерева на клиенте...пример не самый удачный, ну да ладно: )
sp_get_documents_grid
.....
И т.д.
То есть это почти одни и теже данные, но либо изменяется набор выходных полей (добавляется наименование или описание присоединенных таблиц) или нужно присоединить другую таблицу и в результате увеличится кол-во записей(ну и добавятся некоторые поля).

2)
Допустим на форме(клиентсое приложение) выводится список документов и необходимо реализовать фильтрацию данных(пользователь в полях фильтра вводит значение и данные фильтруются). Без ХП все просто:
В приложении динамически генерируется запрос вида
Код: plaintext
 SELECT * FROM vw_docs WHERE doc_author LIKE 'ива%' AND doc_type_id =  4 
, в зависимости от заполненных полей фильтра и выполняется на сервере.
А как быть с ХП?
Писать хранимку на все возможные поля фильтра
Код: plaintext
sp_get_documents(doc_name, doc_type, ..., filter_25)
и в зависимости от того, какие параметры
Код: plaintext
IS NOT NULL
то по тем и строить запрос?

Фильтровать данные после хранимки
Код: plaintext
SELECT * FROM sp_get_documents() WHERE doc_author LIKE 'ива%'
тоже не выход - по причине низкой производительности.
...
Рейтинг: 0 / 0
Раздача прав на объекты СУБД специальным пользователем
    #36902380
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 15.10.2010 17:38, Лень региться wrote:

> 1) Смущает необходимость написания ХП а-ля:
> sp_get_documents (тут нам надо показать документы)


Не понял, что таки смущает. Что надо писать процедуры ?


> 2)
> Допустим на форме(клиентсое приложение) выводится список документов и необходимо
> реализовать фильтрацию данных(пользователь в полях фильтра вводит значение и
> данные фильтруются). Без ХП все просто:
> В приложении динамически генерируется запрос вида
>
> SELECT *FROM vw_docsWHERE doc_authorLIKE 'ива%' AND doc_type_id =*4*
>
> , в зависимости от заполненных полей фильтра и выполняется на сервере.

Ты просто не понимаешь. Без ХП всё ровно так же непросто, как и с ХП.
Дело в том, что такие вот запросы в реальности в больших БД тупо не работают.
Из всех возможных запросов, которые можно сгенерировать таким образом,
работать будут порядка 20%. Остальные работать будут крайне медленно,
а это всё равно, что их вообще нет.

> А как быть с ХП?

Как и без ХП, нужно выделять разумные критерии поиска нужных данных,
под них делать индексы и писать запросы. Их будет пять-десять. Все остальные
критерии поиска запрещать. Для вариантов с ХП тебе нужно будет ещё реализовать
каждый вид поиска в ХП, и всё.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Раздача прав на объекты СУБД специальным пользователем
    #36902852
Кифирчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лень региться
1) Смущает необходимость написания ХП а-ля:
sp_get_documents (тут нам надо показать документы)
sp_get_documents_user (тут нам надо показать документы + информацию об авторах)
sp_get_documents_dept (Документы + информацию об подразделениях)
sp_get_documents_tree (документы для вывода дерева на клиенте...пример не самый удачный, ну да ладно: )
sp_get_documents_grid
.....
И т.д.
То есть это почти одни и теже данные, но либо изменяется набор выходных полей (добавляется наименование или описание присоединенных таблиц) или нужно присоединить другую таблицу и в результате увеличится кол-во записей(ну и добавятся некоторые поля).

не совсем понял проблемы, для каждой ХП у вас свой возвращаемый набор, равно как и было бы для предствления.
Лень регитьсяДопустим на форме(клиентсое приложение) выводится список документов и необходимо реализовать фильтрацию данных(пользователь в полях фильтра вводит значение и данные фильтруются). Без ХП все просто:
В приложении динамически генерируется запрос вида
Код: plaintext
 SELECT * FROM vw_docs WHERE doc_author LIKE 'ива%' AND doc_type_id =  4 
, в зависимости от заполненных полей фильтра и выполняется на сервере.
А как быть с ХП?
Писать хранимку на все возможные поля фильтра
Код: plaintext
sp_get_documents(doc_name, doc_type, ..., filter_25)
и в зависимости от того, какие параметры
Код: plaintext
IS NOT NULL
то по тем и строить запрос?

Фильтровать данные после хранимки
Код: plaintext
SELECT * FROM sp_get_documents() WHERE doc_author LIKE 'ива%'
тоже не выход - по причине низкой производительности.
не... про select * from view... - забудьте )))
тут надо "оптимизировать" исходя из ситуации..
например, мой случай...
у мя все крутилось вокруг таблицы документов, и их статусов (что-то типа docflow)
и причем, надо было одновременно в таблицу выводить около 12 статусов... чтоб было видно когра регали, когда/кому отписали, когда исполнили...
то есть к основной таблице, около 12 join таблицы status_list и ещё к ним join таблицы status_name чтоб узнать "Названия статусов" и ещё приджойнить таблицу с пользователями которые задали этот статус и кому перенаправили док...
в общем это большая жесть, аксес задумывался на минуту уже при 200х документах, собственно почему на PostgreSQL перевел все...
а ещё и надо искать Like почти по всем строковым полям.., фильтровать по статусу ("все новые" или "на исполнеии"), по дате самого документа и дате регистрации
то есть, ядро сперва джойнило почти весь массив с данными, выбирала диапазоны с подходящими датами и строками... в общем жуть
надо было что-то делать...

сделал отдельную табличку, для предварительного отсева, назвал её doc_index
там был doc_id, последний статус, нужные даты (разбил по int полям), пользователей...и одно поле строку... тип данных что-то с vector связанное, для полнотекстового индекса (туда через пробел пихал все строковые поля по которым надо искать), и на наделал много соответствующих индексов. когда вызывается хранимка на сохранение дока - обновляется этот "всевдо индекс"

основной критерий отсева доков - дата регистрации/документа или диапазон и поледний статус...
это все выбирается исходя из вашей специфики... у вас возможно это будет "отдел" или "проект" или ещё что-то...
исходя из этого, во временную таблицу, выбирал все doc_id которые соответствуют нужным критериям, через int поля таблицы doc_index это делаетс очень быстро
если была введена строка - то динамически клеем where str_index like... FullSeachText тоже довольно быстр.....

ещё... пользователю по умолчанию выдаем ток 50 документов (что с нормальным поиском вполне хватает), но он может выбрать ещё и 100, и 1000
Далее, надо эту табличку с doc_id заполнить содержимым... куча тех страшных джойнов
и тут я понял одну вещь... всего, я могу вывести около 40 полей для одного дока... но зачем пользователю 40 полей, они на экране не поместятся... причем одни поля могут быть нужны одним пользователям, и ненужны другим...
тогды ещё одну табличку, где хранятся описания какие поля какому пользователю нужны
и в процедуре выдачи дока - образно:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
if( упользователя стоит галочка1)
begin
   update result_table set f1 = a.status_date
   from (select....);
end;
if( упользователя стоит галочка2)
begin
   update result_table set f2 = a.status_name
   from (select....);
end;
...
такой отсев тоже дал хороший прирост, обычно из 40 полей надо максимум 10...14

с клиента конечно сложнее передавать условия запроса, много параметров...
но, когда для тестирования забил 30тыс доков... был длинный первый запрос пользователя, до 7 сек... а все остальные укладывались до 2 сек... на десктопе
можно было ещё быстрее, если учесть, что 95% запросов на документы которые "в работе", а это всего 40...100 последних документов
то можно было сделать таблицу "архив", куда все исполненное сбрасывать
на "оперативной таблице" быстрый поиск критичен, на архивной - нет, туда обращаются только при разборе полетов, построения отчетов, и посмотреть "как было"
можно секционирование делать (на разные таблицы), "за год", или "для отдела", "для проекта"
и все это спрятать за процедурой, для клинета это будет незаметно

в общем ХП дает очень много возможностей по оптимизации выборки, там можно играться опциями оптимизатора, местами, более "интелектуально" чем это делает он сам... например включить один режим для одного запроса, и после другой для следующего, чтоб добиться максимум производительности
...
Рейтинг: 0 / 0
Раздача прав на объекты СУБД специальным пользователем
    #36903297
Кифирчик
не совсем понял проблемы, для каждой ХП у вас свой возвращаемый набор, равно как и было бы для предствления.

Это я к тому, что по сути одни и те же данные(с незначительными изменениями) в приложении необходимо показывать по разному и порой бывает проще написать необходимый запрос прямо в клиентском приложении,а не городить для каждого случая view или ХП.

Пример:
Допустим у нас есть таблица, описывающая норматив расхода материала на деталь:
НормативДеталь_IDМатериал_IDНорматив_IDКол-во

В форме №1 клиентского приложения нам нужно показать следующие поля:
Норматив.*, Материал.Наименование, Деталь.Обозначение

Позже выяснилось, что во 2-й форме тоже нужно показывать нормы, но для других целей и соответственно набор полей немного изменится:
Все поля из первого примера
+Наименование Ед.Измерения (Ссылка находится в таблице материалов)
+Дополнительные атрибуты материала и детали
+еще что-то

Придется писать две хп? А можно ведь просто написать эти два запроса прямо в приложении и все.


P.S. Я не против использования ХП, пугает необходимость создания их в огромном количестве.
...
Рейтинг: 0 / 0
Раздача прав на объекты СУБД специальным пользователем
    #36903337
Кифирчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лень регитьсяКифирчик
не совсем понял проблемы, для каждой ХП у вас свой возвращаемый набор, равно как и было бы для предствления.

Это я к тому, что по сути одни и те же данные(с незначительными изменениями) в приложении необходимо показывать по разному и порой бывает проще написать необходимый запрос прямо в клиентском приложении,а не городить для каждого случая view или ХП.

Пример:
Допустим у нас есть таблица, описывающая норматив расхода материала на деталь:
НормативДеталь_IDМатериал_IDНорматив_IDКол-во

В форме №1 клиентского приложения нам нужно показать следующие поля:
Норматив.*, Материал.Наименование, Деталь.Обозначение

Позже выяснилось, что во 2-й форме тоже нужно показывать нормы, но для других целей и соответственно набор полей немного изменится:
Все поля из первого примера
+Наименование Ед.Измерения (Ссылка находится в таблице материалов)
+Дополнительные атрибуты материала и детали
+еще что-то

Придется писать две хп? А можно ведь просто написать эти два запроса прямо в приложении и все.


P.S. Я не против использования ХП, пугает необходимость создания их в огромном количестве.
в постгрисе, есть что-то типа табличных типов данных...
то есть вы создаете таблицу t1(a,b,c,d)
и обозначаете что хранимая процедура должна вернуть данные такого типа...
примерно (procedure get_data1(...) as t1 set of records)

потом, когда выяснилось, что надо ещё данных
преобразовываете таблицу t1 в (a,b,d,c,E)
в случае когда надо (a,b,c,d) - обозначаете это во входном параметре процедуры...
при этом поле E не надо заполнять в процедуре, оно пустым будет
если надо (a,b,d,c,E), то вновь обозначаете это в выходном параметре, и уже дополнительно запрашиваете данные для столбца Е


хотя, если вам надо тупо две таблицы обьеденить, и не нужно разделять права на строки, нет напрягов с производительностью - то просто сделайте новое view :)
...
Рейтинг: 0 / 0
Раздача прав на объекты СУБД специальным пользователем
    #36903645
Кифирчик, Большое спасибо Вам за советы.
Подскажите пожалуйста как быть с этим:

Кифирчик
в постгрисе, есть что-то типа табличных типов данных...
то есть вы создаете таблицу t1(a,b,c,d)
и обозначаете что хранимая процедура должна вернуть данные такого типа...
примерно (procedure get_data1(...) as t1 set of records)

Это понятно, но допустим мне надо делать выборку номенклатуры.

Исходные данные - таблица products
Productsidcodenametype
Записей в таблице ~ 1KK

Нужно обеспечить постраничный вывод записей и возможность задания сортировки пользователем.
А так же фильтрацию по полям code, name и типу номенклатуры.

Вопрос: как это лучше сделать?

1)Запрос с клиента
В формочке клиента, в зависимости от заполненных полей и отмеченных столбцов для сортировки мы формируем запрос:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT 
             id, type, code, name 
FROM 
             products 
WHERE 
             type = 'material' AND 
             name LIKE 'ПРОВОЛО%'
ORDER BY 
             code DESC, name
LIMIT 
             1000 
+Работать будет максимально быстро, индексы будут задействованы.

2)Самый простой вариант с ХП.
Код ХП:
Код: plaintext
1.
2.
3.
4.
5.
6.
CREATE OR REPLACE FUNCTION get_products()
  RETURNS TABLE(id integer, type varchar, code varchar, name varchar) AS
$BODY$
  SELECT id, type, code, name  FROM products
$BODY$
  LANGUAGE 'sql';
Запрос с клиента:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT 
             id, type, code, name 
FROM 
             get_products() 
WHERE 
             type = 'material' AND 
             name LIKE 'ПРОВОЛО%'
ORDER BY 
             code DESC, name
LIMIT 
             1000 
+Права доступа можно проверять в ХП
-Прощай индексы и вообще максимальная производительность
Этот вариант подходит разве что для небольших справочников.


3)Как и писал MasterZiv:
MasterZivнужно выделять разумные критерии поиска нужных данных,
под них делать индексы и писать запросы. Их будет пять-десять. Все остальные
критерии поиска запрещать. Для вариантов с ХП тебе нужно будет ещё реализовать
каждый вид поиска в ХП, и всё.

Код ХП:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
CREATE OR REPLACE FUNCTION nsi.prod_get_products(i_code varchar, i_name varchar, i_type varchar, i_limit integer)
  RETURNS TABLE(id integer, type varchar, code varchar, name varchar) AS
$BODY$
DECLARE
  l_where varchar; 
BEGIN
  l_where = ' WHERE  1=1 ';

  IF i_code IS NOT NULL THEN 
    l_where := l_where || 'AND code LIKE ' || quote_literal(i_code);
  END IF;

  IF i_name IS NOT NULL THEN 
    l_where := l_where || 'AND name LIKE ' || quote_literal(i_name);
  END IF;

  IF i_type IS NOT NULL THEN 
    l_where := l_where || 'AND  type =  ' || quote_literal(i_type);
  END IF;
  
  IF i_limit IS NOT NULL THEN 
    l_where := l_where || ' LIMIT ' || i_limit;
  END IF;
  
  RETURN QUERY EXECUTE 'SELECT  id, type, code, name FROM products' || l_where; 
END
$BODY$
  LANGUAGE 'plpgsql';
Вызов с клиента:
Код: plaintext
1.
2.
3.
SELECT * FROM get_products(NULL, NULL, NULL,  1000 );
или
SELECT * FROM get_products(NULL, 'ПРОВОЛО%',  'material' ,  1000 );
А еще в параметры нужно передавать поля для сортировки.
+Права доступа можно проверять в ХП, производительность сравнима с 1 вариантом
-Теперь даже для самого простого запроса придется городить не хилую функцию.

Неужели 3 вариант смотрится разумно?


В голове крутится следующая идея с разграничением прав:
Для каждой бизнес-операции создаем роль СУБД(в postgresql групповая роль):
op_view_products
op_create_document
op_delete_request_on_support
op_view_products_ext
и т.д.
Даем этим ролям доступ к необходимым объектам БД.

Создаем табличку
permissionsop_namedescription (Человеко-понятное описание операции)
Пишем простенькую программку для раздачи прав, в которой админ(рук. отдела) напротив пользователей проставляет галочки, и при сохранении эти пользователи включаются в выбранные роли(группы) СУБД (op_view_products_ext, op_create_document...)

Теперь пользователь, который входит в группу op_view_products_ext может выполнить запрос:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
SELECT 
            * 
FROM 
             products, dept, person, orders 
WHERE 
             ....
ORDER BY ....
LIMIT ....
прямо с клиента.

+Максимальная производительность, уполномоченные пользователи могут раздавать права на бизнес-операции.
-Использование ролей СУБД для таких целей?
Насколько бредова эта затея?
...
Рейтинг: 0 / 0
Раздача прав на объекты СУБД специальным пользователем
    #36903918
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лень региться
Пример:
Допустим у нас есть таблица, описывающая норматив расхода материала на деталь:
НормативДеталь_IDМатериал_IDНорматив_IDКол-во

В форме №1 клиентского приложения нам нужно показать следующие поля:
Норматив.*, Материал.Наименование, Деталь.Обозначение

Позже выяснилось, что во 2-й форме тоже нужно показывать нормы, но для других целей и соответственно набор полей немного изменится:
Все поля из первого примера
+Наименование Ед.Измерения (Ссылка находится в таблице материалов)
+Дополнительные атрибуты материала и детали
+еще что-то

Придется писать две хп? А можно ведь просто написать эти два запроса прямо в приложении и все.


P.S. Я не против использования ХП, пугает необходимость создания их в огромном количестве.
Клиент должен автоматически генерировать эти запросы, а не то замахаешься писать.
...
Рейтинг: 0 / 0
Раздача прав на объекты СУБД специальным пользователем
    #36904019
Кифирчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лень региться
Неужели 3 вариант смотрится разумно?

рас в приведенном примере, не надо доступ раздавать построчно, и нет своей ACL где расписанны права, нет всякого партиционирования - наверно смысла в таком не много
просто сделайте представление, и раздайте нужные на него права с помощью ролей

Лень регитьсяВ голове крутится следующая идея с разграничением прав:
Для каждой бизнес-операции создаем роль СУБД(в postgresql групповая роль):
op_view_products
op_create_document
op_delete_request_on_support
op_view_products_ext
и т.д.
Даем этим ролям доступ к необходимым объектам БД.
...
+Максимальная производительность, уполномоченные пользователи могут раздавать права на бизнес-операции.
-Использование ролей СУБД для таких целей?
Насколько бредова эта затея?
если необходимую для вашей задачи "модель" раздачи прав можно уместить в эту табличку, и ограничиться ролями - то почему бы нет.
...
Рейтинг: 0 / 0
Раздача прав на объекты СУБД специальным пользователем
    #36904066
Кифирчик
просто сделайте представление, и раздайте нужные на него права с помощью ролей

Сейчас так и есть, но как в данном случае позволить другим пользователям(например начальникам отделов) самим раздавать права своим сотрудникам?

Можно конечно хранить соответствие объектов БД с бизнес-операциями и при предоставлении прав сотруднику на определенную функцию генерировать запрос:
Код: plaintext
GRANT/REVOKE SELECT/UPDATE/etc. ON ... TO 'vasya'

Кифирчик
если необходимую для вашей задачи "модель" раздачи прав можно уместить в эту табличку
Ну почему же? Это только разграничение на доступ к объектам БД.
Для тех случаев, когда требуется более подробное разграничение прав(например Row-Level Access) создам дополнительные таблицы и буду использовать ХП.
...
Рейтинг: 0 / 0
Раздача прав на объекты СУБД специальным пользователем
    #36904147
Кифирчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лень региться
Сейчас так и есть, но как в данном случае позволить другим пользователям(например начальникам отделов) самим раздавать права своим сотрудникам?
сделать для этого процедуру с правами рута, а на её запуск давать разрешение ток роли начальника отделов

Лень регитьсяНу почему же? Это только разграничение на доступ к объектам БД.
Для тех случаев, когда требуется более подробное разграничение прав(например Row-Level Access) создам дополнительные таблицы и буду использовать ХП.
по мне, чем больше унификации, тем более простой и наглядный код, проще с ним в будущем работать, пусть даже если его будет чуть больше. в клиенте везде ток одинаковый вызов ХП, никаких select... можно все вынести в отдельный модуль и не мешать с кодом формы... ХП скрывают структуру базы, и если потом надо будет что-то менять в базе, то в клиенте изменения будут минимальные или вообще без них.
права если через роли - то все через роли, если своя система - то вся раздача прав через неё.. ИМХО
...
Рейтинг: 0 / 0
Раздача прав на объекты СУБД специальным пользователем
    #36909186
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лень региться
то придется создавать роль на каждое действие, которое требует разграничение доступа
скажи начальству, что мелкие роли есть в старших СУБД
(метки безопасности (Label Security) у Virtual Private Database)
Так что либо меняют СУБД на повышенный аппетит, либо делают роли покрупнее - сразу на группу действий.
...
Рейтинг: 0 / 0
Раздача прав на объекты СУБД специальным пользователем
    #36910668
Petro123Лень регитьсято придется создавать роль на каждое действие, которое требует разграничение доступаскажи начальству, что мелкие роли есть в старших СУБД(метки безопасности (Label Security) у Virtual Private Database)Так что либо меняют СУБД на повышенный аппетит, либо делают роли покрупнее - сразу на группу действий.
Неее... Нам постгрес нравится, что-нибудь придумаем.
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / Раздача прав на объекты СУБД специальным пользователем
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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