Revoke примеры. SQL GRANT Команды Отозвать

Команды DCL используются для обеспечения безопасности баз данных в среде с несколькими базами данных пользователя. Два типа команд DCL являются предоставлять и отзывать. Только администратор базы данных или владельца объекта базы данных может предоставить / удалить привилегии на объект базы данных.

SQL GRANT Command

SQL GRANT является команда используется для предоставления доступа или привилегии на объекты базы данных для пользователей.

Синтаксис команды GRANT является:

GRANT privilege_name
ON object_name
TO {user_name |PUBLIC |role_name}
;

  • PRIVILEGE_NAME это право доступа или привилегия предоставляется пользователю. Некоторые из прав доступа, ALL, ВЫПОЛНИТЬ и SELECT.
  • object_name это имя объекта базы данных, как таблицы, представления, и хранимая процедура ПОСЛЕДОВАТЕЛЬНОСТИ.
  • user_name
  • user_name это имя пользователя, которому доступ право быть само собой разумеющееся.
  • ОБЩЕСТВЕННОЕ используется для предоставления прав доступа ко всем пользователям.
  • РОЛИ представляют собой набор привилегий сгруппированы вместе.
  • WITH GRANT OPTION - Позволяет пользователю предоставить права доступа другим пользователям.

Например: Сотрудник ГРАНТ НА ​​ВЫБОР ДЛЯ user1; Эта команда предоставляет разрешение SELECT, на столе сотрудника на user1.You следует использовать с опцией GRANT осторожно, потому что, например, если вы предоставите SELECT, привилегию на таблице сотрудников к user1, используя опцию WITH GRANT, то user1 может предоставить привилегию SELECT, таблицы сотрудника к другому пользователя, такие как user2 и т.д. Позже, если вы отзывать привилегию SELECT, работника от user1, по-прежнему user2 будет иметь привилегию SELECT, таблицы сотрудников.

SQL REVOKE Команда:

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

Синтаксис команды REVOKE является:

REVOKE privilege_name
ON object_name
FROM {user_name |PUBLIC |role_name}

Например: КЕУОКЕ ВЫБРАТЬ ВКЛ сотруднику user1; Эта команда будет отзывать SELECT, привилегию на столе сотрудника из user1.When вы REVOKE SELECT, привилегию на столе от пользователя, пользователь не сможет больше выбора данных из этой таблицы. Тем не менее, если пользователь получил привилегии SELECT, на этом столе из более чем одного пользователей, он / она может выбрать из этой таблицы, пока каждый, кто получил разрешение не отзовет его. Вы не можете отзывать привилегии, если они изначально не были предоставлены Вами.

Привилегии и Роли:

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

привилегии 1) Системные - Это позволяет пользователю создавать, изменять или удалять объекты базы данных.
2) Привилегии объектов - Это позволяет пользователю ВЫПОЛНИТЬ, SELECT, INSERT, UPDATE или DELETE данные из объектов базы данных, к которым применяются льготы.

Мало создать системные привилегии, перечислены ниже:

System Privileges Description
CREATE object allows users to create the specified object in their own schema.
CREATE ANY object allows users to create the specified object in any schema.

Вышеуказанные правила также применяются для Альтера и DROP системные привилегии.

Мало кто из привилегий объектов перечислены ниже:

Object Privileges Description
INSERT allows users to insert rows into a table.
SELECT allows users to select data from a database object.
UPDATE allows user to update data in a table.
EXECUTE allows user to execute a stored procedure or a function.

Роли: Роли представляют собой набор привилегий или прав доступа. Когда есть много пользователей в базе данных становится трудно предоставлять или отменять привилегии для пользователей. Поэтому, если вы определили роли, вы можете предоставить или отменить привилегии для пользователей, тем самым автоматически предоставления или отмены льгот. Вы можете либо создавать роли или использовать системные роли предопределенных оракула.

Некоторые из привилегий, предоставленных системных ролей, как указано ниже:

System Role Privileges Granted to the Role
CONNECT CREATE TABLE, CREATE VIEW, CREATE SYNONYM, CREATE SEQUENCE, CREATE SESSION etc.
RESOURCE CREATE PROCEDURE, CREATE SEQUENCE, CREATE TABLE, CREATE TRIGGER etc. The primary usage of the RESOURCE role is to restrict access to database objects.
DBA ALL SYSTEM PRIVILEGES

Создание ролей:

Синтаксис для создания роли является:

CREATE ROLE role_name
;

