Grantable oracle что это

Обновлено: 06.07.2024

Я использовал функцию TOAD для сравнения схем, но она не показывает заманчивые гранты и т. Д., Поэтому есть мой вопрос:

Как я могу перечислить все гранты в базе данных Oracle?

Если вам нужно больше, чем просто прямые гранты таблицы (например, гранты через роли, системные привилегии, такие как выбор любой таблицы и т. Д.), Вот несколько дополнительных запросов:

Системные привилегии для пользователя:

Прямые гранты для таблиц / представлений:

Косвенные гранты для таблиц / представлений:

Возможно, у вас нет прав на просмотр таблицы sys.dba_sys_privs. Совершенно верно. См. Своего администратора базы данных. Если они откажутся, у них могут возникнуть законные опасения по поводу безопасности. Просмотр содержимого этих представлений дает пользователю информацию, которую в противном случае он не смог бы получить. Было бы интересно присоединиться к левому role_role_privs столу, а затем CONNECT BY PRIOR granted_role = role вернуться к привилегиям транзитивных ролей .

Предполагая, что вы хотите перечислить гранты на все объекты , полученные конкретным пользователем. :

Это не вернет объекты, принадлежащие пользователю. Если они вам нужны, используйте all_tab_privs вместо этого просмотр.

Извините, ребята, но выбор из all_tab_privs_recd, где grantee = 'your user' не даст никаких результатов, кроме публичных грантов и текущих пользовательских грантов, если вы запустите выбор от другого (скажем, SYS) пользователя. Как говорится в документации,

ALL_TAB_PRIVS_RECD описывает следующие типы грантов:

Итак, если вы администратор базы данных и хотите перечислить все гранты объектов для определенного (не самого SYS) пользователя, вы не можете использовать это системное представление.

В этом случае вы должны выполнить более сложный запрос. Вот пример, взятый (отслеженный) из TOAD для выбора всех грантов объекта для конкретного пользователя:

В нем будут перечислены все гранты объекта (включая гранты столбцов) для вашего (указанного) пользователя. Если вам не нужны гранты на уровне столбца, удалите всю часть выбора, начинающуюся с предложения union.

UPD: Изучая документацию, я нашел еще одно представление, в котором все гранты перечислены гораздо проще:

Имейте в виду, что в Oracle нет представления DBA_TAB_PRIVS_RECD.

Вы можете предоставлять и отменять привилегии для различных объектов базы данных в Oracle. Сначала мы рассмотрим, как предоставлять и отменять привилегии для таблиц, а затем, как предоставлять и отменять привилегии функциям и процедурам в Oracle.

Grant Privileges для таблиц

Вы можете предоставить пользователям различные привилегии к таблицам. Эти привилегии могут быть любой комбинацией SELECT, INSERT, UPDATE, DELETE, REFERENCES, ALTER, INDEX, или другие.

Синтаксис

Синтаксис для предоставления привилегий для таблицы в Oracle/PLSQL:

privileges
Привилегии для назначения. Это может быть любое из следующих значений:

Привилегии Описание
SELECT Возможность выполнения SELECT на таблице
INSERT Возможность выполнения INSERT на таблице
UPDATE Возможность выполнения UPDATE на таблице
DELETE Возможность выполнения DELETE на таблице
REFERENCES Возможность создавать CONSTRAINT, который ссылается на таблицу.
ALTER Возможность выполнять оператор ALTER TABLE, чтобы изменить описание таблицы.
INDEX Возможность создавать INDEX таблице с помощью оператора CREATE INDEX.
ALL Все привилегии для таблицы

object
наименование объекта базы данных, которому вы предоставляете привилегии. В случае предоставления привилегий таблице, это должно быть название таблицы.
user
Имя пользователя, которому будет предоставлена эта привилегия.

Пример

Рассмотрим некоторые примеры, предоставления привилегий для таблиц в Oracle.
Например, если вы хотите предоставить SELECT, INSERT, UPDATE и DELETE привилегии на таблицу с наименованием suppliers для user с именем trizor , то нужно выполнить следующие GRANT предложение:

С помощью команд управления данными можно управлять доступом пользователей к базе данных.

Команда GRANT используется для назначения привилегий пользователям.

Синтаксис команды GRANT:

Синтаксис команды GRANT

  • system_priv — системная привилегия
  • role — роль: набор соответствующих полномочий, которые администратор может коллективно предоставлять пользователям и другим ролям.
  • user — пользователь
  • PUBLIC — привилегия передается всем пользователям
  • WITH ADMIN OPTION — если предоставлены системные полномочия или роли, то параметр позволяет пользователю передать полномочие или роль другим пользователям или ролям

