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

ОтветыБД

.pdf
Скачиваний:
54
Добавлен:
14.05.2015
Размер:
1.32 Mб
Скачать

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

К настоящему времени разработаны эффективные математические алгоритмы поиска данных в упорядоченной последовательности. Одним из таких алгоритмов является метод половинного деления. В простейшем варианте для поиска любого значения берётся начальное приближение в середине упорядоченной последовательности значений, и хранимая в ней величина сравнивается с искомым значением. Если искомая величина меньше выбранного значения, то дальнейшему делению пополам подвергается первая половина списка, иначе – вторая. Поиск заканчивается, как только достигнуто совпадение искомой величины и анализируемого значения.

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

Создание индекса:

CREATE [UNIQUE] INDEX <имя_индекса> ON <имя_таблицы> (<имя_столбца>,...)

Пример: CREATE INDEX au_index ON authors (au_id); CREATE INDEX title_index ON titles (title_id);

Удаление индекса:

DROP INDEX <имя_индекса>

Операторы манипулирования данными -- операторы добавления, изменения и удаления записей. INSERT – добавление информации к таблице

INSERT INTO <имя_таблицы> [ (<имя_столбца>,...) ] VALUES { 1. [ (<значение>,..) ]

2.|[ < SELECT -запрос> ]

3.|[ DEFAULT VALUES ] }

Синтаксис строки 1 позволяет ввести только одну строку в таблицу. Если вводятся все поля записи, то список столбцов можно не задавать. Вместо значения поля можно указывать DEFAULT . Оператор ввода данных с помощью синтаксиса строки 2 позволяет ввести сразу множество строк, если их можно выбрать из некоторой другой таблицы. При этом порядок следования столбцов и тип данных в столбцах должных совпадать. Строка 3 используется, если создаётся запись с значениями по умолчанию.

Примеры: INSERT INTO publishers VALUES (16," Microsoft Press "," http :// www . microsoft . com "); INSERT INTO Authors (au_id, au_lname, au_fname) VALUES (666,'Бездомный','Иван')

INSERT INTO Addresses (name, phone, address) VALUES ( SELECT name, phone, address FROM tmp_table)

UPDATE – обновление информации в таблице

UPDATE <имя_таблицы> SET <имя_столбца> = <значение>,...

[ FROM {<имя таблицы> | < SELECT -запрос>},…] [ WHERE <условие>]

За один вызов UPDATE можно изменить данные в одном или нескольких столбцах для одной или множества записей только в одной таблице. С ключевого слова SET начинается блок, в котором определяется список изменяемых столбцов. Синтаксис <значение>:=={<константа> | <переменная> | <выражение> | DEFAULT | NULL }. Изменению подвергаются все строки, удовлетворяющие критериям ограничения области действия запроса UPDATE , которые задаются с помощью раздела WHERE .

UPDATE Authors SET address = “ Садовая 13 А , кв . 50” WHERE au_lname = ” Берлиоз ” AND au_fname = ”

Михаил ”

UPDATE publishers SET url=" сайт неизвестен " WHERE url IS NULL

Если в инструкции UPDATE будет пропущен раздел WHERE , то заданные в разделе SET изменения будут сделаны в каждой строке таблицы. Имеет смысл для проверки сначала выполнить инструкцию типа SELECT Count (*) с тем же критерием WHERE , чтобы узнать, сколько строк будет изменено с помощью UPDATE . При составлении выражения можно ссылаться на любые столбцы таблицы, включая изменяемые.

UPDATE Titles SET price=price+10

Если при изменении данных в таблице необходимо учесть состояние данных в других таблицах, то они указываются в разделе FROM . После того как источник данных указан в разделе FROM , в разделах WHERE и SET можно ссылаться на столбцы этого источника данных.

Пример: в таблице subjects ( subject , fo , name ) в поле fo указан номер федерального округа, к которому принадлежит данный субъект федерации. В частично заполненной таблице peoples ( xsubject , xfo , value ) осталось незаполненным поле xfo с тем же смыслом. Как восстановить недостающую информацию ?

UPDATE Peoples SET xfo = fo FROM subjects WHERE xsubject=subject

DELETE – удаление информации из таблицы

DELETE FROM <имя_таблицы> [ WHERE <условие> ]

С помощью DELETE можно удалить как отдельные строки, так и множество строк. Без WHERE будут удалены все строки таблицы. В разделе WHERE также можно использовать вложенные подзапросы.

DELETE FROM publishers WHERE publisher = "Microsoft Press"

Удалить из таблицы students студентов, имеющих две и более двойки по результатам экзаменов (если это позволяют ограничения целостности):

DELETE FROM students WHERE id_student IN (

SELECT id_student FROM testing WHERE result=2 GROUP BY id_student HAVING count(*)>2 ).

2.5. Элементы Microsoft SQL Server: представления, хранимые процедуры, пользовательские функции, ограничения, триггеры – примеры создания, использования и удаления средствами языка. Использование временных таблиц.

Представления (Views):

Представление для пользователей базы данных выглядит как таблица, однако на самом деле его содержимое формируется запросом. Физически данные, виртуально принадлежащие представлению, находятся в таблицах, к которым обращается этот запрос. Однако для клиентов MS SQL Server запросы на выборку данных из представления выполняются как для полноценной таблицы. Представление может быть использовано: (1) для защиты конфиденциальной информации; (2) для упрощения доступа к информации и (3) сокращения времени доступа. Для таких целей представление может быть проиндексировано.

Достоинства: представление может выбирать данные (1) из таблиц текущей и любой другой базы данных, (2) из представлений текущей и любой другой базы данных (в том числе расположенные на разных серверах). Недостатки: (1) представление не может ссылаться на временные таблицы, и невозможно создать временные представления; (2) в запросе, определяющим представление, нельзя использовать разделы ORDER BY и INTO;

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

Команды TSQL, используемые для работы с представлениями:

CREATE VIEW <имя представления> AS <SELECT-запрос> – создание представления.

CREATE VIEW My_view AS SELECT au_lname, au_fname, address FROM authors WHERE state=’CA’

