Приглашаем на вебинар "Инструменты миграции: подходы к переносу данных" (четверг 10 октября 2024 г. в 12:00)
Вебинар проведут Роман Лавринчук и Александр Любушкин. Программа и регистрация: https://forsd.ru/migration_webcast_october
Приглашаем на вебинар "Обзор продуктов компании Axiom " (четверг 24 октября 2024 г. в 12:00).
Тема: импортозамещение в области корпоративной Java-разработки: JDK, сервер приложений, контейнеры Docker
Докладчик: Иван Диканев. Программа вебинара и регистрация: https://forsd.ru/axiom_24web

information schema и applicable_roles

Всё по теме СУБД Oracle: установка, настройка, использование, решение проблем и т.д. и т.п. и др. и пр.
pluzanov
Сообщения: 44
Зарегистрирован: Пт июл 08, 2022 4:43 pm

Re: information schema и applicable_roles

Сообщение pluzanov »

Спасибо еще раз. mysql работает так же.

А вот в последней версии PostgreSQL стало не так. Фиксируется кто именно включил одну роль в другую. И только тот кто включил может исключить. В том числе и поэтому (есть и другие особенности) в словаре будет хранится две строки для этого примера и оба пользователя admin1 и admin2 должны выполнить REVOKE чтобы окончательно исключить bob из alice.

Это не хорошо и не плохо. Просто такая особенность. Хотелось посмотреть как в других СУБД реализовано.
Аватара пользователя
SQL*Plus
Сообщения: 250
Зарегистрирован: Ср апр 20, 2022 1:09 pm

Re: information schema и applicable_roles

Сообщение SQL*Plus »

pluzanov писал(а): Пт сен 01, 2023 5:10 pm А вот в последней версии PostgreSQL стало не так.
Фиксируется кто именно включил одну роль в другую.
И только тот кто включил может исключить.
. . .
Это не хорошо и не плохо. Просто такая особенность. Хотелось посмотреть как в других СУБД реализовано.
Вполне может быть, что такое поведение правильно и логично?!

Поразмышляем...

Пользователи admin1 и admin2 предоставили роль BOB роли ALICE.
Они выполнили сооттветствующие команды

Код: Выделить всё

-- as admin1
GRANT bob TO alice;
-- as admin2
GRANT bob TO alice WITH ADMIN OPTION; 
Обе команды сработали.
У роли ALICE теперь есть роль BOB.

И тут пришел совсем другой администратор SYSTEM и выполнил команду:

Код: Выделить всё

-- as SYSTEM
REVOKE bob FROM alice;
Если в базе будет две записи, появившиеся в результате действий ADMIN1 и ADMIN2, что тогда делать?
1) удалить обе записи? (Отобрать роль BOB у роли ALICE )
2) Удалить одну запись? (первую попавшуюся, например, появившуюся от команды ADMIN1)
3) Выдать ошибку вида: "SYSTEM, ты роль BOB роли ALICE не давал, не тебе её и отзывать"?
4) Сделать что-то другое?
pluzanov
Сообщения: 44
Зарегистрирован: Пт июл 08, 2022 4:43 pm

Re: information schema и applicable_roles

Сообщение pluzanov »

SQL*Plus писал(а): Пн сен 04, 2023 7:01 pm 3) Выдать ошибку вида: "SYSTEM, ты роль BOB роли ALICE не давал, не тебе её и отзывать"?
Выдать предупреждение. Так делает PostgreSQL.
Аватара пользователя
SQL*Plus
Сообщения: 250
Зарегистрирован: Ср апр 20, 2022 1:09 pm

Re: information schema и applicable_roles

Сообщение SQL*Plus »

То есть роль отозвана не будет и будет выдано об этом предупреждение?!

Приведите, пожалуйста, его текст.
Очень интересно посмотреть, как предупреждают.
pluzanov
Сообщения: 44
Зарегистрирован: Пт июл 08, 2022 4:43 pm

Re: information schema и applicable_roles

Сообщение pluzanov »

Naeel Maqsudov писал(а): Пн сен 04, 2023 8:06 pm
В стандарте SQL словарь данных описан в виде...
Можете точнее указать, где конкретно «в стандарте» это описано?
Стандарт SQL бесплатно не раздается, но вот нашлась такая ссылка:
http://web.cecs.pdx.edu/~len/sql1999.pdf
Описание информационной схемы на стр. 751
pluzanov
Сообщения: 44
Зарегистрирован: Пт июл 08, 2022 4:43 pm

