Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

699

.pdf
Скачиваний:
4
Добавлен:
15.11.2022
Размер:
3.63 Mб
Скачать

Для изменения прав кроме оператора 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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]