ALTER VIEW <имя представления> AS <SELECT-запрос> – изменение представления (может потребоваться, например, в случае, если нежелательно изменять права доступа к уже существовавшему представлению.

DROP VIEW <имя представления>, …– удаление представлений (одного или нескольких)

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

Хранимые процедуры (Stored Procedures): являются основным механизмом, с помощью которого регулируются вся работа с базами данных на сервере. Хранимая процедура – это именованный набор команд TSQL , хранящийся непосредственно на сервере и представляющий собой самостоятельный объект базы данных.

В состав MS SQL Server 2000 входит большое количество встроенных системных хранимых процедур. Все они имеют префикс sp _ и охватывают практически все аспекты управления и конфигурирования сервера, позволяя изменять значения в системных таблицах пользовательских и системных баз данных. Хранимые процедуры существуют независимо от таблиц или каких-либо других объектов баз данных. Хранимая процедура может быть вызвана клиентской программой, другой хранимой процедурой или триггером. Когда хранимая процедура выполняется первый раз, сервер создаёт план исполнения процедуры, выполняет её оптимизацию и компиляцию. В дальнейшем при повторном вызове процедуры используется уже сгенерированный план, что позволяет оптимизировать её время исполнения. Хранение процедур в том же месте, где они исполняются, позволяет уменьшить объём передаваемых по сети данных и повышает общую производительность системы. Обычно приложение-клиент в целях безопасности имеет доступ к данным только через аппарат хранимых процедур.

Создание хранимой процедуры: CREATE PROC [ EDURE ] <имя> [;<число>] [{@<переменная-параметр> <тип данных>} [ VARYING ] [= <значение по умолчанию>] [ OUTPUT ] ,…] [ WITH { RECOMPILE | ENCRIPTION

}] AS <набор выполняемых SQL -инструкций> [ RETURN ] Здесь <число> – возможность указать идентификационный номер хранимой процедуры; OUTPUT – наличие этого ключевого слова будет означать, что соответствующий параметр предназначается для возвращения данных из хранимой процедуры (при этом параметр может быть использован и для передачи данных в хранимую процедуру); VARYING – ключевое слово, которое используется совместно с параметром OUTPUT , имеющим тип данных Cursor , которое определяет, что в качестве выходного параметра будет представлено результирующее множество; RECOMPILE

– план выполнения процедуры создаётся при каждом её вызове. ENCRIPTION – выполняется кодирование хранимой процедуры при записи в системные таблицы. Для возврата из хранимой процедуры можно использовать команду RETURN . Запуск хранимой процедуры осуществляется указанием её имени и, если необходимо, со списком значений параметров. При вызове процедуры из тела другой процедуры используется следующий синтаксис: EXEC [ UTE ] <имя процедуры> {[[@<имя параметра> =] <значение> | @<имя переменной> [ OUTPUT ] | DEFAULT ],…}.

Пример пакета : -- описываем хранимую процедуру

CREATE PROCEDURE MyProc

@lastname char(64), @firstname char(64) AS SELECT a.au_lname, a.au_fname, t.title FROM authors a, titles t, titleauthors ta

WHERE a.au_lname = @lastname AND a.au_fname = @firstname AND a.au_id = ta.au_id AND t.title_id = ta.title_id

--создаём хранимую процедуру

GO

--вызываем только что созданную хранимую процедуру MyProg 'Иван','Бездомный'

Выполнить созданную процедуру может только владелец базы данных, он же может изменить разрешение доступа и позволить другим пользователям работать с этой процедурой. Уровень вложенности хранимых процедур (вызовы одна из другой) – 32. Процедура как результат своей работы может возвратить (1) выборку из таблиц, (2) значения параметров, заданных как OUTPUT, (3) код завершения, который может генерироваться командой RETURN n . Просмотр кода процедуры выполняется с помощью системной процедуры sp _ helptext , а контрольную информацию о ней можно вывести с помощью процедуры sp _ help <имя процедуры>. Удаление хранимой процедуры осуществляется командой DROP PROCEDURE <имя процедуры>, … Изменение имени хранимой процедуры осуществляется системной процедурой sp _ rename .

Для модификации хранимой процедуры используется команда ALTER PROCEDURE <имя процедуры>. Фактически эта команда аналогична CREATE PROCEDURE , только сделанные ранее административные разрешения сохраняются. Для редактирования хранимой процедуры лучше использовать средства, предоставляемые центром управления MS Access Enterprise Manager .

Триггеры (Triggers): Триггером в SQL Server называется специальная хранимая процедура, привязанная к конкретной таблице (представлению) и запускаемая сервером автоматически при обращении к этой таблице. Когда пользователь, например, успешно изменил данные в таблице, сервер автоматически запускает триггер, причём если произойдёт откат триггера, то это повлечёт и отмену пользовательских изменений данных.

Триггеры могут использоваться (1) для нестандартного контроля целостности данных, (2) для вычисления значений в полях таблицы по значениям других полей, (3) для ограничения действий различных групп пользователей. Существует три типа триггеров – соответственно для команд INSERT , UPDATE и DELETE . Внутри триггера допускается использование практически любых команд TSQL , включая вызовы хранимых процедур и обращение к функциям пользователя. Пример: триггер для таблицы authors , который будет запрещать вставку новых строк в таблицу, выдавая при этом сообщение «Вставка строк запрещена».

CREATE TRIGGER auth_tr ON authors FOR INSERT AS

PRINT ” Вставка строк запрещена ”

ROLLBACK TRAN

Пользовательские функции (User - defined functions): появились только в SQL Server 2000 и представляют собой развитие аппарата хранимых процедур, с возможностью их вызова непосредственно из выражений (как это принято для встроенных функций) и способных возвращать результат (в том числе как множество записей). В теле функций разрешается объявление локальных переменных, использование циклов, ветвлений и любых других программных конструкций, разрешается вызов других функций и хранимых процедур.

Функции не могут возвращать данные непосредственно клиенту, как это может делать хранимая процедура. То есть, не разрешается использование в теле функции команды PRINT , а также команды SELECT для непосредственного возвращения данных.

Пример создания и вызова функции вида inline (всегда возвращающей RecordSet ):

CREATE FUNCTION MyFunc ( @State char(2) ) RETURNS TABLE AS

RETURN SELECT au_id, au_lname, au_fname FROM authors

WHERE state = @state GO

SELECT * FROM MyFunc('CA') ORDER BY au_lname, au_fname

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

Пример: создание правила, выполняющего проверку 15 <= x <= 75 :

CREATE RULE MyRule AS @exp BETWEEN 15 AND 75 -- свяжем это правило со столбцом price таблицы titles sp_bindrule MyRule 'titles.price'

Теперь все добавляемые или изменяемые строки будут проверяться на указанное условие в данном столбце. Для освобождения столбца от правила используется хранимая процедура sp _ unbindrule <имя объекта> . Для удаления правила используется команда DROP RULE . Перед удалением правило должно быть освобождено от всех столбцов.

Умолчания (Default): Умолчание – механизм, задающий значение для столбца в случае, если оно не было определено при вставке строки. В качестве значения по умолчанию может быть указана константа или значение, возвращаемое ф-ей. Подобно правилам, умолчания явл-ся самостоят-ми объектами БД.

Пример создания умолчания и связывания его со столбцом:

CREATE DEFAULT MyDef AS ' неизвестно ' sp_bindefault MyDef 'titles.title'

Тип данных значения по умолчанию должен совп. с типом данных столбца или должно быть возможным неявное преобразование значение к типу данных столбца. Для освобождения столбца от умолчания исп-ся хранимая процедура sp _ unbindefault <имя объекта> . Для удал. умолч. исп-ся команда DROP DEFAULT .

Временные таблицы (Temporary tables): бывают локальные и глобальные. Названия локальных таблиц следует начинать с символа #. Такие таблицы существуют до тех пор, пока действует соединение с SQL Server , в котором эти таблицы были созданы, и автоматически уничтожаются при закрытии соединения. Локальные таблицы видимы только для соединения, создавшего их. Названия глобальных таблиц начинаются с символов ##. Существуют эти таблицы так же, как и локальные, однако во время своего существования являются видимыми и из любого другого соединения с сервером. Имя глобальной таблицы должно быть уникальным для сервера.

Ограничения целостности (Constraints):

Ограничения являются интенсивно развиваемой разработкой SQL Server и предназначены заменить правила и умолчания. Ограничения могут быть определены как на уровне столбца, так и на уровне таблицы в целом. Частично ограничения целостности были рассмотрены ранее для команд CREATE TABLE и ALTER TABLE. В этих командах после (необязательного) ключевого слова CONSTRAINT для отдельного столбца или таблицы в целом могут идти следующие типы ограничений:

NULL | NOT NULL

PRIMARY KEY

UNIQUE

FOREIGN KEY … REFERENCES

ON DELETE

ON UPDATE

CHECK <логическое выражение> – контроль вводимых значений каким-либо логическим выражением. Пример:

CREATE TABLE publichers (

pub_id int NOT NULL PRIMARY KEY,

pub_name varchar(40) DEFAULT (’неизвестно’) CHECK (pub_id LIKE ’99[0-9][0-9]’)

)

2.6.Курсоры в Microsoft SQL Server: примеры создания, использования и удаления.

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

•курсоры позволяют работать со строками таблицы посредством указания их порядкового номера в наборе данных;

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

Жизненный цикл курсора :

Создание курсора : DECLARE <имя курсора> [ INSENSITIVE ] [ SCROLL ] CURSOR FOR < SELECT - оператор> FOR { READ ONLY | UPDATE }

Здесь ключевое слово INSENSITIVE означает, что курсор будет статическим (слепок с данных), в то время как по умолчанию курсор создаётся динамическим (выборка осуществляется каждый раз при обращении к строке). Ключевое слово SCROLL означает, что курсор можно прокручивать в любом направлении, иначе курсор создаётся «последовательным».

Открытие курсора : OPEN [ GLOBAL ] <имя курсора>. Курсор, указанный как GLOBAL , не удаляется автома-тически при завершении работы той процедуры или пакета, из которых он был вызван.

Считывание данных : FETCH [[ NEXT | PRIOR | FIRST | LAST | ABSOLUTE n | RELATIVE n ] FROM ] [ GLOBAL ] <имя курсора> [ INTO @ variable _ name , …]. SQL Server 2000 позволяет считывать из курсора всего одну строку . Ключевое слово FIRST – возвратить первую строку курсора; LAST – последнюю строку курсора; NEXT – следующую строку за текущей, возвращённая строка становится текущей; PRIOR – предыдущую перед текущей; ABSOLUTE n – возвращает строку по её абсолютному порядковому номеру в курсоре; RELATIVE – через n строк после текущей. Данные столбцов будут сохраняться в каждую из указанных переменных в порядке их перечисления.

Изменение данных : выполняет команда UPDATE с синтаксисом, предназначенным для работы с курсорами. Удаление данных : выполняет команда DELETE с синтаксисом, предназначенным для работы с курсорами.

Закрытие курсора : CLOSE [ GLOBAL ] <имя курсора>

Освобождение курсора : DEALLOCATE [ GLOBAL ] <имя курсора>

Пример использования курсора : DECLARE fo_curs CURSOR STATIC FOR

SELECT name_rus from fo ORDER BY name_rus DECLARE @name varchar(50)

OPEN fo_curs

FETCH FIRST FROM fo_curs INTO @name WHILE @@FETCH_STATUS=0

BEGIN PRINT @name

FETCH NEXT FROM fo_curs INTO @name END

CLOSE fo_curs DEALLOCATE fo_curs

2.7. Обеспечение безопасности и сохранности данных в Microsoft SQL Server. Управление базами данных. Роли. Назначение прав пользователям (GRANT, DENY, REVOKE). Методы и технологии защиты данных в SQL Server.

Система безопасности и администрирование SQL Server . .

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

Управление базами данных

Для создания базы данных средствами TSQL используется команда CREATE DATABASE, однако обычно для этой цели используются возможности SQL Server Management Studio. В SQL сервер определено достаточно много операций с базами данных: увеличение (уменьшение) размеров файлов, изменение конфигурации (команда ALTER), присоединение и отсоединение, передача прав владения, изменение имени, просмотр свойств и, наконец, удаление ( DROP DATABASE ).

Как и в большинстве серверов баз данных, в SQL Server существует пользователь, наделенный всеми административными полномочиями - это System Administrator или ‘sa'. После начальной установки сервера пароль sa пуст. Пользователь, создающий новую базу данных, автоматически становится её владельцем (‘dbo' – Data Base Owner). В момент создания базы определяется и пользователь 'guest'. Если учётная запись пользователя явно не отображается в пользователя конкретной базы данных, пользователю предоставляется неявный доступ с использованием гостевого имени guest. Обычно guest запрещают.

Пользователь, создавший объект в базе данных, автоматически становится его владельцем, и никто, включая dbo и sa , не могут использовать этот объект, пока владелец не назначит им права на него. Но чтобы пользователь мог создать объект, владелец БД должен сначала ему предоставить соответствующие права.

Роль позволяет объединить пользователей, выполняющих одинаковые функции, для упрощения администрирования. Роли бывают встроенные и пользовательские. Встроенные роли реализуются на уровне сервера и на уровне баз данных. Ниже приведена таблица встроенных ролей для базы данных:

Db_owner. Имеет все права в базе данных

Db_accessadmin. Может добавлять или удалять пользователей

Db_securityadmin. Управляет всеми разрешениями, объектами, ролями и пользователями

Db_ddladmin. Может выполнять все команды DDL, кроме GRANT, DENY, REVOKE Db_backupoperator. Может выполнять команды архивир. данных

Db_datareader. Может просматр. любые данные в любой таблице Db_datawriter. Может модифиц. любые данные в любой таблице Db_denydatareader. Запрещ. просматр. люб. данные в люб. таблиц Db_denydatawriter. Запрещ модифицир люб данные в люб таблиц

Назначение прав пользователям. Основой системы безопасности SQL Server являются (1) учётные записи

(accounts); (2) пользователи (users); (3) роли (roles); (4) группы (groups).