Например: Чтобы создать роль под названием "разработчик" с паролем как "PWD", код будет выглядеть следующим образом

CREATE ROLE testing
;

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

Мы можем предоставить или отменить привилегию роли, как показано ниже.

Например: Чтобы предоставить привилегию CREATE TABLE пользователю посредством создания роли тестирования:

Во-первых, создать тестирование роли

CREATE ROLE testing

Во-вторых, предоставить привилегию CREATE TABLE для тестирования роли. Вы можете добавить дополнительные привилегии для этой роли.

GRANT CREATE TABLE TO testing;

В-третьих, предоставить пользователю роль.

GRANT testing TO user1;

Чтобы отменить привилегию CREATE TABLE от тестирования РОЛИ, вы можете написать:

REVOKE CREATE TABLE FROM testing;

Синтаксис уронить роль из базы данных, как показано ниже:

DROP ROLE role_name;

Например: Чтобы удалить роль под названием разработчик, вы можете написать.

REVOKE - отозвать права доступа

Синтаксис

REVOKE [ GRANT OPTION FOR ] { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER } [, ...] | ALL [ PRIVILEGES ] } ON { [ TABLE ] имя_таблицы [, ...] | ALL TABLES IN SCHEMA имя_схемы [, ...] } FROM { [ GROUP ] имя_роли | PUBLIC } [, ...] [ CASCADE | RESTRICT ] REVOKE [ GRANT OPTION FOR ] { { SELECT | INSERT | UPDATE | REFERENCES } ( имя_столбца [, ...]) [, ...] | ALL [ PRIVILEGES ] ( имя_столбца [, ...]) } ON [ TABLE ] имя_таблицы [, ...] FROM { [ GROUP ] имя_роли | PUBLIC } [, ...] [ CASCADE | RESTRICT ] REVOKE [ GRANT OPTION FOR ] { { USAGE | SELECT | UPDATE } [, ...] | ALL [ PRIVILEGES ] } ON { SEQUENCE имя_последовательности [, ...] | ALL SEQUENCES IN SCHEMA имя_схемы [, ...] } FROM { [ GROUP ] имя_роли | PUBLIC } [, ...] [ CASCADE | RESTRICT ] REVOKE [ GRANT OPTION FOR ] { { CREATE | CONNECT | TEMPORARY | TEMP } [, ...] | ALL [ PRIVILEGES ] } ON DATABASE имя_бд [, ...] FROM { [ GROUP ] имя_роли | PUBLIC } [, ...] [ CASCADE | RESTRICT ] REVOKE [ GRANT OPTION FOR ] { USAGE | ALL [ PRIVILEGES ] } ON DOMAIN имя_домена [, ...] FROM { [ GROUP ] имя_роли | PUBLIC } [, ...] [ CASCADE | RESTRICT ] REVOKE [ GRANT OPTION FOR ] { USAGE | ALL [ PRIVILEGES ] } ON FOREIGN DATA WRAPPER имя_обёртки_сторонних_данных [, ...] FROM { [ GROUP ] имя_роли | PUBLIC } [, ...] [ CASCADE | RESTRICT ] REVOKE [ GRANT OPTION FOR ] { USAGE | ALL [ PRIVILEGES ] } ON FOREIGN SERVER имя_сервера [, ...] FROM { [ GROUP ] имя_роли | PUBLIC } [, ...] [ CASCADE | RESTRICT ] REVOKE [ GRANT OPTION FOR ] { EXECUTE | ALL [ PRIVILEGES ] } ON { FUNCTION имя_функции ([ [ режим_аргумента ] [ имя_аргумента ] тип_аргумента [, ...] ]) [, ...] | ALL FUNCTIONS IN SCHEMA имя_схемы [, ...] } FROM { [ GROUP ] имя_роли | PUBLIC } [, ...] [ CASCADE | RESTRICT ] REVOKE [ GRANT OPTION FOR ] { USAGE | ALL [ PRIVILEGES ] } ON LANGUAGE имя_языка [, ...] FROM { [ GROUP ] имя_роли | PUBLIC } [, ...] [ CASCADE | RESTRICT ] REVOKE [ GRANT OPTION FOR ] { { SELECT | UPDATE } [, ...] | ALL [ PRIVILEGES ] } ON LARGE OBJECT oid_БО [, ...] FROM { [ GROUP ] имя_роли | PUBLIC } [, ...] [ CASCADE | RESTRICT ] REVOKE [ GRANT OPTION FOR ] { { CREATE | USAGE } [, ...] | ALL [ PRIVILEGES ] } ON SCHEMA имя_схемы [, ...] FROM { [ GROUP ] имя_роли | PUBLIC } [, ...] [ CASCADE | RESTRICT ] REVOKE [ GRANT OPTION FOR ] { CREATE | ALL [ PRIVILEGES ] } ON TABLESPACE табл_пространство [, ...] FROM { [ GROUP ] имя_роли | PUBLIC } [, ...] [ CASCADE | RESTRICT ] REVOKE [ GRANT OPTION FOR ] { USAGE | ALL [ PRIVILEGES ] } ON TYPE имя_типа [, ...] FROM { [ GROUP ] имя_роли | PUBLIC } [, ...] [ CASCADE | RESTRICT ] REVOKE [ ADMIN OPTION FOR ] имя_роли [, ...] FROM имя_роли [, ...] [ CASCADE | RESTRICT ]

