699
.pdfДля изменения прав кроме оператора GRANT существует оператор REVOKE, имеющий следующий синтаксис:
Полномочия на выполнение операторов:
REVOKE {ALL | statement_list} FROM {PUBLIC | name_list}
Полномочия на объекты:
REVOKE {ALL | permission_list}
ON {table_name [(column_list)] | view_name [(column_list)] | Stored_procedure_name | extended_stored_procedure_name} FROM {PUBLIC | name_list
Чтобы удалить пользователя, требуется воспользоваться командой:
DROP USER user [CASCADE]
Для удаления пользователя требуется системная привилегия на удаление пользователей (DROP USER).
Пользователь не может быть удален до тех пор, пока в его схеме существуют объекты. Если требуется автоматически удалить все его объекты, то следует указать
CASCADE.
1. Создание пользователя «Пользователь1» с паролем «пароль» и назначение ему прав на создание объектов БД в своей схеме. Созданный пользователь будет также иметь доступ к общим (PUBLIC) объектам БД:
CREATE USER Пользователь1 IDENTIFIED BY "пароль"
DEFAULT TABLESPACE "USERS" QUOTA UNLIMITED ON "USERS";
GRANT CONNECT, RESOURCE TO Пользова-
тель1;
ALTER USER Пользователь1 DEFAULT ROLE
ALL;
131
2. Назначение пользователю «Пользователь1» прав администратора БД:
GRANT DBA TO Пользователь1;
ALTER USER Пользователь1 DEFAULT ROLE
ALL;
Разрешить общий доступ к объекту базы данных может владелец (пользователь, в чьей схеме находится объект) или администратор БД. Для предоставления общего доступа к таблице требуется выполнить команду Oracle GRANT. Ее сокращенный синтаксис следующий:
GRANT {object_privilege [,...] | ALL} ON schema.object TO {user | role | PUBLIC} [WITH GRANT OPTION]
object_privilege – предоставляемая привилегия
Привилегии
Описание SELECT Просмотр
INSERT Вставка новых строк
UPDATE Обновление значений DELETE Удаление строк ALTER Изменение структуры INDEX Создание индекса
ALL – все привилегии будут предоставлены на объект. ON – определяет объект (таблицу, представление и
т.д.).
TO – указывает, кому предоставляется привилегия. Возможен один из вариантов:
•конкретному пользователю;
•роли;
•всем пользователям (PUBLIC).
132
WITH GRANT OPTION – позволяет предоставлять/отзывать указанные привилегии другим пользователям или ролям.
Отозвать привилегию можно с помощью команды (сокращенный синтаксис):
REVOKE {object_privilege [,...] | ALL} ON schema.object FROM {user | role | PUBLIC}
Примеры
1.Предоставить право просмотра таблицы «Пользователь1.таблица» пользователю «Пользователь2»:
GRANT SELECT ON Пользователь1.таблица TO Пользователь2;
2.Предоставить право просмотра таблицы «Пользова-
тель1.таблица» всем пользователям:
GRANT SELECT ON Пользователь1.таблица
TO PUBLIC;
3.Предоставить право просмотра, вставки, обновления
иудаления данных таблицы «Пользователь1.таблица» пользователю «Пользователь2»:
GRANT SELECT,INSERT,UPDATE,DELETE ON
Пользователь1.таблица TO Пользователь2;
4.Предоставить полный доступ к таблице «Пользова-
тель1.таблица» пользователю «Пользователь2» с возможностью передавать права:
GRANT ALL ON Пользователь1.таблица TO
Пользователь2 WITH GRANT OPTION;
Предоставление системных привилегий и ролей
Кроме объектных привилегий (object_privilege), разрешающих выполнение определенной операции над конкретным объектом (например с таблицей), в Oracle существуют системные привилегии (system_privilege), разрешающие выполнение операций над целым классом объектов. Существу-
133
ет множество системных привилегий, соответствующих практически всем возможным операциям над данными.
Из наиболее важных можно отметить привелегии, представленные в табл. 2.
|
|
Таблица 2 |
Системные привилегии |
||
|
|
|
Системная привилегия |
|
Полномочия |
ALTER ANY ROLE |
|
Изменение любой роли БД |
ALTER ANY TABLE |
|
Изменение любой таблицы или |
|
представления в БД |
|
|
|
|
ALTER ANY INDEX |
|
Изменение любого индекса в лю- |
|
бой схеме |
|
|
|
|
ALTER DATABASE |
|
Изменять БД |
|
|
Изменение пользователей и их |
ALTER USER |
|
параметров (пароль, профиль, |
|
|
роль и т.д.) |
CREATE ANY INDEX |
|
Создание индекса в любой схеме. |
CREATE ANY TABLE |
|
Создание таблицы в любой схеме |
CREATE ANY VIEW |
|
Создание представления в любой |
|
схеме |
|
|
|
|
CREATE ROLE |
|
Создание роли |
CREATE SESSION |
|
Право на подключение к серверу |
CREATE USER |
|
Создание пользователей |
CREATE VIEW |
|
Создание представлений |
DROP ANY INDEX |
|
Удаление любого индекса |
DROP ANY TABLE |
|
Удаление таблиц в любой схеме |
DROP ANY VIEW |
|
Удаление любого представления |
DROP USER |
|
Удаление пользователя |
GRANT ANY PRIVILEGE |
|
Предоставление любой привиле- |
|
гии |
|
|
|
|
GRANT ANY ROLE |
|
Назначение любой роли |
DELETE ANY TABLE |
|
Удаление из любой таблицы |
|
134 |
|
Окончание табл. 2 |
|
|
|
|
Системная привилегия |
Полномочия |
|
INSERT ANY TABLE |
Вставка в любую таблицу |
|
SELECT ANY TABLE |
Просмотр любой таблицы |
|
UPDATE ANY TABLE |
Изменение значения в любой |
|
таблице |
||
|
Для назначения пользователю (или роли) системных привилегий или ролей требуется выполнить команду (сокращенный синтаксис):
GRANT {system_privilege | role [,...]} TO {user | role | PUBLIC} [WITH ADMIN OPTION]
WITH ADMIN OPTION – позволяет предоставлять/отзывать, а также изменять указанные привилегии.
Отозвать системную привилегию или роль (сокращенный синтаксис):
REVOKE {system_privilege | role [,...]} FROM {user | role | PUBLIC}
Роль (Role) – это именованный набор привилегий. Использование ролей существенно облегчает управление полномочиями. Вместо того чтобы предоставлять десятки привилегий каждому пользователю, можно создать несколько типичных ролей (например, пользователь, редактор, администратор и т.п.), наделить их необходимыми полномочиями и назначить пользователям их роли. В дальнейшем будет гораздо проще изменить роль(и) пользователя, чем описывать его новые полномочия.
Создание роли (сокращенный синтаксис):
CREATE ROLE role
Удаление роли:
135
DROP ROLE role
Роли могут применяться динамически в течение сеанса связи с базой данных. Установка и отмена ролей производится оператором:
SET ROLE {role [,...] | ALL | NONE}
Чтобы избежать необходимости каждый раз устанавливать роль (роли), ее можно назначить по умолчанию (со-
кращенный синтаксис): |
DEFAULT ROLE {role |
|
ALTER |
USER user |
|
[,...] | ALL | NONE} |
|
|
В Oracle есть несколько предустановленных ролей, вот |
||
часть из них: |
|
|
|
|
|
Роль |
|
Описание |
CONNECT |
Обеспечивает |
подключение к ORACLE. |
|
Привилегия CREATE SESSION |
|
RESOURCE |
Обеспечивает возможность создания объ- |
|
|
ектов БД. Список привилегий (в своей |
|
|
схеме) |
|
|
CREATE SEQUENCE – создание последо- |
|
|
вательности |
|
|
CREATE TRIGGER – создание триггера. |
|
|
CREATE CLUSTER – создание кластера. |
|
|
CREATE OPERATOR – создание оператора |
|
|
CREATE INDEXTYPE – создание индекс- |
|
|
ного типа |
|
|
CREATE TYPE – создание типа |
|
|
CREATE PROCEDURE – создание проце- |
|
|
дуры |
|
|
CREATE TABLE – создание таблицы |
|
DBA |
Администратор БД |
Пример
1. Предоставить роли «Роль1» право на просмотр, вставку, обновление и удаление всех таблиц:
136
GRANT SELECT ANY TABLE, INSERT ANY TABLE, UPDATE ANY TABLE, DELETE ANY TABLE TO Роль1;
2. Назначить роль «Роль1» пользователю «Пользователь1» с возможностью передачи роли. Установить все назначенные роли – по умолчанию:
GRANT Роль1 TO Пользователь1 WITH ADMIN OPTION;
ALTER USER Пользователь1 DEFAULT ROLE ALL; [44]
Примеры запросов для просмотра привилегий [14]:
Select * from dba_tab_privs where grantee=<user_or_role> - просмотр всех объектных привилегий
Select * from dba_col_privs where grantee=<user_or_role> - просмотр всех привилегий на столбцы
select * from dba_sys_privs where grantee=<user_or_role> - просмотр всех системных привилегий
2.14. Оператор создания таблиц CREATE TABLE
Оператор DDL создания таблиц – CREATE TABLE,
также операторы DROP TABLE, CREATE VIEW, DROP VIEW, CREATE PROCEDURE, DROP PROCEDURE и дру-
гие операторы создания объектов БД.
CREATE TABLE shema. tablename
( column - column datatype -- DEFAULT expr -- column constraint )
table constraint TABLESPACE tablespace STORAGE storage options
137
Где:
column datatype – тип данных столбцов таблицы. DEFAULT expr – значение по умолчанию. column constraint – ограничение столбца.
table constraint – ограничение таблицы. TABLESPACE tablespace – табличное пространство
хранения.
STORAGE storage options – параметры хранения таб-
лицы.
Пример [31]:
create table orders ( order_id number, order_dt date,
cust_id references customer constraint pk_orders (order_id)
using index tablespace ts_idx)
Оператор ALTER Table в Oracle
Оператор ALTER TABLE позволяет переименовывать существующую таблицу. Также он может быть использован для добавления, модификации или удаления столбцов существующей таблицы.
ALTER TABLE shema. tablename
ADD ( column datatype -- DEFAULT expr -- column constraint )
MODIFY ( column datatype -- DEFAULT expr -- column constraint )
DROP COLUMN ( column ) STORAGE storage options
Где:
ADD – опция добавления элемента таблицы. column datatype – тип данных столбцов таблицы. DEFAULT expr – значение по умолчанию. column constraint – ограничение столбца. MODIFY – опция изменения элемента таблицы.
138
column datatype – тип данных столбцов таблицы. DEFAULT expr – значение по умолчанию. column constraint – ограничение столбца.
DROP COLUMN column – удаление столбца. STORAGE storage options – параметры хранения таб-
лицы.
Переименование таблицы
Простейший синтаксис переименования таблицы:
ALTER TABLE table_name RENAME TO new_table_name;
Например, переименуем таблицу suppliers в таблицу vendors:
ALTER TABLE suppliers RENAME TO vendors;
Добавление столбца (столбцов) в таблицу
Синтаксис оператора ALTER TABLE для добавления
столбца в существующую таблицу: |
|
ADD |
|||
ALTER |
|
TABLE |
table_name |
||
column_name column-definition; |
|
|
|||
Добавим столбец supplier_name в таблицу supplier: |
ADD |
||||
ALTER |
|
TABLE |
supplier |
||
supplier_name varchar2(50); |
|
|
|||
Синтаксис оператора ALTER TABLE для добавления |
|||||
нескольких столбцов в существующую таблицу: |
( |
||||
ALTER |
TABLE |
table_name |
ADD |
||
column_1 |
column-definition, |
|
|||
|
column_2 |
column-definition, |
|
||
|
… |
|
column_definition ); |
||
|
column_n |
||||
Добавим два столбца (supplier_name and city) в табли- |
|||||
цу supplier: |
|
TABLE |
supplier |
ADD |
|
ALTER |
|
||||
(supplier_name |
varchar2(50), |
city |
|
varchar2(45) );
139
Модификация столбца(-ов) в таблице
Синтаксис оператора ALTER TABLE для изменеия одного столбца в существующей таблице:
ALTER TABLE table_name MODIFY column_name column_type;
Изменим тип данных столбца supplier_name в varchar2(100), а также запретим запись null-значений:
ALTER TABLE supplier MODIFY supplier_name varchar2(100) not null;
Синтаксис оператора ALTER TABLE для изменения нескольких столбцов в существующей таблице:
ALTER TABLE table_name
MODIFY ( column_1 column_type,
column_2 |
column_type, |
… |
column_type ); |
column_n |
Изменим столбцы supplier_name и city:
ALTER TABLE supplier MODIFY (supplier_name varchar2(100) not null, city varchar2(75) );
Удаление столбца(-ов) в таблице
Синтаксис оператора ALTER TABLE для удаления одного столбца в существующей таблице:
ALTER TABLE table_name DROP COLUMN column_name;
Удалим столбец supplier_name в таблице supplier:
ALTER TABLE supplier DROP COLUMN supplier_name;
Переименование столбца(-ов) в таблице
Синтаксис оператора ALTER TABLE для переименовывания одного столбца в существующей таблице:
ALTER TABLE table_name RENAME COLUMN old_name to new_name;
140