Когда пользователь подключается к SQL Server , действия, которые он может выполнять, определяются правами, выданными ему как пользователю и члену роли. Права выдаются администратором СУБД, владельцем базы данных или владельцем конкретного объекта БД. Права в БД можно разделить на три категории: (1) права на доступ к объектам баз данных; (2) права на выполнение команд TSQL ; (3) неявные права. Сервер позволяет передавать права владения от одного пользователя другому.

Для управления разрешениями пользователя на доступ к объектам базы данных используются следующие команды:

GRANT { ALL [PRIVILEGES] | < вид действия >,…}

{ON {<имя таблицы или представления>} [(<имя столбца>,…)] | ON {< имя хранимой процедуры >}

| ON {< имя пользовательской функции >}

}

TO { PUBLIC | <имя объекта системы безопасности>,…}

[WITH GRANT OPTION]

[ AS <имя группы> | <имя роли>]

назначение прав пользователям , где

ALL – пользователю предоставляются все возможные разрешения, иначе указать <вид действия> – права на доступные для пользователя действия, а именно: SELECT – на просмотр, для столбца таблицы и для таблицы (представления) INSERT – на добавление, для таблицы (представления) в целом

UPDATE – на изменение, для столбца таблицы и для таблицы (представления) DELETE – на удаление, для таблицы (представления) в целом

EXECUTE – на выполнение хранимых процедур

REFERENCES – возможность ссылаться на указанный объект (вводить в состав внешнего ключа).

<имя объекта системы безопасности> – учётные записи SQL Server , пользователи домена Windows; PUBLIC – для всех пользователей.

WITH GRANT OPTION – позволяет пользователю, которому сейчас предоставляются права, самому назначать права на доступ к объекту другим пользователям.

AS <имя группы> | <имя роли> – участие пользователя в роли, которой предоставлена возможность предоставлять права другим пользователям.

Примеры :

GRANT SELECT ON authors TO public

GRANT INSERT, UPDATE, DELETE ON authors TO Mary, John, Tom GO

GRANT SELECT ON Plan_Data TO Accounting WITH GRANT OPTION GRANT SELECT ON Plan_Data TO Jack AS Accounting

-- Джек не входит в роль Accounting , но кто-нибудь из этой роли может предоставить право

DENY { ALL [PRIVILEGES] | < вид действия >,…}

{ON {<имя таблицы или представления>} [(<имя столбца>,…)]

| ON {<имя хранимой процедуры>}

| ON {<имя пользовательской функции>}

}

TO { PUBLIC | <имя объекта системы безопасности>,…}

[CASCADE]

[AS < имя группы > | < имя роли >]

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

Пример (на запрещение выполнения команды TSQL ): DENY CREATE TABLE TO Jack CASCADE

Команда REVOKE используется для неявного отклонения доступ к объектам базы данных. Синтаксис аналогичен команде DENY. Неявное отклонение подобно запрещению доступа с тем отличием, что оно действует только на том уровне, на котором определено. Пример: пользователю Jack , который является участником роли GoodUsers , предоставлены права на доступ к таблице XFiles . Если при помощи REVOKE для роли GoodUsers отклоняются права на доступ к этой таблице, пользователь Jack всё равно может обращаться к этой таблице, поскольку права для него определены явно. Если же применить REVOKE персонально для него, он потеряет право на доступ к XFiles.

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

Технологии защиты данных в MS SQL Server

