Студопедия

КАТЕГОРИИ:

АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника


Языки запросов. Языки описания данных. Языки манипулирования данными. Особенности языковых средств управления и обеспечения безопасности данных в реляционных СУБД.




Внутренний язык СУБД для работы с данными состоит из двух частей:

- язык определения (описания) данных (DataDefinitionLanguage – DDL) – используется для определения схемы базы данных;

- язык управления данными (DataManipulationLanguage – DML) – используется для чтения и обновления данных.

Язык определения (описания) данных

Язык DDL – это декларативный язык, который позволяет описать и поименовать сущности, необходимые для работы некоторого приложения, а также связи между различными сущностями. Язык нельзя использовать для управления данными.

Результатом компиляции DDL-операторов является набор таблиц, хранимый в особых файлах, называемых системным каталогом (словарь данных, каталог данных).

К языку DDL относятся операторы CREATE, ALTER и DROP над объектами метаданных (также называемые объектами схемы или элементами схемы). Ниже представлен пример использования оператора CREATE.

CREATE TABLE PERSON (PERSON_ID BIGINT, FIRST_NAME VARCHAR(50), LAST_NAME VARCHAR(50)) – создаётся таблица PERSON, состоящая из трёх столбцов: PERSON_ID, FIRST_NAME и LAST_NAME.

 

Язык управления данными

Язык DML – это язык, содержащий набор операторов для поддержки основных операций манипулирования содержащимися в базе данными.

К операциям управления данными относятся следующие:

§ вставка в базу данных новых сведений (оператор INSERT языка SQL);

§ модификация сведений, хранимых в базе данных (оператор UPDATE языка SQL);

§ извлечение сведений, содержащихся в базе данных (оператор SELECT языка SQL);

§ удаление сведений из базы данных (оператор DELETE языка SQL).

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

Следует различать два типа языков DML:

§ процедурный;

§ непроцедурный.

Процедурный язык DML – это язык, который позволяет сообщить системе о том, какие данные необходимы, и точно указать, как их можно извлечь.

Программист должен определить все операции доступа к данным посредством вызова соответствующих процедур. Обычно процедурный язык DML позволяет извлечь запись, обработать ее и, в зависимости от полученных результатов, извлечь другую запись, которая должны быть подвергнута аналогичной обработке, и т. д. Процедурный язык обычно используется для написания хранимых процедур и триггеров. Он состоит из всех операторов DML (select, update, insert, delete) с добавлением множества процедурных расширений, таких как условные операторы и операторы для организации циклов.

Непроцедурный язык DML– это язык, который позволяет указать лишь то, какие данные требуются, но не то, как их следует извлекать.

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

Рассмотрим базовый синтаксис операторов непроцедурного DML.

1) Оператор SELECT

SELECT[FIRST (m)] [SKIP (n)] [[ALL] | DISTINCT]

<список-столбцов> [, [имя-столбца] | выражение | константа]

AS имя-алиаса]

FROM <таблица-или-процедура-или-просмотр>

[WHERE <условия-поиска>]

[GROUP BY <список-группируемых-столбцов>]

[HAVING <предикат-группирования>]

[ORDER BY <список-столбцов>]

Обязательными элементами в записи оператора являются список выборки и раздел FROM.

Пример: SELECT LastName,FirstName FROM Persons

2) Оператор INSERT

Существуют два варианта оператора INSERT:

а) вставка одной новой строки

INSERT INTO таблица [столбец, …]VALUES (значение, …)

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

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

б) копирование множества строк из одной таблицы в другую

INSERT INTO таблица [столбец, …] предложение_select

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

Перечень столбцов интерпретируется аналогично первому варианту INSERT: предложения_select должно соответствовать по структуре и порядку следования списку столбцов, а если список столбцов отсутствует – то структуре таблицы.

Пример: INSERT INTO Persons (P_Id, LastName, FirstName) VALUES (5, 'Tjessem', 'Jakob')

3) Оператор UPDATE

UPDATE имя-таблицы | имя-просмотра SET имя-столбца = значение [,имя-столбца = значение ...] [WHERE <условие-поиска> | WHERE CURRENT OF имя-курсора]

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

Пример: UPDATE PersonsSET Address='Nissestien 67', City='Sandnes'WHERE LastName = 'Tjessem'

4) Оператор DELETE

DELETE FROM имя-таблицы [WHERE <предикаты-поиска> | WHERE CURRENT OF имя-курсора]

Если не указано предложение WHERE, то будут удалены все строки таблицы.

Пример: DELETE FROM PersonsWHERE LastName='Tjessem' AND FirstName='Jakob'

Язык запросов

Запрос представляет собой специальным образом описанное требование, определяющее состав производимых над БД операций по выборке, удалению или модификации хранимых данных.

Для подготовки запросов с помощью различных СУБД чаще всего используются два основных языка описания запросов:

§ язык QBE (QueryByExample) — язык запросов по образцу;

§ SQL (StructuredQueryLanguage) — структурированный язык запросов.

По возможностям манипулирования данными при описании запросов указанные языки практически эквивалентны. Главное отличие между ними, заключается в способе формирования запросов:

§ язык QBE предполагает ручное или визуальное формирование запроса,

§ SQL предполагает программирование запроса.

Теоретической основой языка QBE является реляционное исчисление с переменными доменами.

Структурированный язык запросов SQL основан на реляционном исчислении с переменнымикортежами.

Рассмотрим базовый синтаксис операторов языка DML

Языковые средства управления и обеспечения безопасности данных в реляционных СУБД

Администратору СУБД необходим специальный инструментарий:

§ определения конкретных назначений или установления правил;

§ ограничения доступа;

§ управления системой разграничения доступа;

§ управления системой коллективной обработки данных.

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

В реляционных СУБД такой язык должен являться соответственно составной частью языка SQL.

В перечне базовых инструкций языка SQL представлены инструкции GRANT и REVOKE, предоставляющие или отменяющие привилегии пользователям. Структура инструкции GRANT и REVOKE выглядит следующим образом:

GRANT<список привилегий>ON<Имя Объекта>ТО<Имена Пользователей>[WITHGRANTOPTION];

REVOKE<список привилегий>ON<Имя Объекта>FROM<Имена Пользователей>;

Список привилегий составляют разрешенные инструкции (операции) над объектом:

§ SELECT - чтение данных;

§ INSERT- создание новых строк;

§ UPDATE- изменение существующих данных;

§ DELETE- удаление строк;

§ REFERENCES- ссылка на первичный ключ из внешнего ключа. Это всегда необходимо делать при предоставлении привилегий к таблицам, содержащим внешние ключи;

§ ALL- выборка, добавление, изменение, удаление и ссылка на первичный ключ из внешнего ключа;

§ EXECUTE- выполнение хранимой процедуры или вызов ее с использованием SELECT. Эта привилегия никогда не предоставляется как часть привилегии ALL чтение данных;

§ ROLE- предоставляет все привилегии, назначенные роли. Если роль существует и имеет назначенные ей привилегии, она становится привилегией, которая может явно назначаться пользователям. Роль никогда не предоставляется как часть привилегии ALL.

Объектом может быть таблица, просмотр, хранимая процедура или роль, хотя не все привилегии применимы ко всем типам объектов. Например, привилегия UPDATE неприменима к процедуре, а привилегия EXECUTE - к таблице или просмотру.

Пользователи:

1. Роли. Когда роли назначены привилегии, она становится пользователем.

2. Просмотры. Просмотрам нужны полномочия для доступа к таблицам, другим просмотрам и к хранимым процедурам.

3. Процедуры и триггеры. Хранимой процедуре, которая обращается к таблицам и просмотрам и выполняет другие процедуры, нужны полномочия к этим объектам. Триггеру, который выполняет процедуры, нужны к ним полномочия, а также к любым таблицам и просмотрам, к которым он обращается, отличным от той таблицы, которой он принадлежит.

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

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

Роль создается в базе данных и доступна только в этой базе данных.

CREATE ROLE<имяроли>;

Роль представляет своего рода контейнер для набора привилегий.

GRANT<привилегии>ТО<имя роли>;

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

GRANT<имя роли>ТО<имя пользователя>[WITH ADMIN OPTION];

ДирективаWITH ADMIN OPTION позволяет получающему роль предоставлять эту роль другим пользователям, а также отменять ее.

Примеры.

В следующем операторе процедура Count_Chickens получает полные права к таблице Proj_Dept_Budget:

GRANTALLON Proj_Dept_Budget TOPROCEDURE Count_Chickens;

В следующем примере оператор GRANTEXECUTE предоставляет привилегию к процедуре Calculate_Beans двум обычным пользователям Flatfoot и Kilroy и двум хранимым процедурам, чьи владельцы не являются владельцами Calculate_Beans:

GRANTEXECUTEONPROCEDURE Calculate_Beans TO Flatfoot, Kilroy, PROCEDURE Do_Stuff, Abandon_Old;

В следующем операторе все пользователи будут иметь полномочия на изменение для таблицы Customer, однако они смогут изменять только столбцы Contact_First, Contact_Last и Phone_No:

GRANTUPDATE (Contact_First, Contact_Last, Phone_No) ON Customer TOPUBLIC;


 


Поделиться:

Дата добавления: 2015-04-18; просмотров: 162; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.01 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты