powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Не работает подключение к БД через определение ролей
6 сообщений из 6, страница 1 из 1
Не работает подключение к БД через определение ролей
    #35201241
SeniorAndre
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может я дурак, но ни чё не пойму....
Имею БД, отдаю доступ к БД на Роль, для Роли даю доступа, включаю пользователя в Роль, и пока пользователю не дам права суперпоьзователя не могу подключиться к БД, а если включу доступ к БД на коннект для public, то не имею доступа к SCHEMA .. и т.д., я уже не говорю про таблицы..

Если сделать пользователя SuperUser, то тоже Ок.

Или это токо виндозный глюк?

Postgres 8.2. под виндой....

Код: 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.
/*  
CREATE DATABASE "TEST"
  WITH OWNER = postgres
       ENCODING = 'WIN1251'
       TABLESPACE = pg_default;
GRANT ALL ON DATABASE "TEST" TO postgres;
GRANT CONNECT ON DATABASE "TEST" TO "TestUserRole";
*/

CREATE ROLE "TestUserRole"
  NOSUPERUSER NOINHERIT NOCREATEDB NOCREATEROLE;

--CREATE TRUSTED PROCEDURAL LANGUAGE 'plpgsql';
GRANT ALL ON LANGUAGE plpgsql TO GROUP "TestUserRole";

GRANT CONNECT ON DATABASE "TEST" TO "TestUserRole";

-- Role: "TestUser" пароль is 'test'

CREATE ROLE "TestUser" LOGIN
  ENCRYPTED PASSWORD 'md5f2f57625ae5ca18836ad5994f8d9f3e7'
  NOSUPERUSER NOINHERIT NOCREATEDB NOCREATEROLE;
GRANT "TestUserRole" TO "TestUser";


CREATE SCHEMA "test_schema"
  AUTHORIZATION postgres;
GRANT USAGE ON SCHEMA "test_schema" TO "TestUserRole";
...
Рейтинг: 0 / 0
Не работает подключение к БД через определение ролей
    #35201566
st_serg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да вроде работает...
Код: 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.
postgres=# create database test;
CREATE DATABASE
postgres=# \c test
You are now connected to database "test".
test=# revoke connect on database test from public;
REVOKE
test=# create role "MyRole1";
CREATE ROLE
test=# create role "Usr1" login in role "MyRole1";
CREATE ROLE
test=# grant connect on database test to "MyRole1";
GRANT
test=# \du+
                                        List of roles
  Role name   | Superuser | Create role | Create DB | Connections |   Member of    | Описание
--------------+-----------+-------------+-----------+-------------+----------------+----------
 MyRole1      | нет       | нет         | нет       | no limit    |                |
 Usr1         | нет       | нет         | нет       | no limit    | {MyRole1}      |
test=# \q

c:\home>psql test Usr1
Welcome to psql  8 . 2 . 5 , the PostgreSQL interactive terminal.

Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help with psql commands
       \g or terminate with semicolon to execute query
       \q to quit

test=> \q

c:\home>psql test usr1
psql: FATAL:  role "usr1" does not exist

c:\home>psql test MyRole1
psql: FATAL:  role "MyRole1" is not permitted to log in

c:\home>psql test
test=# revoke connect on database test from "MyRole1";
REVOKE
test=# \q

c:\home>psql test Usr1
psql: FATAL:  permission denied for database "test"
ПОДРОБНО:  User does not have CONNECT privilege.

c:\home>psql test usr1
psql: FATAL:  role "usr1" does not exist

c:\home>ver

Microsoft Windows XP [Version  5 . 1 . 2600 ]
...
Рейтинг: 0 / 0
Не работает подключение к БД через определение ролей
    #35201896
tadmin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
никогда не понимал, зачем нужно право на CONNECT ?
Если у роли нет прав на соединение, то остальными правами довольно трудно воспользоваться.
В самом деле, зачем?

В то же время существует досадные неудобства (IMHO):
- роль, не имеющая права USAGE на схему, может видеть структура таблиц в этой схеме
- та же роль, не имея право на EXECUTE процедур в схеме, может видеть сигнатуры и тело этих процедур.
...
Рейтинг: 0 / 0
Не работает подключение к БД через определение ролей
    #35202478
st_serg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как вариант юзать "security definer" процедуры, т.е. роль есть, в своей схеме может чтото делать, а конектица не может. как временный запрет пользователям на конект к базе.
хз, вобщем ) пусть будет )
...
Рейтинг: 0 / 0
Не работает подключение к БД через определение ролей
    #35204093
SeniorAndre
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Огромное спасибо st_serg, благодаря ему нашёл....
Я все скрипты делал через pgAdmin, и когда создаешь юсера он не ставит для него по умолчанию опцию INHERIT, а когда через psql то ставит. Мой код был:
Код: plaintext
1.
2.
3.
CREATE ROLE "TestUser" LOGIN
  ENCRYPTED PASSWORD 'md5f2f57625ae5ca18836ad5994f8d9f3e7'
  NOSUPERUSER NOINHERIT NOCREATEDB NOCREATEROLE;

а надо
Код: plaintext
1.
2.
3.
CREATE ROLE "TestUser" LOGIN
  ENCRYPTED PASSWORD 'md5f2f57625ae5ca18836ad5994f8d9f3e7'
  NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE;

Иначе вся структура безопасности начинает работать через одно место...., без этой галки пользователь не брал права от роли Через psql убедился что всё работает, а дальше было дело техники....

Еще раз спасибо...
...
Рейтинг: 0 / 0
Не работает подключение к БД через определение ролей
    #35204097
SeniorAndre
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Огромное спасибо st_serg, благодаря ему нашёл....
Я все скрипты делал через pgAdmin, и когда создаешь юсера он не ставит для него по умолчанию опцию INHERIT, а когда через psql то ставит. Мой код был:
Код: plaintext
1.
2.
3.
CREATE ROLE "TestUser" LOGIN
  ENCRYPTED PASSWORD 'md5f2f57625ae5ca18836ad5994f8d9f3e7'
  NOSUPERUSER NOINHERIT NOCREATEDB NOCREATEROLE;

а надо
Код: plaintext
1.
2.
3.
CREATE ROLE "TestUser" LOGIN
  ENCRYPTED PASSWORD 'md5f2f57625ae5ca18836ad5994f8d9f3e7'
  NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE;

Иначе вся структура безопасности начинает работать через одно место...., без этой галки пользователь не брал права от роли Через psql убедился что всё работает, а дальше было дело техники....

Еще раз спасибо...
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Не работает подключение к БД через определение ролей
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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