1.Механизм checkpoints – контрольных точек, которые генерируются через ~60 с для записи обновлённых страниц на диск (контрольная точка может быть поставлена принудительно командой CHECKPOINT ). 2.Встроенные и внешние механизмы проверки целостности базы данных (запускаются автоматически или, как утилита DBCC – Database Consistency Checker – вручную).

3.Физическое дублирование (если оно разрешено) файлов баз данных средствами операционной системы (включая механизм зеркальных жёстких дисков).

4.Резервирование баз данных и журналов транзакций – путём записи дампа базы данных на устройство резервирования (магнитную ленту или жёсткий диск).

5.Репликация – возможность дублирования информации путём её периодической (в некоторых случаях – синхронной) передачи с одного SQL сервера на другой.

6.Шифрование трафика между клиентом и сервером, а также шифрование кодов, использованных для работы с объектами БД (хранимых процедур, триггеров и др.)

2.8 СУБД Oracle – сравнение с другими сетевыми реляционными СУБД, состав, архитектура, типы данных, язык, примеры запросов. Язык SQL3 – способы работы с объектами в реляционных БД.

Попытки совместить средства манипулирования данными реляционной модели и способы описания внешнего мира объектно-ориентированной модели получили развитие в языке SQL-3.

1) Характеристики объекта определяется описанием строки таблицы. Поэтому вводится специальная возможность описания нового типа данных:

Create type Address ( number char (6), street char (30), aptno integer, city char (30), state char (2),

zip integer

);

На основе нового типа могут быть определены таблицы, например:

Create table Addresses of Address;

Новые типы допускается использовать и для определения столбцов (т.е. игнорируется требование атомарности атрибутов реляционной модели):

Сreate table People of new type Person ( name char (30),

address Address, birthdate date,

);

Наследование определяется с помощью фразы under.

Create type Employee under Person ( empno char(10),

dept ref(Department)

);

Здесь атрибут dept является ссылкой на объект, хранящийся в таблице Department. Т.е. в понятиях реляционной модели в этом столбце должен быть записан внешний ключ, указывающий на на одну из строк таблицы Department. На самом деле, в SQL-3 предполагается, что каждый объект имеет уникальный идентификатор - OID, именно он используется при создании ссылок на объекты.

Также в операторе CREATE TABLE можно определить и методы доступа к вновь созданным типам данных:

Create table People of new type Person (

name char(30), address Address, birthdate date

function age(:р ref(Person)) return date; begin

current_age:=:р.birthdate-current_date; return current_age;

end;

);

В этом примере задана функция age, которая вычисляет текущий возраст объекта типа Person, хранимого в таблице People. К данной функции можно обращаться из оператора SELECT.

Oracle8i совместим с минимальным уровнем ANSI/ISO (SQL92). Он поддерживает большинство возможностей, заложенных в более продвинутые уровни SQL92, и даже некоторые из SQL3, но зачастую эти возможности реализованы в нем по-своему. В Oracle создан свой язык для создания триггеров, хранимых процедур и просто скриптов (в Oracle их принято называть безымянными блоками). Этот язык получил название PL/SQL (Program Language SQL). Внешней процедурой в Oracle является подпрограмма, хранимая в DLL, или метод элемента библиотеки Java-класса.

В версии 8.0 были введены объектные типы данных. Такие типы данных можно применять при создании локальных и пакетных переменных, при объявлении колонок БД и при объявлении типа записи в таблицах БД. Причем в случае, когда объект олицетворяет всю запись целиком в качестве первичного ключа, используется так называемая объектная ссылка (REF). REF является вполне самостоятельным типом данных и может использоваться для ссылки на такую объектную запись из других таблиц. Объекты поддерживают только инкапсуляцию, но не поддерживают не наследования, не полиморфизма.

2.9 СУБД MySQL – сравнение с другими сетевыми реляционными СУБД, интерфейсы управления и администрирования, организация данных, типы данных, язык, примеры запросов.

MySQL – клиент-серверная система управления реляционными базами данных, которая содержит многопоточный SQL-сервер, обеспечивающий поддержку различных вычислительных машин баз данных, а также несколько различных клиентских программ и библиотек, средства администрирования и широкий спектр программных интерфейсов. Разработкой и сопровождением системы занимается компания MySQL AB

(Швеция, David Axmark).

Характеристики СУБД

SQL СУБД (реляционная), быстрая, но не оптимизированная под поиска и добавления, если предстоят частые изменения.

Стандарты: entry level SQL92, ODBC levels 0-2.

Лицензия - GPL/LGPL. Для хостинга лицензия не нужна.

Написана на C и C++. Базовая платформа: Solaris 2.7-2.8, SuSE Linux 7.1 (ядро 2.4, ReiserFS), но работает также в других ОС.

Многопотоковая.

API для C, C++, Java, Eiffel, Perl, PHP, Python, и др.

Парольная защита.

