powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как запретить юзеру видеть список чужих баз ?
12 сообщений из 12, страница 1 из 1
Как запретить юзеру видеть список чужих баз ?
    #36213494
ruslan A.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сервер Postgresql 8.3.4

У каждого юзера есть своя owned база данных и свой tablespace.
В pg_hba.conf разрешено только обращение от user'a к базе sameuser (такого же имени как и пользователь).

Но если законнектится например от user1, и сделать такой sql запрос :

select * from pg_catalog.pg_database;

в ответ выдас список всех баз данных которые есть на сервере.

Тоже самое с tablespaces :

select * from pg_catalog.pg_tablespace;

в ответ выдаст список всех tablespace которые есть на сервере.

Как сделать так, чтобы юзер не мог видеть название чужих баз и tablespace ?
...
Рейтинг: 0 / 0
Как запретить юзеру видеть список чужих баз ?
    #36213631
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ruslan A., у меня, например, я запретил пользователям обращаться к чему-либо, кроме ХП.
Для этого у роли public отнимаются права на всё, а остальным даются конкретные права.
Этим вопрос исчерпывается полностью.
...
Рейтинг: 0 / 0
Как запретить юзеру видеть список чужих баз ?
    #36218232
ruslan A.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ОКТОГЕНruslan A., у меня, например, я запретил пользователям обращаться к чему-либо, кроме ХП.
Для этого у роли public отнимаются права на всё, а остальным даются конкретные права.
Этим вопрос исчерпывается полностью.

Делаю так :

REVOKE ALL PRIVILEGES ON SCHEMA pg_catalog FROM public;
REVOKE ALL PRIVILEGES ON SCHEMA pg_catalog FROM user1;

или так :

REVOKE SELECT ON pg_catalog.pg_database, information_schema.routines FROM public;
REVOKE SELECT ON pg_catalog.pg_database, information_schema.routines FROM user1;

после этого user1 всё равное делает select * from pg_catalog.pg_database;

подскажите, что я делаю не так ?
...
Рейтинг: 0 / 0
Как запретить юзеру видеть список чужих баз ?
    #36218241
pg_kop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
REVOKE ALL ON pg_database FROM public;
REVOKE ALL ON pg_tablespace FROM public;
...
Рейтинг: 0 / 0
Как запретить юзеру видеть список чужих баз ?
    #36218468
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня явно отобрано у всех объектов все права, которые только можно отобрать.
Потом выделил то, без чего приложение работать не может(список типов, и т.п., 2-3 права всего+ ХП естественно).
Все хранимки, принимающие текст с динамическим SQL проверяются на кавычки и т.п.
...
Рейтинг: 0 / 0
Как запретить юзеру видеть список чужих баз ?
    #36218489
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
-- примерно, так
BEGIN;
REVOKE ALL  ON DATABASE template1 FROM PUBLIC;
REVOKE ALL  ON SCHEMA public FROM PUBLIC;
REVOKE ALL  ON SCHEMA pg_catalog FROM PUBLIC;
REVOKE ALL  ON SCHEMA information_schema FROM PUBLIC;
REVOKE ALL ON information_schema.sql_features FROM PUBLIC;
REVOKE ALL  ON information_schema.sql_implementation_info FROM PUBLIC;
REVOKE ALL  ON information_schema.sql_languages FROM PUBLIC;
REVOKE ALL  ON information_schema.sql_packages FROM PUBLIC;
REVOKE ALL  ON information_schema.sql_sizing FROM PUBLIC;
REVOKE ALL  ON information_schema.sql_sizing_profiles FROM PUBLIC;
REVOKE ALL  ON information_schema.administrable_role_authorizations FROM PUBLIC;
REVOKE ALL  ON information_schema.applicable_roles FROM PUBLIC;
REVOKE ALL  ON information_schema.attributes FROM PUBLIC;
REVOKE ALL  ON information_schema.check_constraint_routine_usage FROM PUBLIC;
REVOKE ALL  ON information_schema.check_constraints FROM PUBLIC;
REVOKE ALL  ON information_schema.column_domain_usage FROM PUBLIC;
REVOKE ALL  ON information_schema.column_privileges FROM PUBLIC;
REVOKE ALL  ON information_schema.column_udt_usage FROM PUBLIC;
REVOKE ALL  ON information_schema.columns FROM PUBLIC;
REVOKE ALL  ON information_schema.constraint_column_usage FROM PUBLIC;
REVOKE ALL  ON information_schema.constraint_table_usage FROM PUBLIC;
REVOKE ALL  ON information_schema.data_type_privileges FROM PUBLIC;
REVOKE ALL  ON information_schema.domain_constraints FROM PUBLIC;
REVOKE ALL  ON information_schema.domain_udt_usage FROM PUBLIC;
REVOKE ALL  ON information_schema.domains FROM PUBLIC;
REVOKE ALL  ON information_schema.element_types FROM PUBLIC;
REVOKE ALL  ON information_schema.enabled_roles FROM PUBLIC;
REVOKE ALL  ON information_schema.foreign_data_wrapper_options FROM PUBLIC;
REVOKE ALL  ON information_schema.foreign_data_wrappers FROM PUBLIC;
REVOKE ALL  ON information_schema.foreign_server_options FROM PUBLIC;
REVOKE ALL  ON information_schema.foreign_servers FROM PUBLIC;
REVOKE ALL  ON information_schema.information_schema_catalog_name FROM PUBLIC;
REVOKE ALL  ON information_schema.key_column_usage FROM PUBLIC;
REVOKE ALL  ON information_schema.parameters FROM PUBLIC;
REVOKE ALL  ON information_schema.referential_constraints FROM PUBLIC;
REVOKE ALL  ON information_schema.role_column_grants FROM PUBLIC;
REVOKE ALL  ON information_schema.role_routine_grants FROM PUBLIC;
REVOKE ALL  ON information_schema.role_table_grants FROM PUBLIC;
REVOKE ALL  ON information_schema.role_usage_grants FROM PUBLIC;
REVOKE ALL  ON information_schema.routine_privileges FROM PUBLIC;
REVOKE ALL  ON information_schema.routines FROM PUBLIC;
REVOKE ALL  ON information_schema.schemata FROM PUBLIC;
REVOKE ALL  ON information_schema.sequences FROM PUBLIC;
REVOKE ALL  ON information_schema.table_constraints FROM PUBLIC;
REVOKE ALL  ON information_schema.table_privileges FROM PUBLIC;
REVOKE ALL  ON information_schema.tables FROM PUBLIC;
REVOKE ALL  ON information_schema.triggered_update_columns FROM PUBLIC;
REVOKE ALL  ON information_schema.triggers FROM PUBLIC;
REVOKE ALL  ON information_schema.usage_privileges FROM PUBLIC;
REVOKE ALL  ON information_schema.user_mapping_options FROM PUBLIC;
REVOKE ALL  ON information_schema.user_mappings FROM PUBLIC;
REVOKE ALL  ON information_schema.view_column_usage FROM PUBLIC;
REVOKE ALL  ON information_schema.view_routine_usage FROM PUBLIC;
REVOKE ALL  ON information_schema.view_table_usage FROM PUBLIC;
REVOKE ALL  ON information_schema.views FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_aggregate FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_am FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_amop FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_amproc FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_attrdef FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_attribute FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_auth_members FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_cast FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_class FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_constraint FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_conversion FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_cursors FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_database FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_depend FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_description FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_enum FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_foreign_data_wrapper FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_foreign_server FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_group FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_index FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_indexes FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_inherits FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_language FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_largeobject FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_listener FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_locks FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_namespace FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_opclass FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_operator FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_opfamily FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_pltemplate FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_prepared_statements FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_prepared_xacts FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_proc FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_rewrite FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_roles FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_rules FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_settings FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_shdepend FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_shdescription FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_stat_activity FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_stat_all_indexes FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_stat_all_tables FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_stat_bgwriter FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_stat_database FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_stat_sys_indexes FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_stat_sys_tables FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_stat_user_functions FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_stat_user_indexes FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_stat_user_tables FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_statio_all_indexes FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_statio_all_sequences FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_statio_all_tables FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_statio_sys_indexes FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_statio_sys_sequences FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_statio_sys_tables FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_statio_user_indexes FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_statio_user_sequences FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_statio_user_tables FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_stats FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_tables FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_tablespace FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_timezone_abbrevs FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_timezone_names FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_trigger FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_ts_config FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_ts_config_map FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_ts_dict FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_ts_parser FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_ts_template FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_type FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_user FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_user_mappings FROM PUBLIC;
REVOKE ALL  ON pg_catalog.pg_views FROM PUBLIC;  
COMMIT;
...
Рейтинг: 0 / 0
Как запретить юзеру видеть список чужих баз ?
    #36434284
Weed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кажется, после обновления до 8.4.2 этот трюк перестал работать
...
Рейтинг: 0 / 0
Как запретить юзеру видеть список чужих баз ?
    #36434322
Weed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вру, во всём виноват юзер public

для чего он вообще? он какой-то особый?
...
Рейтинг: 0 / 0
Как запретить юзеру видеть список чужих баз ?
    #36434465
Фотография Ёш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Weedвру, во всём виноват юзер public

для чего он вообще? он какой-то особый?public — это ключевое слово для обозначения «Все».
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Как запретить юзеру видеть список чужих баз ?
    #39391555
YP977
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Изменилось ли что-то за последние 7(!) лет?

Еще бы два дня и было бы ровно 7 лет с момента последнего сообщения, но ждать не хочу :)

Собственно сам по себе вопрос тот же

Есть сервер версии 9.5, на него цепляется порядка 80 пользователей. Для каждого пользователя есть своя база. Если зацепится через pgadmin или psql видно все остальные базы. Понятно, что pg_hba у каждого пользователя описано куда он может подключится и это работает хорошо.

Очень бы хотелось скрыть сам факт наличия других баз. Как сделать так, чтобы при подключении пользователь видел только свою базу ну и там postgres, template, а базы других пользователей не видел?

Гуглил, листал форум ничего не нашел, вернее то, что нашел не работает :(
...
Рейтинг: 0 / 0
Как запретить юзеру видеть список чужих баз ?
    #39393328
Фотография grufos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YP977,

в 9.5 появилась функциональность
ALTER TABLE ... ENABLE ROW LEVEL SECURITY
https://postgrespro.ru/docs/postgrespro/9.5/ddl-rowsecurity
предполагаю, что можно это использовать для того, чтобы нужные пользователи видели свою строку из pg_database
...
Рейтинг: 0 / 0
Как запретить юзеру видеть список чужих баз ?
    #39393398
YP977
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как-то стремно менять системную таблицу. Как бы не выстрелить себе в ногу...
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как запретить юзеру видеть список чужих баз ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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