Описание

Команда REVOKE лишает одну или несколько ролей прав, назначенных ранее. Ключевое слово PUBLIC обозначает неявно определённую группу всех ролей.

Заметьте, что любая конкретная роль получает в сумме права, данные непосредственно ей, права, данные любой роли, в которую она включена, а также права, данные группе PUBLIC . Поэтому, например, лишение PUBLIC права SELECT не обязательно будет означать, что все роли лишатся права SELECT для данного объекта: оно сохранится у тех ролей, которым оно дано непосредственно или косвенно, через другую роль. Подобным образом, лишение права SELECT какого-либо пользователя может не повлиять на его возможность пользоваться правом SELECT , если это право дано группе PUBLIC или другой роли, в которую он включён.

Если указано GRANT OPTION FOR , отзывается только право передачи права, но не само право. Без этого указания отзывается и право, и право распоряжаться им.

Если пользователь обладает правом с правом передачи и он дал его другим пользователям, последнее право считается зависимым. Когда первый пользователь лишается самого права или права передачи и существуют зависимые права, эти зависимые права также отзываются, если дополнительно указано CASCADE ; в противном случае операция завершается ошибкой. Это рекурсивное лишение прав затрагивает только права, полученные через цепочку пользователей, которую можно проследить до пользователя, являющегося субъектом команды REVOKE . Таким образом, пользователи могут в итоге сохранить это право, если оно было также получено через других пользователей.

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

При лишении пользователя членства в роли GRANT OPTION меняется на ADMIN OPTION , в остальном поведение команды похожее. Заметьте также, что эта форма команды не принимает избыточное слово GROUP .

Замечания

Для просмотра прав, назначенных для существующих таблиц и столбцов, можно воспользоваться командой \dp в psql . Формат её вывода рассматривается в описании GRANT . Для других, не табличных объектов предусмотрены другие команды \d , которые могут показывать в том числе и назначенные для них права.

Пользователь может отзывать только те права, которые он дал другому непосредственно. Если, например, пользователь A дал право с правом передачи пользователю B, а пользователь B, в свою очередь, дал это право пользователю C, то пользователь A не сможет лишить этого права непосредственно C. Вместо этого, пользователь A может лишить права передачи права пользователя B и использовать параметр CASCADE , чтобы этого права по цепочке лишился пользователь C. Или же, например, если и A, и B дали одно и то же право C, то A сможет отозвать право, которое дал он, но не пользователь B, так что в результате C всё равно будет иметь это право.

Если отозвать право доступа к объекту (с помощью REVOKE) попытается не владелец объекта, команда завершится ошибкой, если пользователь не имеет никаких прав для этого объекта. Если же пользователь имеет какие-то права, команда будет выполняться, но пользователь сможет отозвать только те права, которые даны ему с правом распоряжения ими. Формы REVOKE ALL PRIVILEGES будут выдавать предупреждение, если у него вовсе нет таких прав, тогда как другие формы будут выдавать предупреждения, если пользователь не имеет права распоряжаться именно правами, указанными в команде. (В принципе, эти утверждения применимы и к владельцу объекта, но ему разрешено распоряжаться всем правами, поэтому такие ситуации невозможны.)

Если команду GRANT или REVOKE выполняет суперпользователь, эта команда выполняется так, как будто её выполняет владелец затрагиваемого объекта. Так как все права в конце концов исходят от владельца объекта (возможно, косвенно по цепочке или через право распоряжением правом), суперпользователь может отозвать все права, но это может потребовать применения режима CASCADE , как описывалось выше.