Пример 1

Предположим, пользователь Р1 является владельцем таблицы Student и нужно передать пользователю Р2 право на формулирование запросов к этой таблице:

GRANT SELECT ON Student TO P2;

Пример 2

Для передачи прав на другие привилегии синтаксис тот же самый. Пользователь Р1, являющийся владельцем таблицы Student, может разрешить пользователю Р2 вводить строки в нее:

GRANT INSERT ON Student TO P2;

Пример 3

Передача привилегий не ограничивается передачей единственной привилегии единственному пользователю с помощью одной команды GRANT. Допустимы списки привилегий и/или пользователей с элементами, разделенными запятыми:

GRANT SELECT, INSERT ON Student TO P2;

GRANT SELECT, INSERT ON Student TO P2, Р3;

Пример 4

Можно разрешить пользователю изменять значения любого или всех столбцов таблицы:

GRANT UPDATE ON Student TO P2;

GRANT UPDATE (Fam,Ball) ON Student TO P2;

Пример 5

Если необходимо предоставить кому-то все полномочия на конкретный объект, используется ключевое слово ALL:

GRANT ALL ON Student ТО Р2;

Пример 6

Когда передаются привилегии с атрибутом PUBLIC, который относится к пользователям, а не к привилегиям, то все пользователи получают их автоматически. Чаще всего это применяется для привилегии SELECT для определенных таблиц или представлений, которые нужно предоставить каждому пользователю для рассмотрения. Разрешить каждому пользователю просматривать таблицу Student можно следующей командой:

GRANT SELECT ON Student TO PUBLIC;

Пример 7.

Иногда создатель таблицы хочет, чтобы другие пользователи имели право передавать привилегии на эту таблицу. Это можно сделать с помощью предложения WITH GRANT OPTION. Если пользователь Р1 желает, чтобы пользователь Р2 имел право передавать полномочия на работу с таблицей Student другим пользователям, то он должен передать пользователю Р2 привилегию на выполнение соответствующих команд:

GRANT SELECT, INSERT ON Student ТО Р2 WITH GRANT OPTION;

Я использовал функцию TOAD для сравнения схем, но она не показывает заманчивые гранты и т. Д., Поэтому есть мой вопрос:

Как я могу перечислить все гранты в базе данных Oracle?

Если вам нужно больше, чем просто прямые гранты таблицы (например, гранты через роли, системные привилегии, такие как выбор любой таблицы и т. Д.), Вот несколько дополнительных запросов:

Системные привилегии для пользователя:

Прямые гранты для таблиц / представлений:

Косвенные гранты для таблиц / представлений:

Возможно, у вас нет прав на просмотр таблицы sys.dba_sys_privs. Совершенно верно. См. Своего администратора базы данных. Если они откажутся, у них могут возникнуть законные опасения по поводу безопасности. Просмотр содержимого этих представлений дает пользователю информацию, которую в противном случае он не смог бы получить. Было бы интересно присоединиться к левому role_role_privs столу, а затем CONNECT BY PRIOR granted_role = role вернуться к привилегиям транзитивных ролей .

Предполагая, что вы хотите перечислить гранты на все объекты , полученные конкретным пользователем. :

Это не вернет объекты, принадлежащие пользователю. Если они вам нужны, используйте all_tab_privs вместо этого просмотр.

Извините, ребята, но выбор из all_tab_privs_recd, где grantee = 'your user' не даст никаких результатов, кроме публичных грантов и текущих пользовательских грантов, если вы запустите выбор от другого (скажем, SYS) пользователя. Как говорится в документации,

ALL_TAB_PRIVS_RECD описывает следующие типы грантов:

Итак, если вы администратор базы данных и хотите перечислить все гранты объектов для определенного (не самого SYS) пользователя, вы не можете использовать это системное представление.

В этом случае вы должны выполнить более сложный запрос. Вот пример, взятый (отслеженный) из TOAD для выбора всех грантов объекта для конкретного пользователя:

В нем будут перечислены все гранты объекта (включая гранты столбцов) для вашего (указанного) пользователя. Если вам не нужны гранты на уровне столбца, удалите всю часть выбора, начинающуюся с предложения union.

UPD: Изучая документацию, я нашел еще одно представление, в котором все гранты перечислены гораздо проще:

Имейте в виду, что в Oracle нет представления DBA_TAB_PRIVS_RECD.

Читайте также: