|
|
|
Разграничение прав в postgresql
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Изучаю PostgreSQL 9.3. Как настраивать доступ пользователей на добавление, изменение, удаление данных из таблиц, из записей, из столбцов конкретно? Например есть база, а в ней 120 таблиц и есть пользователи примерно 300. 1 вопрос (ограничение по записям): в одной таблице данные компании в целом. Надо, чтобы конкретный сотрудник "видел" только то, что ему можно, например, данные только своего филиала и только то, на какой он должности работает 2 вопрос: как делать ограничение по столбцам? 3 вопрос: как разграничивать целую таблицу? Как правильно это всё делать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2014, 12:37:42 |
|
||
|
Разграничение прав в postgresql
|
|||
|---|---|---|---|
|
#18+
Iceberg1985Здравствуйте! Изучаю PostgreSQL 9.3. Как настраивать доступ пользователей на добавление, изменение, удаление данных из таблиц, из записей, из столбцов конкретно? Например есть база, а в ней 120 таблиц и есть пользователи примерно 300. 1 вопрос (ограничение по записям): в одной таблице данные компании в целом. Надо, чтобы конкретный сотрудник "видел" только то, что ему можно, например, данные только своего филиала и только то, на какой он должности работает 2 вопрос: как делать ограничение по столбцам? 3 вопрос: как разграничивать целую таблицу? Как правильно это всё делать? эти вещи на уровне grants не решаются... делайте свой уровень управления доступом... и весь доступ к данным переделывайте на хранимки с учетом ваших требования к доступу... а прямого доступ к таблице не давайте вообще никому... так как ни 1 ни 2 ни 3 сделать через штатную систему управления правами не возможно... (хотя 3. может и можно смотря что вы имеете в виду там). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2014, 12:50:26 |
|
||
|
Разграничение прав в postgresql
|
|||
|---|---|---|---|
|
#18+
Maxim Bogukэти вещи на уровне grants не решаются... делайте свой уровень управления доступом... и весь доступ к данным переделывайте на хранимки с учетом ваших требования к доступу... а прямого доступ к таблице не давайте вообще никому... так как ни 1 ни 2 ни 3 сделать через штатную систему управления правами не возможно... (хотя 3. может и можно смотря что вы имеете в виду там). Спасибо, Максим! А как делать свой уровень управления доступом? Весь доступ переделывать на хранимки - это имеется в виду на хранимых процедурах? В данное время в голову ничего не приходит. Приходит только одна идея добавлять по два столбца в каждую таблицу: одна для определённой учётной записи, одна для группы, то есть для роли. И таким образом фильтровать при входе в базу для каждого пользователя при входе. Но кажется это совсем не правильно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2014, 13:05:46 |
|
||
|
Разграничение прав в postgresql
|
|||
|---|---|---|---|
|
#18+
Максим правильно говорит. Не дело ДБА отвечать за тонко настраиваемый доступ к данным. Должен быть назначен администратор приложения, который и будет раздавать уровни доступа. Для этого лучше дать ему простенькое приложение. На физическом уровне права на чтение можно организовать с view, но модификации все же лучше делать с хранимками. Добавьте в основную таблицу колонку security_group. Заведите таблицу user_security_group с колонками userid, security_group. Администратор приложения назначит каждому пользователю одну или несколько групп доступа. Группы часто организуют иерархически, т.е. группы 12, 23, 31 принадлежат группе B, а группы B, C, D принадлежат группе 'Главбух'. Ну вот примерно такая идея, тонкости сами под свой бизнес добавите. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2014, 22:23:26 |
|
||
|
Разграничение прав в postgresql
|
|||
|---|---|---|---|
|
#18+
http://www.postgresql.org/message-id/4AE02DF0.40101@enterprisedb.com]http://www.postgresql.org/message-id/4AE02DF0.40101@enterprisedb.com - всегда, когда ввязываетесь в эти гонки, будте готовы проиграть) а вообще щас очень эта тема в комунити развивается. скоро как-то можно будет права внутри раздавать. там еще есть проблемы и дыры, но их патчат. можете по архиву рассылок пробежаться за последние пол года ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2014, 00:17:33 |
|
||
|
Разграничение прав в postgresql
|
|||
|---|---|---|---|
|
#18+
оффтоп. так же, например, популярен теоритический способ обходить всякие тривиальные рулы и админ триггеры - не коммитить транзакцию. хаккеры не дремлют! админ баз должен точно postgres'а отобрать у всех (и проследить за дырой дблинка, хихи)) а остальное - там всё на приложениях в основном ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2014, 00:25:29 |
|
||
|
Разграничение прав в postgresql
|
|||
|---|---|---|---|
|
#18+
Misha Tyurin http://www.postgresql.org/message-id/4AE02DF0.40101@enterprisedb.com]http://www.postgresql.org/message-id/4AE02DF0.40101@enterprisedb.com - всегда, когда ввязываетесь в эти гонки, будте готовы проиграть) Для этого есть security_barrier ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2014, 09:02:15 |
|
||
|
Разграничение прав в postgresql
|
|||
|---|---|---|---|
|
#18+
Значит, как я понял, всё-таки самым оптимальным вариантом остаётся ограничение на уровне приложения, а не самой БД? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2014, 12:17:05 |
|
||
|
Разграничение прав в postgresql
|
|||
|---|---|---|---|
|
#18+
Капитан очевидность: Реализуете ТОЛЬКО на уровне приложения и оставите полные права на уровне БД - готовьтесь огрести по-полной за утечку бизнес-информации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2014, 13:17:41 |
|
||
|
Разграничение прав в postgresql
|
|||
|---|---|---|---|
|
#18+
Есть такая ОС Astra Linux, в этой ОС есть допиленный postgreSQL, как раз для решения нужных вам задач, т.е. разграничение доступа по записям и колонкам штатными средствами, вот только по полям не уверен насчет наличия этой возможности. То что вы хотите называется мандатным механизмом разграничения доступа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2014, 14:23:22 |
|
||
|
Разграничение прав в postgresql
|
|||
|---|---|---|---|
|
#18+
big-trotЕсть такая ОС Astra Linux, в этой ОС есть допиленный postgreSQL, как раз для решения нужных вам задач, т.е. разграничение доступа по записям и колонкам штатными средствами, вот только по полям не уверен насчет наличия этой возможности. То что вы хотите называется мандатным механизмом разграничения доступа. Извините, но в ссылке: http://werwolf-lg.livejournal.com/230582.html не рекомендуют его использовать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2014, 07:03:08 |
|
||
|
Разграничение прав в postgresql
|
|||
|---|---|---|---|
|
#18+
HawkmoonКапитан очевидность: Реализуете ТОЛЬКО на уровне приложения и оставите полные права на уровне БД - готовьтесь огрести по-полной за утечку бизнес-информации. Я не имею в виду открыть полный доступ на уровне БД. Я имею в виду, что буду ограничивать на уровне БД доступ к таблицам в целом, а на уровне приложения буду ограничивать по записям. В таком случае не грозит ли утечка информации? Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2014, 07:04:59 |
|
||
|
Разграничение прав в postgresql
|
|||
|---|---|---|---|
|
#18+
Iceberg1985HawkmoonКапитан очевидность: Реализуете ТОЛЬКО на уровне приложения и оставите полные права на уровне БД - готовьтесь огрести по-полной за утечку бизнес-информации. Я не имею в виду открыть полный доступ на уровне БД. Я имею в виду, что буду ограничивать на уровне БД доступ к таблицам в целом, а на уровне приложения буду ограничивать по записям. В таком случае не грозит ли утечка информации? Спасибо! Ну вот это вроде как лучше. Хотя я бы все равно отобрал бы права на таблицы, создал бы хранимые функции, и только на эти функции давал бы права на доступ. Функции Security definer Тогда: 1. пользователь лезет не туда - прав нету, опа. 2. пользователь не может напрямую обратиться к табличкам. 3. пользователь лезет туда - получает выборку через хранимку (которая, ага, выполняется уже из-под прав того, кто имеет доступ к таблицам - но уже на уровне движка СУБД) 4. таким образом, написав хранимку, не подверженную SQL-инъекциям , получим более-менее защиту по правам. Здесь жирный текст критичен, но он не так сложен к исполнению. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2014, 14:03:42 |
|
||
|
Разграничение прав в postgresql
|
|||
|---|---|---|---|
|
#18+
Если оставите же полный доступ к таблицам на уровне пользователя, и выборку в приложении, то система юзабельная, но нехакероустойчивая: хакер ловит коннекшн-стринг, подключается с ним, и получает полный доступ к таблицам. В случае вышерассматриваемого сценария хакеру нужен будет логин/пароль не роли для приложения, а роли owner'а/суперпользователя. Что рубится корректной настройкой PostgreSQL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2014, 14:08:30 |
|
||
|
Разграничение прав в postgresql
|
|||
|---|---|---|---|
|
#18+
HawkmoonЕсли оставите же полный доступ к таблицам на уровне пользователя, и выборку в приложении, то система юзабельная, но нехакероустойчивая: хакер ловит коннекшн-стринг, подключается с ним, и получает полный доступ к таблицам. В случае вышерассматриваемого сценария хакеру нужен будет логин/пароль не роли для приложения, а роли owner'а/суперпользователя. Что рубится корректной настройкой PostgreSQL. Спасибо вам, Hawkmoon! Только вот выходят несколько вопросов: 1. корректная настройка - это: а) удаление или ограничение прав пользователя postgres, соответственно присвоение этому пользователю очень трудного пароля б) настройка postgresql в соответствии с характеристикой сервера в) давать доступ извне только конкретным IP-адресам, настройка файрвола г) использование для БД отдельного жесткого диска, для логов - другого жесткого диска ... будьте добры, скажите, какие ещё основные моменты я пропустил? 3. поискав в интернете, нашёл, что можно писать хранимые функции и на языке Python. Как это отразится на хакероустойчивость? Это лучше или хуже? 2. пример: допустим есть таблица create table a(k int primary key not null, n varchar(30), o varchar(100)); и допустим она заполнена некоторыми данными. Например у нас есть хранимая функция, которая выбирает из этой таблицы данные, соответствующие условию: выбирать из поля k значения, меньше 50: k<50. CREATE OR REPLACE FUNCTION primer(t как писать_тип_таблица?) AS $$ DECLARE BEGIN select * from a where k<50 END $$ где_описывать_возвращение_функцией_таблицу_результата? LANGUAGE plpgsql; Как с помощью хранимых функций дать доступ например web-странице? Спасибо вам огромное! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2014, 18:56:30 |
|
||
|
Разграничение прав в postgresql
|
|||
|---|---|---|---|
|
#18+
Iceberg19851. корректная настройка - это: а) удаление или ограничение прав пользователя postgres, соответственно присвоение этому пользователю очень трудного пароля суперпользователь должен быть. Соответственно, защищаем вЗлоМ0у$$т0i4ивbIм паролем, больше не ограничиваем. Снести суперпользователя - огрести проблем. Это аксиома. в) давать доступ извне только конкретным IP-адресам, настройка файрвола Да. б) настройка postgresql в соответствии с характеристикой сервера г) использование для БД отдельного жесткого диска, для логов - другого жесткого диска Имеет отношение к производительности, не имеет - к безопасности. 3. поискав в интернете, нашёл, что можно писать хранимые функции и на языке Python. Как это отразится на хакероустойчивость? Это лучше или хуже? все равно. (см. SQL injection) 2. пример: допустим есть таблица create table a(k int primary key not null, n varchar(30), o varchar(100)); и допустим она заполнена некоторыми данными. Например у нас есть хранимая функция, которая выбирает из этой таблицы данные, соответствующие условию: выбирать из поля k значения, меньше 50: k<50. CREATE OR REPLACE FUNCTION primer(t как писать_тип_таблица?) AS $$ DECLARE BEGIN select * from a where k<50 END $$ где_описывать_возвращение_функцией_таблицу_результата? LANGUAGE plpgsql; function ... returns setof a где a = ваша таблица. Для данного случая достаточно LANGUAGE sql; главное - не устраивать динамическую конкатенацию запросов внутри (см. SQL injection) Как с помощью хранимых функций дать доступ например web-странице? также как и к таблице. Разница будет в том, что вместо select * from a пишите select * from primer() Главное: завести пользователя web_user, у которого отобрать права на a. из под того, у кого есть права на a (например postgres), создать пример, при этом обозвав функцию security definer. дать web_user права на primer() подключиться из бек-энда под пользователем web_user. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2014, 21:01:43 |
|
||
|
Разграничение прав в postgresql
|
|||
|---|---|---|---|
|
#18+
Iceberg19853. поискав в интернете, нашёл, что можно писать хранимые функции и на языке Python. Как это отразится на хакероустойчивость? Это лучше или хуже? Хуже, т.к. plpython untrusted язык в postgres, т.е. аттака через sql инъекцию может зайти очень далеко. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2014, 10:35:17 |
|
||
|
Разграничение прав в postgresql
|
|||
|---|---|---|---|
|
#18+
Hawkmoon, Sasha Alias Спасибо Всем за драгоценные ответы. Мне они очень помогли. Ещё раз спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2014, 09:56:09 |
|
||
|
Разграничение прав в postgresql
|
|||
|---|---|---|---|
|
#18+
Привет всем. Мне интересна данная тема, так вот сделал так как вы и говорили. 1. создал таблицу с овнером super_user 2. дал все права super_user 3. создал хранимую процедуру, которая вставляет запись в эту таблицу, овнер хранимки super_user а также дал права на запуск хранимки web_user-у Код: sql 1. 4. Запустил хранимку под пользователем web_user Код: sql 1. и получил ошибку Код: sql 1. ---- ОС FreeBSD 9.1 Версия БД: postgresql93-server-9.3.2 Подскажите, пожалуйста, где я что-то не так сделал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2014, 11:14:24 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=38549619&tid=1998604]: |
0ms |
get settings: |
12ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
461ms |
get topic data: |
15ms |
get forum data: |
4ms |
get page messages: |
79ms |
get tp. blocked users: |
2ms |
| others: | 248ms |
| total: | 850ms |

| 0 / 0 |