REVOKE также может быть выполнена ролью, которая не является владельцем заданного объекта, но является членом роли-владельца, либо членом роли, имеющей права WITH GRANT OPTION для этого объекта. В этом случае команда будет выполнена, как если бы её выполняла содержащая роль, действительно владеющая объектом или имеющая права WITH GRANT OPTION . Например, если таблица t1 принадлежит роли g1 , членом которой является роль u1 , то u1 может отзывать права на использование t1 , которые записаны как данные ролью g1 . В том числе это могут быть права, данные ролью u1 , а также другими членами роли g1 .

Если роль, выполняющая команду REVOKE , получила указанные права косвенно по нескольким путям членства ролей, какая именно роль будет выбрана для выполнения команды, не определено. В таких случаях рекомендуется воспользоваться командой SET ROLE и переключиться на роль, которую хочется видеть в качестве выполняющей REVOKE . Если этого не сделать, могут быть отозваны не те права, что планировалось, либо отозвать права вообще не удастся.

Примеры

Лишение группы public права добавлять данные в таблицу films:

REVOKE INSERT ON films FROM PUBLIC;

Лишение пользователя manuel всех прав для представления kinds:

REVOKE ALL PRIVILEGES ON kinds FROM manuel;

Заметьте, что на самом деле это означает «лишить всех прав, которые дал я » .

Исключение из членов роли admins пользователя joe:

REVOKE admins FROM joe;

Совместимость

Замечания по совместимости, приведённые для команды GRANT , справедливы и для REVOKE . Стандарт требует обязательного указания ключевого слова RESTRICT или CASCADE , но PostgreSQL подразумевает RESTRICT по умолчанию.

Платформа SQL Server использует инструкцию REVOKE в качестве способа отмены настроек прав доступа, назначенных данному пользователю. Этот момент важен, поскольку SQL Server поддерживает дополнительную инструкцию DENY, которая явно запрещает пользователю доступ к указанному ресурсу. В SQL Server инструкцию REVOKE можно использовать для отмены привилегий, назначенных пользователю при помощи инструкции GRANT. Если вы хотите явным образом лишить пользователя определенной привилегии, вам следует использовать инструкцию DENY.

Платформа SQL Server не поддерживает предложения HIERARCHY OPTION и ADMIN OPTION стандарта ANSI. Хотя предложение ADMIN OPTION и не поддерживается, в версии команды REVOKE SQL Server есть две административные привилегии (CREATE и BACKUP). Синтаксис инструкции следующий.

REVOKE {[объектная_привилегия] [, …] | [системная_привилегия]} [(столбец [, …])]]| {ТО | FROM} {имя_получателя [, …] | роль [, …] | PUBLIC | GUEST} ]

GRANT OPTION FOR

Пользователь лишается права назначать конкретные привилегии другим пользователям.

объектная привилегия

Отменяются права доступа к различным инструкциям, которые могут комбинироваться в любом порядке.

ALL

Отменяются все привилегии, назначенные в настоящий момент указанным пользователям и/или для указанных объектов базы данных. Использование этого предложения не поощряется, поскольку способствует нечеткости программирования.

(SELECT | INSERT DELETE UPDATE}

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

REFERENCES

Отменяется право создавать и удалять ограничения типа «внешний ключ», ссылающиеся на объект базы данных как на родительский объект.

Отменяется право пользователя создавать или удалять правило в таблице или представлении.

Отменяется право выполнять хранимую процедуру, пользовательскую функцию или расширенную хранимую процедуру.

системная привилегия

Отменяется право выполнения следующих инструкций: CREATE DATABASE, CREATE DEFAULT, CREATE FUNCTION, CREATE PROCEDURE, CREATE RULE, CREATE TABLE, CREATE VIEW, BACKUP DATABASE и BACKUP LOG.

ON [объект] [(столбец [, …])]

Отменяется право доступа пользователя к указанному объекту. Если объект представляет собой таблицу или представление, вы можете отменять привилегии доступа к отдельным столбцам. Вы можете отменять в таблице или представлении привилегии SELECT, INSERT, UPDATE, DELETE и REFERENCES. В столбцах таблицы или представления вы можете отменять только привилегии SELECT и UPDATE. Вы можете отменять привилегии EXECUTE в хранимой процедуре, пользовательской функции или расширенной хранимой процедуре.

[ТО | FROM] имя получателя | роль | PUBLIC | GUEST

Указываются пользователи или роли, теряющие указанную привилегию. Для отмены привилегий, назначенных роли PUBLIC (которая подразумевает всех пользователей), можно использовать ключевое слово PUBLIC. Можно перечислить несколько получателей, разделяя их имена запятыми. В SQL Server также поддерживается учетная запись GUEST, которую используют все пользователи, которые не имеют своей записи в базе данных.