Re: information schema и applicable_roles

Сообщение pluzanov »

SQL*Plus писал(а): Вт сен 05, 2023 6:37 pm То есть роль отозвана не будет и будет выдано об этом предупреждение?!

Приведите, пожалуйста, его текст.
Очень интересно посмотреть, как предупреждают.
\drg это команда psql (аналог sqlplus) для просмотра кто куда входит:

Код: Выделить всё

\drg bob
                  List of role grants
 Role name | Member of |       Options       | Grantor 
-----------+-----------+---------------------+---------
 bob       | alice     | INHERIT, SET        | admin1
 bob       | alice     | ADMIN, INHERIT, SET | admin2
(2 rows)
postgres это суперпользователь (типа SYSTEM):

Код: Выделить всё

select current_user;
 current_user 
--------------
 postgres
Пытаемся забрать, что не давали:

Код: Выделить всё

revoke bob from alice;
WARNING:  role "alice" has not been granted membership in role "bob" by role "postgres"
Аватара пользователя
SQL*Plus
Сообщения: 250
Зарегистрирован: Ср апр 20, 2022 1:09 pm

Re: information schema и applicable_roles

Сообщение SQL*Plus »

А может пользователь postgres дать привилегию доступа к любому чужому объекту?

Например:
Пользователь ADMIN1 создал таблицу

Код: Выделить всё

-- as user ADMIN1
CREATE TABLE my_tab(txt NUMERIC);
, а пользователь postgres предоставил право выборки из нее пользователю ADMIN2:

Код: Выделить всё

-- as user postgres
GRANT SELECT ON ADMIN1.my_tab TO ADMIN2;
Последний раз редактировалось SQL*Plus Ср сен 06, 2023 11:22 am, всего редактировалось 1 раз.
pluzanov
Сообщения: 44
Зарегистрирован: Пт июл 08, 2022 4:43 pm

Re: information schema и applicable_roles

Сообщение pluzanov »

:D ну что же, продолжаем погружаться в мир PostgreSQL
SQL*Plus писал(а): Вт сен 05, 2023 6:56 pm А может пользователь postgres дать привилегию доступа к любому чужому объекту?
Хороший вопрос. Конечно может. Но!
В системном каталоге (словарь данных по оракловому) будет записано, что привилегию выдал не postgres, а владелец таблицы, т.е. admin1.
Аватара пользователя
SQL*Plus
Сообщения: 250
Зарегистрирован: Ср апр 20, 2022 1:09 pm

Re: information schema и applicable_roles

Сообщение SQL*Plus »

В Oracle Database сделали аналогично:

Код: Выделить всё

SQL> SELECT grantee, owner, table_name, grantor, privilege, grantable
  2  FROM dba_tab_privs WHERE owner = 'SCOTT';
no rows selected

SQL> GRANT SELECT ON scott.emp TO admin2;
Grant succeeded.

SQL> SELECT grantee, owner, table_name, grantor, privilege, grantable
  2  FROM dba_tab_privs WHERE owner = 'SCOTT';

GRANTEE OWNER   TABLE_NAME GRANTOR PRIVILEGE GRANTABLE
------- ------- ---------- ------- --------- ---------
ADMIN2  SCOTT   EMP        SCOTT   SELECT    NO       
Привилегированный пользователь (SYSTEM) дает права
на объект другого пользователя-владельца схемы (SCOTT)
третьему пользователю (ADMIN2).

При этом в словаре данных записывается, что права юзеру ADMIN2 на свой объект предоставил сам SCOTT.

До этого нововведения права на объекты своей схемы мог предоставлять только владелец.
Это часто было очень неудобно.

Предполагаю, что данное изменение было сделано в Oracle 12c R1 (2013 год).
Если кто-то знает это более точно, напишите.
Аватара пользователя
SQL*Plus
Сообщения: 250
Зарегистрирован: Ср апр 20, 2022 1:09 pm

Re: information schema и applicable_roles

Сообщение SQL*Plus »

Naeel Maqsudov писал(а): Чт сен 14, 2023 9:14 pm
Привилегированный пользователь (SYSTEM) дает права…
Или пользователь, которому дали права на объект с опцией «with admin option».
Т.е. разрешили ему распоряжаться правами на этот объект, хотя он не является owner-ом.
Да, пользователь, получивший право на чужой объект "WITH GRANT OPTION",
мог передать это право другому пользователю или роли.

Но изначально объектную привилегию, в том числе "with grant option", мог предоставить только владелец объекта.
Ответить