Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Включение одной роли в другую / 5 сообщений из 5, страница 1 из 1
18.02.2021, 12:09
    #40046581
mariem
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Включение одной роли в другую
Здравствуйте!
Мною создано две роли: групповая customer и персонализированная client_name_surname
Необходимо включить роль клиента в роль customer
Явно это делается следующим образом
Код: sql
1.
GRANT customer TO client_name_surname



Но задача состоит в том, что мне неизвестно имя роли клиента и я хочу передать в такой запрос последнюю добавленную роль на место client_name_surname

выглядело бы это так:
Код: sql
1.
GRANT customer TO (SELECT rolname FROM pg_roles WHERE oid=(SELECT max(oid) FROM pg_roles)); 



такой вариант к сожалению не работает, посоветуйте пожалуйста способ решения
...
Рейтинг: 0 / 0
18.02.2021, 12:14
    #40046586
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Включение одной роли в другую
mariem,

Чей то мне кажется что вы где то нашли SQL INJECTION и пытаетесь его для управления ролями и правами заабуюзить.
Объясните как у вас получилось что " мне неизвестно имя роли клиента ".

Эм если штатные методы не работают - значит вы делаете что то не то.
И надо о постановке задачи задуматься.


--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
18.02.2021, 12:35
    #40046607
mariem
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Включение одной роли в другую
Maxim Boguk,

есть таблица с клиентами, мне нужно для рандомного клиента создать персонализированную роль.
создала для этого функцию:

Код: sql
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.
CREATE OR REPLACE FUNCTION create_role()
RETURNS TABLE (f TEXT, l TEXT)
AS
$$ 
BEGIN 
DROP TABLE IF EXISTS tmpCustomer;			
CREATE TEMPORARY TABLE IF NOT EXISTS tmpCustomer (c_id int, f_name TEXT, l_name TEXT);
INSERT INTO tmpCustomer
SELECT cid, fname, lname
FROM 
	(SELECT DISTINCT c.customer_id AS cid, c.first_name AS fname, c.last_name AS lname
	FROM customer c 
	INNER JOIN rental r ON c.customer_id=r.customer_id 
	INNER JOIN payment p ON c.customer_id=p.customer_id) AS subq
ORDER BY random()
LIMIT 1;

EXECUTE 'CREATE ROLE client_'||(SELECT f_name FROM tmpCustomer)||'_'||(SELECT l_name FROM tmpCustomer);

RAISE NOTICE 'Role was created for customer % %',(SELECT f_name FROM tmpCustomer), (SELECT l_name FROM tmpCustomer);
RETURN query SELECT f_name, l_name FROM tmpCustomer;
END;
$$ LANGUAGE plpgsql;

SELECT * FROM create_role();



возникла мыль просто запихнуть в функцию включение ролей
Код: sql
1.
EXECUTE 'GRANT customer TO client_'||(SELECT f_name FROM tmpCustomer)||'_'||(SELECT l_name FROM tmpCustomer);
...
Рейтинг: 0 / 0
18.02.2021, 14:44
    #40046699
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Включение одной роли в другую
mariem
есть таблица с клиентами, мне нужно для рандомного клиента создать персонализированную роль.

Нормальные люди так не делают. Рандомному клиенту выдаётся заранее определённая роль "для рандомных клиентов". Или вообще никакая.
...
Рейтинг: 0 / 0
19.02.2021, 13:35
    #40047111
Гулин Федор
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Включение одной роли в другую
Dimitry Sibiryakov
mariem
есть таблица с клиентами, мне нужно для рандомного клиента создать персонализированную роль.

Нормальные люди так не делают. Рандомному клиенту выдаётся заранее определённая роль "для рандомных клиентов". Или вообще никакая.


Мне тоже кажется что
Роли они должны определяться заранее
и смысла роли для каждого клиента я не вижу
(и это даже НЕ приментильно к постгресу а вообще
имхо к любой БД)

хотя возможно не достаточно информации
зачем это делается ???
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Включение одной роли в другую / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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