Удаляются привилегии пользователей, которые получили свои права через предложение WITH GRANT OPTION. Это предложение является необходимым при использовании предложения GRANT OPTION FOR.

AS (имя_группы имя _роли}

Указываются права, в соответствии с которыми отменяется привилегия. В некоторых случаях пользователю могут временно потребоваться права определенной группы, чтобы отменить указанные привилегии. В этом случае, чтобы получить такие права, вы можете использовать предложение AS.

Две формы инструкции REVOKE - REVOKE объектная привилегия и REVOKE системная_привилегия являются взаимоисключающими. Не пытайтесь выполнить обе операции в одной инструкции. Ключевое синтаксическое отличие между ними состоит в том, что не следует использовать предложение ON при удалении системных привилегий. Например, чтобы удалить системную привилегию, можно использовать следующую команду.

REVOKE CREATE DATABASE, BACKUP DATABASE FROM dylan, katie

Если привилегии были присвоены пользователю с применением предложения WITH GRANT OPTION, то отменять эти привилегии следует с одновременным использованием двух предложений - WITH GRANT OPTION и CASCADE. Например:

REVOKE GRANT OPTION FOR SELECT, INSERT, UPDATE, DELETE ON titles TO editors CASCADE GO

Команду REVOKE можно использовать только в текущей базе данных. Соответственно всегда неявно предполагаются опции стандарта ANSI CURRENTJJSER и CURRENTROLE. Инструкция REVOKE также используется для отмены всех параметров DENY.

Платформа SQL Server также поддерживает дополнительную инструкцию DENY. Синтаксис инструкции DENY идентичен синтаксису инструкции REVOKE. Однако, по сути, они отличаются тем, что REVOKE нейтрализует привилегии пользователя, a DENY их явно запрещает. Используйте инструкцию DENY, чтобы запретить пользователю или роли доступ к привилегии, даже если привилегия предоставляется явно или через назначение роли.

Инструкция REVOKE должна использоваться для удаления ранее предоставленных или запрещенных (DENY) привилегий. Например, пользователь kelly ушла в продолжительный отпуск по уходу за ребенком. На это время ее доступ к таблице employee был запрещен. Она вернулась, и мы вновь разрешили привилегии.

DENY ALL ON employee TO Kelly GO

REVOKE ALL ON employee TO Kelly GO

В этом примере команда REVOKE не удаляет ее привилегии, она нейтрализует действие команды DENY.

По умолчанию аккаунт не имеет никаких прав в БД Oracle. Невозможно даже создать подключения без назначенных прав. И даже после получения прав на подключения, аккаунт не может сделать ничего полезного (или опасного) без получения соответсвующих прав. Права назначаются с помощью команды GRANT и убираются с помощью команды REVOKE. Дополнительные директивы команды используются для разрешения аккаунта делится правами которые у него есть с другими пользователями. По умолчанию только аккаунта администратора (SYS и SYSTEM) владеют правами назначения прав. Пользователь который назначает права другому пользователю называется grantor когда получатель прав – grantee. Права разбиты на две группы: системные права, которые грубо говоря позволяют пользователю совершать действия влияющие на словарь данных, и права над объектами, которые позволяют пользователю совершать действия влияющие на данные.

Системные права

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

  • CREATESESSION – права на подключения. Без этих прав вы даже не сможете подключиться к БД
  • RESTRICTEDSESSION – Если БД запущена с директивой STARTUPRESTRICT или применялась команда ALTERSYSTEMENABLERESTRICTEDSESSION, то только пользователи с этими правами смогут подключаться к БД
  • ALTERDATABASE – разрешает выполнять команды влияющие на физические структуры
  • ALTERSYSTEM – разрешает изменять параметры экземпляра и структуры памяти
  • CREATETABLESPACE – вместе с ALTERTABLESPACE и DROPTABLESPACE позволяют пользователю управлять табличными пространтсвами
  • CREATETABLE – позволяет gratee создавать таблицы в своей схеме; включает возможность создавать, изменять и удалять таблицы, выполнять команды DML и select и управлять индексами
  • GRANTANYOBJECTPRIVILEGE – позволяет grantee управлять правами объектов которые ему не принаджлежат, но не даёт прав ему самому
  • CREATEANYTABLE – grantee может создавать таблицы которые принадлежат другим аккаунтам
  • DROPANYTABLE – grantee позволяется удалять таблицы которые принадлежат другим аккаунтам
  • INSERTANYTABLE, UPDATEANYTABLE, DELETEANYTABLE – даёт grantee право выполнять DML команды над объектами которые ему не принадлежат
  • SELECTANYTABLE – Даёт право grantee выполнять SELECT к любмы таблицам.