Таблицы в виде B-tree со сжатием индекса. До 32 индексов на таблицу. До 16 колонок на индекс. По умолчанию MySQL-таблицы имеют максимальный размер около 4 Гб.

Записи переменной длины. Есть примеры использования MySQL с 60000 таблиц и 5 миллиардами строк. Поддержка koi8-r и cp1251 (сортировка, сравнение и т.д.).

Клиенты могут соединяться по TCP/IP (можно использовать только, если никто не подслушивает) или

Unix socket.

Имеются расширения к ANSI SQL92. Отсутствующие возможности ANSI SQL92:

Вложенные подзапросы хранимые процедуры и тригеры (тригеры не планируются совсем) Внешние ключи Представления

Основные модули СУБД

mysql – клиентская часть СУБД. Она обеспечивает интерфейс командной строки с СУБД MySQL, и возможность неинтерактивной пакетной обработки.

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

mysqladmin – выполняет административные функции. Данная команда может использоваться для создания баз данных,изменения пароля пользователя (администратор может изменить пароль любому пользователю, а рядовой пользователь – только свой собственный), перезагрузки и остановки сервера, просмотра списка процессов, запущенных на сервере.

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

mysqldump – программа используется для создания дампа содержания базы данных MySQL. Она пишет инструкции SQL в стандартный вывод. Эти инструкции SQL могут быть переназначены в файл. Можно резервировать базу данных MySQL, используя mysqldump, но при этом Вы должны убедиться, что в этот момент с базой данных не выполняется никаких других действий.

mysqlshow – программа может использоваться, чтобы показать, с какими базами данных MySQL работает, какие таблицы данная база данных содержит, и какие поля есть в таблице в данной базе данных.

Типы данных.

 

 

 

BIGINT [(length)]

 

 

[UNSIGNED]

 

8 байт целое (если компилятор поддерживает такой тип)

[ZEROFILL]

 

 

 

 

 

BLOB

 

Двоичный объект (максимальная длина 65535 байт)

 

 

 

CHAR(NUM)

 

Строка фиксированной длины (1 <= NUM <= 255)

 

 

 

 

 

Сохраняет информацию о дате. Использует формат "YYYY-MM-DD". Может модифицироваться как строка

 

 

или число.

DATE

 

Диапазон для этого типа данных от 0000-00-00 до 9999-12-31. Так что "проблема 2000" здесь не стоит. В

 

 

отличие от TIMESTAMP, DATE принимает годы и в виде двух цифр от 0000 до 0099. Тип DATE имеет длину 4

 

 

байта.

 

 

 

 

 

Объединение типов DATE и TIME. Тип DATETIME идентичен типу TIMESTAMP со следующими исключениями:

 

 

Когда запись вставляется в таблицу, содержащую поля типа DATETIME, поле DATETIME не изменяется.

DATETIME

 

Диапазон для поля типа DATETIME: '0000-01-01 00:00:00' - '9999-12-31 23:59:59' при использовании в

 

 

контексте строки, и '00000000000000' - '99991231235959' при использовании в контексте числа.

 

 

Тип DATETIME имеет длину 8 байт.

 

 

 

DECIMAL

 

Десятичное число с плавающей запятой.

(length,dec)

 

 

 

 

 

 

DOUBLE

 

Число (4 или 8 байт) двойной точности с максимальной длиной и фиксированном числом десятичных чисел.

[(length,dec)]

 

 

 

 

 

 

FLOAT

 

Номер с плавающей запятой. FLOAT(4) и FLOAT одиночная точность. FLOAT(8) обеспечивает двойную

[(precision)]

 

точность.

 

 

 

FLOAT

 

Число одиночной точности с максимальной длиной и фиксированном числом десятичных чисел (4 байта).

[(length,decimals)]

 

 

 

 

 

 

INT [(length)]

 

 

[UNSIGNED]

 

Целое (4 байта).

[ZEROFILL]

 

 

 

 

 

INTEGER

 

 

[(length)]

 

Целое число 4 байта

[UNSIGNED]

 

 

 

[ZEROFILL]

 

 

 

 

 

LONGBLOB

 

Двоичный объект с максимальной длиной 2**32 байт.

 

 

 

MEDIUMBLOB

 

Двоичный объект с максимальной длиной 16777216 байт.

 

 

 

MEDIUMINT

 

 

[(length)]

 

Целое (3 байта).

[UNSIGNED]

 

 

 

[ZEROFILL]

 

 

 

 

 

REAL

 

Идентично DOUBLE (8 байт).

[(length,dec)]

 

 

 

 

 

 

SMALLINT

 

 

[(length)]

 

Целое (2 байта).

[UNSIGNED]

 

 

 

[ZEROFILL]

 

 

 

 

 

TINYBLOB

 

Двоичный объект с максимальной длиной 255 байт.

 

 

 

TINYINT [(length)]

 

 

[UNSIGNED]

 

Целое число (1 байт).

[ZEROFILL]

 

 

 

 

 

VARCHAR(NUM)

 

Строка переменной длины (1 <= NUM <= 255)

 

 

 

 

 

Хранит информацию о времени. Использует формат "HH:MM:SS". Может использоваться как строка или

TIME

 

число.

 

 

Данные типа TIME имеют длину 3 байта.

Автоматически изменяется при вставке/обновлении. Имеет формат YYMMDDHHMMSS или

YYYYMMDDHHMMSS. Когда используете mysql с ODBC и Access Вы должны использовать значение 14 для

TIMESTAMP(NUM) NUM, поскольку это заставляет MySQL всегда использовать в годах четыре цифры. Значение 12 заставит MySQL использовать в году две цифры. Значение по умолчанию - 14.

В случае таблиц с несколькими полями TIMESTAMP только первое такое поле будет модифицироваться автоматически.

Физическая организация данных

Каждая база данных находится в своём каталоге, имя которого соответствует имени базы. Каждая таблица находится в отдельном файле <имя таблицы>.MYD, индекс в файле <имя таблицы>.MYI, файл определения таблицы <имя таблицы>.frm

Основные команды MySQL

СУБД MySQL оперирует подмножеством языка SQL, соответствующим спецификации ANSI SQL 92.

3.1Ретроспектива развития однопользовательских СУБД. Сравнительная характеристика современных однопользовательских СУБД.

Ретроспектива развития однопользовательских СУБД.

В восьмидесятые годы было разработано большое число однопользовательских СУБД. В нашей стране наибольшее распространение получили FoxBASE, dBASE (III, IV), Paradox, а в конце восьмидесятых годов приобрел популярность пакет Clipper. FoxBASE, dBASE и Clipper использовали одни и те же принципы организации информации и были совместимы на уровне файлов баз данных, поэтому иногда все эти системы рассматривали как модификации dBASE.

Система программирования dBASE была разработана фирмой Ashton-Tate. В dBASE III plus основное внимание было уделено совершенствованию пользовательского интерфейса (режим ASSIST), что существенно упростило процедуру создания и модификации баз данных, сортировку и индексацию записей. Создание и использование довольно сложных структур баз данных было возможно непосредственно из режима ASSIST без составления прикладных программ на языке dBASE, что делало эту СУБД доступной для широкого круга пользователей. Это обеспечило огромную популярность dBASE III plus, и в конце восьмидесятых годов эта СУБД являлась фактическим стандартом для реляционных баз данных.

Одним из недостатков СУБД dBASE, Paradox являлась невозможность создания с их помощью файлов .EXE, автономно работающих под управлением DOS. Именно поэтому широкое распространение (в нашей стране) приобрел пакет Clipper фирмы Nantucket, который с самого начала предназначался для компиляции прикладных программ. Clipper работал с файлами .DBF, обеспечивая достаточно высокое быстродействие. В тоже время это была открытая система, позволявшая расширять возможности языка за счет приложений, написанных на других языках программирования - Assembler'е и C.

Сравнительная характеристика современных однопользовательских СУБД.

FoxPro – реляционная однопользовательская СУБД (с возможностью сетевого доступа), ориентированная на широкий класс пользователей. Производитель: Fox Software. Первая разработка датируется 1984 годом. FoxBase был задуман как улучшенный вариант dBASE, т.е. если dBASE умел что-то делать, то FoxBase должен был делать это лучше и быстрее.

С появлением на рынке FoxPro 2.0 был совершен переворот в области разработки баз данных на персональных компьютерах. Ускорение работы оказалось просто поразительным. В персональной системе базы данных стала возможной работа с таблицами, содержащими миллионы записей. Впервые разработчики Fox использовали в этой версии SQL-инструкции. FoxPro 2.0 представил разработку экранов и отчетов с помощью «мастеров». При этом мастер генерировал программный код, позволяя использовать и модифицировать его в основной программе. В версию FoxPro 2.5 была добавлена поддержка Windows, хотя по сути это было DOS-приложение, лишь внешне приняв облик Windows-продукта.

Microsoft Access – реляционная СУБД для персональных компьютеров. Наилучшим образом отвечает потребностям индивидуального использования или использования в рабочих группах для манипулирования данными, объем которых исчисляется несколькими мегабайтами. Для обеспечения многопользовательского доступа Access использует архитектуру "файл-сервер" вместо архитектуры "клиент-сервер". СУБД Access

включена в версии пакета Microsoft Office Professional.

3.2СУБД Microsoft Access. Основные возможности и недостатки. Объекты Access. Типы данных. Средства программирования: язык VBA, макросы. Примеры реализации SQL-запросов в среде Access. Варианты импорта и экспорта данных.

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

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