powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Минимум прав
22 сообщений из 22, страница 1 из 1
Минимум прав
    #34279192
postuser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В PostgreSQL новый созданный пользователь имеет права на просмотр структуры БД (\d итд), на просмотр статистической информации pg_stat... и многое другое через соединение по psql. Как его можно ограничить только конкретными действиями с конкретными таблицами? Схема public, может здесь копать?
...
Рейтинг: 0 / 0
Минимум прав
    #34280389
Master Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Присоединяюсь к вопросу - и как запретить коннект пользователя к определенным базам?

Спасибо.
...
Рейтинг: 0 / 0
Минимум прав
    #34280520
postuser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Master AlexПрисоединяюсь к вопросу - и как запретить коннект пользователя к определенным базам?

Спасибо.
Можно,н-р, разрешить коннект к определенным базам с определенных ip в hba.conf.
...
Рейтинг: 0 / 0
Минимум прав
    #34281744
postuser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для соединения с БД используется парольная аутентификация (passwd), но пароль в выполняемом файле программы (с использованием библиотеки libpq, ф-ия PQconnectdb) просматривается в открытом виде и при взломе машины клиента легко просмотреть пароль. Ввод пароля вручную невозможен, так как программа стоит на сервере и работает без оператора.
Как можно скрыть пароль от просмотра и запретить присоединяться к БД с клиентской машины всеме способами, кроме одной программы с жестко зашитыми в нее запросами? Или может можно запретить присоединяться с помощью psql к консоли вообще (что-то типа файла /etc/passwd и /dev/null в нем)?
...
Рейтинг: 0 / 0
Минимум прав
    #34282740
Jelis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
postuserДля соединения с БД используется парольная аутентификация (passwd), но пароль в выполняемом файле программы (с использованием библиотеки libpq, ф-ия PQconnectdb) просматривается в открытом виде и при взломе машины клиента легко просмотреть пароль. Ввод пароля вручную невозможен, так как программа стоит на сервере и работает без оператора.
Как можно скрыть пароль от просмотра и запретить присоединяться к БД с клиентской машины всеме способами, кроме одной программы с жестко зашитыми в нее запросами? Или может можно запретить присоединяться с помощью psql к консоли вообще (что-то типа файла /etc/passwd и /dev/null в нем)?

Если клиентскую машину сломают и получат админа - то ни что вам не поможет. Вернее ни что не помешает злоумышленникам подконектиться к базе с этой машины. Так что не парьте себе голову об этом, а парьте о том, как лучше защитить клиета.
Хотя открытый пароль тоже не дело... А что у вас на стороне клиента стоит - винда или юних? Если юних, то можно дополнительные меры предпринять : сделать аутентификацию через ident, разграничить нормально пользователей/права, закрыть файрволлом... Но если на ней ктонить рута получит то все это не поможет, само сабой :-) Ну и права в базе правильно раздать. Если это настолько критично, то можно всю работу через функции/представления организовать (правда, насчет функций это еще вопрос - а не станут ли они дополнительной дыркой?)
В самом общем случае, для вашей ситуации, я бы посоветовал
1. Сделать отельного юзера под которым ваша программа будет работать
2. Пароль положить в отдельный файл с правами ТОЛЬКО ЧТЕНИЕ ДЛЯ ЭТОГО ЮЗЕРА
3. Программу запускать через su / sudo от имени этого юзера и в программе считывать пароль с файла
4. Если очень охота, то (помимо настройки самого постгреса через pg_hba.conf) на клиенте файрволом открыть доступуп к базе только этому юзеру
Думаю на винде это все тоже можно реализовать :-)
...
Рейтинг: 0 / 0
Минимум прав
    #34282832
postuser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Клиент на Linux.
Для работы клиентской программы нужны права на UPDATE одной таблицы и на SELECT из некоторых других, но на таблицу, к которой нужен UPDATE повешан триггер, процедуры которого требуют прав на INSERT, UPDATE еще нескольких критичных таблиц. Скорее всего, такого распределения никак не избежать, так как эти триггеры необходимы.
Но все же странно, зачем давать права на просмотр структуры базы всем пользователям (с помощью psql \d table)?
...
Рейтинг: 0 / 0
Минимум прав
    #34283621
Master Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
postuser Master AlexПрисоединяюсь к вопросу - и как запретить коннект пользователя к определенным базам?

Спасибо.
Можно,н-р, разрешить коннект к определенным базам с определенных ip в hba.conf.

Спасибо за идею, но имелось в виду нечто такое:

REVOKE CONNECT ON DATABASE db_test FROM user_test;

это выполняется без ошибок, но пользователь user_test после этого все равно может подключиться к базе db_test. Что-то упустил?
...
Рейтинг: 0 / 0
Минимум прав
    #34286248
Jelis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Master Alex postuser Master AlexПрисоединяюсь к вопросу - и как запретить коннект пользователя к определенным базам?

Спасибо.
Можно,н-р, разрешить коннект к определенным базам с определенных ip в hba.conf.

Спасибо за идею, но имелось в виду нечто такое:

REVOKE CONNECT ON DATABASE db_test FROM user_test;

это выполняется без ошибок, но пользователь user_test после этого все равно может подключиться к базе db_test. Что-то упустил?

Это и нужно прописывать в hba.conf. Каким пользователям, каким образом, к каким базам, с каких адресов можно подключаться (и соответственно, нельзя).
...
Рейтинг: 0 / 0
Минимум прав
    #34295715
Master Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JelisЭто и нужно прописывать в hba.conf. Каким пользователям, каким образом, к каким базам, с каких адресов можно подключаться (и соответственно, нельзя).
Спасибо. Т.е., похоже, установку прав пользователей на коннект к базе средствами SQL так и не сделали. Жалко.
...
Рейтинг: 0 / 0
Минимум прав
    #34295854
st_serg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Master Alex JelisЭто и нужно прописывать в hba.conf. Каким пользователям, каким образом, к каким базам, с каких адресов можно подключаться (и соответственно, нельзя).
Спасибо. Т.е., похоже, установку прав пользователей на коннект к базе средствами SQL так и не сделали. Жалко.
можно сделать alter role u1 connection limit 0, вот только указать конкретную базу нельзя
...
Рейтинг: 0 / 0
Минимум прав
    #34301321
st_serg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
8.2.х вроде все работает
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
postgres=# revoke connect on database postgres from public;
REVOKE
postgres=# revoke connect on database postgres from u1;
REVOKE

U:\>psql -U u1
psql: FATAL:  permission denied for database "postgres"
ПОДРОБНО:  User does not have CONNECT privilege.

postgres=# grant connect on database postgres to u1;
GRANT

U:\>psql
Welcome to psql  8 . 2 . 0 , the PostgreSQL interactive terminal.
postgres=>

...
Рейтинг: 0 / 0
Минимум прав
    #34301328
st_serg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в последних строчках не
U:\>psql
а
U:\>psql -U u1
...
Рейтинг: 0 / 0
Минимум прав
    #34303426
Master Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
st_serg8.2.х вроде все работает
я без этого пробовал:
revoke connect on database postgres from public;

Спасибо!
...
Рейтинг: 0 / 0
Минимум прав
    #34322393
235
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
235
Гость
Продолжение проблемы разделения прав - к большой базе несколько типов интерфейсов, один из них к сайту стороннего разработчика. Нужно дать доступ к части данных (только 2 вьюва, возможно процедура) не показывая структуры всех остальных объектов, ибо вся логика именно в базе, а проект заставляет страдать параноей по полной
...
Рейтинг: 0 / 0
Минимум прав
    #34652813
Kickinhard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
235Продолжение проблемы разделения прав - к большой базе несколько типов интерфейсов, один из них к сайту стороннего разработчика. Нужно дать доступ к части данных (только 2 вьюва, возможно процедура) не показывая структуры всех остальных объектов, ибо вся логика именно в базе, а проект заставляет страдать параноей по полной
Присоединяюсь к вопросу.
Существует некоторое количество объектов. Хотелось бы чтобы определенный пользователь мог использовать пару вьювов и процедур, но не мог видет и использовать остальные объекты, а уж тем более просматривать структуру таблиц.
Я запретил просмотр содержимого таблиц, использование функций. Но как сделать так чтобы пользователь вообще не видел существуют они или нет?
...
Рейтинг: 0 / 0
Минимум прав
    #34653339
ездун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я думаю, можно поробовать это RTFMREVOKE [ GRANT OPTION FOR ]
{ { CREATE | USAGE } [,...] | ALL [ PRIVILEGES ] }
ON SCHEMA schemaname [, ...]
FROM { username | GROUP groupname | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]


для схем information_schema и pg_catalog. не проверял
...
Рейтинг: 0 / 0
Минимум прав
    #34653638
Kickinhard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ездуня думаю, можно поробовать это RTFMREVOKE [ GRANT OPTION FOR ]
{ { CREATE | USAGE } [,...] | ALL [ PRIVILEGES ] }
ON SCHEMA schemaname [, ...]
FROM { username | GROUP groupname | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]


для схем information_schema и pg_catalog. не проверял
Проверял. Не сработало.
Только после revoke на pg_proc не показывает, но интуиция подсказывает, что будут тогда еще грабли=)
Выслушаю другие предложения.
Выкрутил в настройках Debug5 чтобы ловить все запросы в логах, но пока не помогло(правда мало вникал).
...
Рейтинг: 0 / 0
Минимум прав
    #34655290
kickinhard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пардон, все таки вчера пере revoke`ил pg_catalog+pg_proc. pgadmin ругается, работает, но структуру не показывает.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Минимум прав
    #35705317
assa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нашел забавное.
для служебного юзера дал грант на DELETE,
пытаюсь
DELETE ... WHERE id_main=...
пишет - нет прав, на...
дал права на SELECT - заработало.
неувязочка? нет (типа без селекта не может определить, что делетить?)?



пришлось USER DEFINER ф-ю сделать на этот DELETE . Работает без всяких прав на таблицу.


ps так какой сухой остаток?
?
Код: plaintext
1.
REVOKE SELECT ON pg_catalog.pg_proc, information_schema.routines FROM public;
REVOKE USAGE ON pg_catalog FROM PUBLIC[+user] [+ all_user's_roles]
?
а REVOKE USAGE ON information_schema FROM public; не надо ?
(или т.к. там все берется из pg_catalog - умрет само?)
...
Рейтинг: 0 / 0
Минимум прав
    #35705838
Фотография Ёш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
assaнашел забавное.
для служебного юзера дал грант на DELETE,
пытаюсь
DELETE ... WHERE id_main=...
пишет - нет прав, на...
дал права на SELECT - заработало.
неувязочка? нет (типа без селекта не может определить, что делетить?)?
зато без where delete работает. кстати, имея права на
DELETE ... WHERE id_main=... можно определить какие значения хранятся в таблице в этом поле, путём перебора и отката транзакции.
...
Рейтинг: 0 / 0
Минимум прав
    #35706120
assa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ёшзато без where delete работает.
кстати, имея права на
DELETE ... WHERE id_main=... можно определить какие значения хранятся в таблице в этом поле, путём перебора и отката транзакции.спасибо. правдоподобно.

перебор - это понятно, но это должно быть головняком того, кто рассказал всем (малоправным), что есть такое поле "id_main" по которому они могут на досуге сканировать перебором DELETE-а (и то - только в том случае , если им не погасят сообщение о числе обработанных записей)


кстати, имея права на
можно определить только общее количество и распределение значений в этом одном поле (чье истинное имя выдано тем же, кто раздал права и на делет).
но нельзя, если не дано иное, определить тип * (набор прочих полей), а тем паче их состав..., т.е. нельзя получить все то, что сразу и в полной данности даст любой SELECT *


ЗЫ могабыть имеет смысл давать 2 типа грантов, на?
DELETE [all] /vs/ DELETE with WHERE

или же отличать грант на SELECT от гранта на WHERE
...
Рейтинг: 0 / 0
Минимум прав
    #35707385
st_serg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
assaнашел забавное.
для служебного юзера дал грант на DELETE,
пытаюсь
DELETE ... WHERE id_main=...
пишет - нет прав, на...
дал права на SELECT - заработало.
неувязочка? нет (типа без селекта не может определить, что делетить?)?

давеча тож столкнулся, как оказалось все такое поведение описано...
http://www.postgresql.org/docs/8.3/interactive/sql-grant.html
SELECT

Allows SELECT from any column of the specified table, view, or sequence. Also allows the use of COPY TO. This privilege is also needed to reference existing column values in UPDATE or DELETE . For sequences, this privilege also allows the use of the currval function.
DELETE

Allows DELETE of a row from the specified table. ( In practice, any nontrivial DELETE command will require SELECT privilege as well, since it must reference table columns to determine which rows to delete. )
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Минимум прав
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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