Синтаксис для назначения прав

GRANT privilege [,privilege…] TO username;

После создания аккаунта, обычно назначаются права часто используемые пользователями кто вовлечён в разработку приложения

grant create session, alter session,

create table, create view, create synonym, create cluster,

create database link, create sequence,

create trigger, create type, create procedure, create operator

to username ;

Эти права позволяют подключаться и настраивать сессию, создавать объекты и хранить PL/SQL объекты. Объекты могут быть созданы только в схеме аккаунта; нет прав к схемам других аккаунтов. Также создание объектов ограничивается лмимитами табличных пространств.

Другим вариантом назначения прав будет назначение grantee доступа для переназначения прав другим аккаунтам. Например

connect system/oracle;

grant create table to scott with admin option;

connect scott/tiger;

grant create table to jon;

Выполнение этих команд позволит SCOTT создавать таблицы в совей схеме, и выполнять команду GRANT. SCOTT даёт права пользователю JON создавать таблицы – но JON сможет создавать таблицы только в схеме JON. На рисунке 6-5 показаны права пользователя в Database Control; ту же информацию можно получить выполнив запрос к представлению DBA_SYS_PRIVS.

Если системные разрешения были отозваны, все действия которые вы выполнили пока у вас были права остаются в силе. Если у вас были права с ADMIN OPTION то у всех пользователей которым вы назначили права – права остаются, несмотря на то что у вас права отозвали. Не остаётся записей кто именно назначил системные привилегии, таким образом невозможно забрать права CASCADE как показано на рисунке 6-6

Revocation of a system privilege will not cascade (unlike

revocation of an object privilege).

Права ANY дают доступ ко всем объектам в БД. Таким образом

grant select any table to scott

позволить аккаунту SCOTT выполнять запрос SELECT ко всем таблицам во всех схемах БД. Такое назначение прав считается дурным тоном и ANY права назначаются только DBA.

In fact, ANY is not as dangerous now as with earlier releases. It no longer

includes tables in the SYS schema, so the data dictionary is still protected. But

ANY should still be used with extreme caution, as it removes all protection

from user tables.

Объектные права

Объектные права дают доступ к выполнению команд DML и SELECT к соответствующим объектам и выполнению PL/SQL объектов. Эти права не существуют для объектов в схеме аккаунта; если у пользователя есть системные права CREATE TABLE – это значит что он может выполнять SELECT и DML запросы к таблицам которые он создал без дополнительных прав.

The ANY privileges, that grant permissions against objects in

every user account in the database, are not object privileges-they are

system privileges.

Объектные права применяются к разным группам объектов

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

GRANT privilege ON object TO username ;

Например

Можно использовать ALL чтобы применить права для всех операций, или использовать конкретное указание столбца таблицы или представления.

grant select on store.orders to scott;

grant update (order_status) on store.orders to scott;

grant all on store.regions to scott;

Эти команды позволят аккаунту SCOTT выполнять запрос SELECT ко всем столбцам таблицы ORDERS в схеме STORE но обновлять данные только в одном столбце. Также у аккаунта SCOTT есть доступ ко всем операциям к таблице REGIONS. На рисунке 6-7 отображается результат назначения прав при просмотре в Database Control

Granting privileges at the column level is often said to be bad practice

because of the massive workload involved. If it is necessary to restrict peoples’

access to certain columns, creating a view that shows only those columns will

often be a better alternative.

Использование директивы WITH GRANT OPTION позволит пользователю передавать свои права другим аккаунта. Оракл хранит информацию о том кто и кому дал доступ на объектном уровне; это позволяет отзывать права учитывая эту информацию. Рассмотрим пример

connect store/admin123;

grant select on customers to sales with grant option;

connect sales/sales;

grant select on store.customers to webapp with grant option;

conn webapp/oracle;

grant select on store.customers to scott;

connect store/admin123;

revoke select on customers from sales;

После выполнения этих команд, ни у пользователя SALES ни у пользователя WEBAPP ни у пользователя SCOTT нет прав на выполнение команд SELECT к таблице STORE.CUSTOMERS.

Revocation of an object privilege will cascade (unlike revocation of