Файл: Тема концепция управления данными в современных информационных системах Цель лекции.docx
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 24.11.2023
Просмотров: 236
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Этот способ позволяет работать с таблицами, которые имеют большое количество полей, содержащих данные, не нужные в данный момент пользователю.
Несмотря на то, что поля таблицы, по определению, упорядочены, это совсем не означает, что их вывод должен быть только в том же порядке. Конечно, звездочка (*) покажет все поля в их естественном порядке, но, если указать поля отдельно, можно получить их в требуемой последовательности.
Например, запрос
SELECT SFAM, SNUM, STIP FROM STUDENTS;
будет производить в новой последовательности вывод, показанный ниже:
SFAM | SNUM | STIP |
Поляков | 3412 | 25.50 |
Огарева | 3413 | 17.00 |
Гриценко | 3414 | 0.00 |
Котенко | 3415 | 0.00 |
Нагорный | 3416 | 25.50 |
При работе с данными очень часто возникает потребность в удалении избыточных данных. Это реализуется с использованием DISTINCT - аргумент, который обеспечивает возможность устранять повторяющиеся значения из предложения SELECT.
Предположим, что необходимо узнать, какие студенты в настоящее время сдавали учебные предметы, причем не требуется уточнение полученной оценки и сдаваемого предмета. Запрос
SELECT SNUM FROM USP;
предоставит следующий вывод, однако в нем есть записи - дубликаты:
SNUM
3412 3413 3414 3412 3416
Для получения списка результатов без дубликатов в данном случае целесообразно воспользоваться следующим:
SELECT DISTINCT SNUM FROM USP;
в результате чего будет получено: SNUM
3412 3413 3414 3416
Другими словами, DISTINCT просматривает значения, которые были выведены ранее, и не дает им дублироваться в списке. Это - полезный способ избежать избыточности данных, однако стоит внимательно следить за его применением, т.к. можно скрыть некоторую нужную информацию. Например, если в таблице студентов появятся однофамильцы, то использование DISTINCT может привести к тому, что о существовании однофамильцев пользователь знать не будет.
Следуетиметь в виду, что DISTINCT может указываться только один раз в данном предложении SELECT. Если предложение выбирает многочисленные поля, DISTINCT опускает записи, где все выбранные поля идентичны. Если вместо DISTINCT указать ALL, то это будет иметь противоположный эффект и дублирование строк вывода сохранится.
ТЕМА 8. Язык SQL: команды языка управления данными
Цель лекции: изучить команды языка управления данными
Ключевые слова: привилегия, роль, полномочия, объект, системная привилегия, объектная привилегия, команда, синтаксис, пользователь, атрибут, параметр, отмена, передача, назначение, пароль.
План лекции
1. Подмножество языка DСL. Понятие привилегии. Типы привилегий
2. Выдача и изъятие привилегий при помощи GRANT и REVOKE
3. Использование ролей
1. Типы привилегий.
Каждый пользователь в базе данных Oracle имеет множество привилегий. Привилегии – это те действия, которые может выполнять пользователь (вход в систему – минимальная привилегия). Привилегии могут меняться с течением времени: новые привилегии могут добавляться, старые – отменяться. Существует несколько типов привилегий, соответствующих определенным типам операций.
Объектная привилегия (object privileges) – означает, что пользователь имеет привилегию выполнить данную команду только для определенного объекта базы данных. Привилегии должны различаться для различных объектов. Объектные привилегии связаны как с пользователями, так и с таблицами. Привилегия дается отдельному пользователю для отдельной таблицы либо для представления. Следует помнить, что пользователь, создавший таблицу, является ее владельцем. Это означает, что пользователь имеет все привилегии на таблицу и может назначать привилегии для работы с ней для других пользователей. Пользователь может назначить следующие объектные привилегии:
SELECT | пользователь с этой привилегией может выполнять запросы для таблицы, представления, последовательности |
INSERT | пользователь с этой привилегией имеет право добавлять строки в таблицу или обновляемое представление |
UPDATE | пользователь с этой привилегией может изменять существующие значения в строках таблицы или обновляемого представления. Привилегия ограничивается множеством столбцов таблицы |
DELETE | пользователь с этой привилегией может удалить строки из таблицы или обновляемого представления |
ALTER | Позволяет изменять только структуру таблицы или последовательности, привилегии Alter на все другие объекты базы данных считаются системными |
INDEX | Позволяет создавать индекс для ранее описанной таблицы |
EXECUTE | Позволяет выполнять хранимую процедуру или функцию |
REFERENCES | Пользователь с этой привилегией может определить внешний ключ, который использует один или несколько столбцов таблицы в качестве родительского ключа. Можно ограничить привилегию указанием столбцов. |
Привилегии, которые не определяются в терминах отдельных объектов, а применяются к целым классам объектов, называют системными привилегиями (system privileges) или авторским правом на базу данных (database authorities). Системные привилегии включают в себя право создавать объекты базы данных. Обычно принято различать три типа базовых систем привилегий, которые называют:
Тип | Описание | Перечень системных привилегий, назначаемых с помощью базового типа |
CONNECT | Предусматривает право входить в систему и создавать представления и синонимы (синоним – альтернативное имя таблицы), если речь идет об объектных привилегиях. Пользователь может работать с объектами, к которым он имеет привилегии по доступу | CREATE SESSION |
RESOURCE | Предоставляет право создавать таблицы и индексы | CREATE CLUSTER CREATE DATABASE LINK CREATE PROCEDURE CREATE ROLLBACK SEGMENT CREATE SEQUENCE CREATE SYNONYM CREATE TABLE CREATE TABLESPACE CREATE VIEW |
DBA | (Database Administrator) – разрешает пользователю выполнять действия администратора базы данных, т.е. распоряжаться ею как своей собственной. Как правило, эту привилегию имеет пользователь (один или несколько) с функцией администрирования базы данных. | AUDIT SYSTEM CREATE PUBLIC DATABASE LINK CREATE PUBLIC SYNONYM CREATE ROLE CREATE USER |
2.Команды управления данными предназначены для того, чтобы управлять доступом пользователей к базе данных. Команды управления данными включают в себя применяемые для предоставления и отмены полномочий команды GRANT и REVOKE, а также команду SET ROLE, которая разрешает или запрещает роли для текущего сеанса.
Команда GRANT
Назначает системные привилегии, роли и объектные привилегии пользователям и ролям.
Условия:
Чтобы назначить системную привилегию, необходимо либо иметь эту привилегию, причем она должна быть назначена с опцией WITH ADMIN OPTION, либо иметь системную привилегию GRANT ANY PRIVILEGE. Чтобы назначить роль, необходимо либо иметь эту роль, причем она должна быть назначена с опцией WITH ADMIN OPTION, либо иметь системную привилегию GRANT ANY ROLE.
Чтобы назначить привилегию на объект, необходимо либо иметь этот объект в своей схеме, либо иметь эту привилегию, причем она должна быть назначена с опцией GRANT OPTION.
Синтаксис (системная привилегия):
Ключевые слова и параметры:
system_priv — назначаемая системная привилегия
user — пользователь
role — назначаемая роль
PUBLIC — привилегия или роль передается всем пользователям
WITH ADMIN OPTION — если предоставлены системные полномочия или роли, то параметр позволяет пользователю передать полномочие или роль другим пользователям или ролям.
Синтаксис (объектная привилегия):
Ключевые слова и параметры:
object_priv — назначаемая объектная привилегия
column - специфицирует столбец таблицы или представления, по которому назначаются привилегии. Можно специфицировать столбцы только при назначении привилегии INSERT, REFERENCES или UPDATE. Если не указаны столбцы, то привилегия назначается по всем столбцам таблицы или представления
ON - идентифицирует объект, по которому назначаются привилегии. Если не указано имя схемы (schema), то считается, что объект находится в схеме того пользователя, который назначает привилегии
user — пользователь
role — назначаемая роль
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;
Пример 8. Владелец роли MY_ROLE хочет предоставить право на использование данной роли пользователю P2:
GRANT my_role ТО Р2;
Команда REVOKE
Отзывает системные привилегии, роли и объектные привилегии от пользователей и ролей. Ключевое слово ALL позволяет отменить все объектные привилегии.
Команда REVOKE может отзывать лишь те привилегии и роли, которые были назначены непосредственно командой GRANT. Команда REVOKE не может выполнять следующие операции:
-
отзывать привилегии или роли, которые не были назначены "отзываемому"; -
отзывать роли, которые были назначены через операционную систему; -
отзывать привилегии или роли, которые были назначены "отзываемому" через роли.
Условия:
Пользователь должен иметь все отзываемые привилегии и роли, причем они должны быть назначены с опцией ADMIN OPTION. Кроме того, можно отозвать любую роль, если имеете системную привилегию GRANT ANY ROLE.
Синтаксис (отзыв системной привилегии):
Ключевые слова и параметры:
system_priv - отзываемая системная привилегия
role - отзываемая роль
user – пользователь
PUBLIC - отзывает системные привилегии или роли от всех пользователей
FROM - идентифицирует пользователей или роли, от которых отзываются системные привилегии и роли.
Синтаксис (отзыв объектной привилегии):
Ключевые слова и параметры:
object_priv - отзываемая объектная (ые) привилегия (и)
role - отзываемая роль
user – пользователь
ALL PRIVILEGES - отзывает все привилегии на объект, которые были назначены пользователю или роли
ON - идентифицирует объект, для которого отзываются привилегии. Если не указано имя схемы (schema) объекта, то ORACLE считает, что объект находится в схеме того пользователя, который отзывает привилегии