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

SQL в вопросах и задачах

.pdf
Скачиваний:
34
Добавлен:
21.05.2015
Размер:
917.91 Кб
Скачать

121

УП Р АЖ НЕ НИ Я

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

111.

Соз д айте п ред став ление д ля п олуч ения

св ед ений

о

колич еств е

студ ентов в ка жд ом город е.

 

 

 

112.

Соз д айтеп ред став лениед ляп олуч ениясв ед ений п о кажд ому студ енту:

его ид ентифика тор, фамилию, имя, сред ний и общ ий ба ллы.

 

 

113.

Соз д айте п ред став ление д ля п олуч ения

св ед ений

о

колич еств е

э кз аменов , которыесд ав а л кажд ый студ ент.

 

 

 

5.11. И зм енение значений в предст авл ения х

К ак ужегов орилось, исп ольз ов аниекоманд мод ифика ции яз ыка SQL –

INSERT (ВСТАВИТЬ), UPDATE (ЗАМЕНИТЬ), и DELETE (УДАЛИТЬ)

п рименительно д ляп ред ста в лений имеет ряд особенностей. В д оп олнениек асп ектам, рассмотренным в ыше, след ует отметить, ч то нев сеп ред став ления могут мод ифициров аться.

Е сли кома нд ы мод ифика ции могут в ып олняться в п р ед ста в лении, то п ред став ление яв ляется обнов ляемым (мод ифицируемым); в п р отив ном случ а еоно п ред наз нач ено только д ля ч тения п ри з ап росе. К аким образ ом можно оп ред елить, яв ляетсяли п ред став лениемод ифицируемым? К р итерии обнов ляемости п ред став ленияможно сформулиров атьслед ующ имобра з ом.

∙ Пред став ление строится на основ е од ной и только од ной баз ов ой таблицы.

Пред став лениед олжно сод ержатьп ерв ич ный ключ баз ов ой та блицы.

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

Пред став лениенед олжно сод ержатьDISTINCT в св оемоп ред елении.

Пред став лениенед олжно исп ольз ов а тьGROUP BY или HAVING в

св оем

 

оп ред елении.

 

 

Пред став лениенед олжно исп ольз ов атьп од з ап росы.

 

Пред став лением о ж ет бы т ь исп ольз ов а но в

д ругом п р ед ста в лении, но

 

э то п ред ста в лениед олжно бытьта кжемод ифицир уемыми.

 

Пред став ление не д олжно исп ольз ов ать в

кач еств е п олей

в ыв од а

 

 

 

 

 

 

 

122

 

 

 

 

константы или в ыраженияз нач ений.

 

 

 

 

Суть этих

огранич ений

в

том,

ч то

обнов ляемые

п ред став ления

фактич ески

п од обны

окна м

в

баз ов ых

та блицах.

О ни п оказ ыв ают

информацию из

баз ов ой

та блицы, огранич ив а я оп ред еленные ее строки

(исп ольз ов а нием

соотв етств ующ их

п ред ика тов )

или

сп ециа льно

именов а нные столбцы

исключ ениями).

Н о п ри этом п ред став ления

в ыв од ят з нач ения без

и х

о бр а бо т ки

с исп ольз ов анием

а грегир ующ их

функций и груп п иров ки.

О ни также не срав нив ают строки таблиц д руг с

д ругом (как

это

имеет

место

в

объед инениях и п од з а п росах, или п ри

исп ольз ов ании DISTINCT).

 

 

 

 

 

 

 

Раз лич иямежд у мод ифицируемыми (обнов ляемыми) п ред став лениями и

п ред став лениями

т о лько

д ля

чт ени я

не случ айны.

О бнов ляемые

п ред став ления в

основ ном исп ольз уются ана логич но

ба з ов ым таблица м.

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

Н емод ифицируемыеп ред став ления, с д ругой стороны, п оз в оляют более

рациона льно

п олуч ать и

п ереформатиров ать д анные. С

их п омощ ью

формируются

библиотеки

сложных з ап росов , которые могут з атем

исп ольз ов аться в з ап р осах

д ля п олуч ения информации

са мостоятельно

(нап ример, в объед инениях). Э ти п ред став лениямогут такжеиметьз на ч ение п ри решении з а д ач з ащ иты и без оп асности д анных. Н а п р имер, можно п ред остав итьнекоторым п ольз ов а телям в оз можностьп олуч ения агрегатных д анных (таких, ка к усред ненное з нач ение оценки студ ента), не п ока з ыв ая конкретных з нач ений оценок и, темболее, неп оз в оляяих мод ифициров ать.

5.12.П рим еры обновл я ем ы х и не обновл я ем ы х предст авл ений

Пример 1

CREATE VIEW DATEEXAM (EXAM_DATE, QUANTITY)

AS SELECT EXAM_DATE, COUNT (*)

FROM EXAM_MARKS

GROUP BY EXAM_DATE;

123

Д анноеп ред став лениеяв ляется не о бно вляем ы м из -з а п рисутств ия в немагрегир ующ ей функции и GROUP BY.

Пример 2

CREATE VIEW LCUSTT

AS SELECT *

FROM UNIVERSITY

WHERE CITY = ‘М о сква ’;

Э то – о бно вляем о е п ред став ление.

Пример 3

CREATE VIEW SSTUD (SURNAME1, NUMB, KUR) AS SELECT SURNAME, STUDENT_ID, KURS*2

FROM STUDENT

WHERE CITY = ‘М о сква ’;

Э то п ред став ление – не м о д и ф и ци р уем о е из -з а налич ия в ыражения “KURS*2”.

Пример 4

CREATE VIEW STUD3

AS SELECT * FROM STUDENT

WHERE STUDENT_ID IN

( SELECT MARK

FROM EXAM_MARKS

WHERE EXAM_DATE = ‘10/02/1999’);

Пред став лениене м о д и ф и ци р ует сяиз -з а п рисутств ияв немп од з ап роса . В некоторых п рогра мма х э то может бытьп р иемлемым.

Пример 5

CREATE VIEW SOMEMARK

AS SELECT STUDENT_ID, SUBJ_ID, MARK FROM EXAM_MARKS

WHERE EXAM_DATE IN (‘10/02/1999’, ‘10/06/1999’);

Э то – о бно вляем о е п ред став ление.

124

5.13.П редставл ения , базирую щ иеся на других предст авл ения х

О тносительно исп ольз ов а ния п ред ложения WITH

CHECK OPTION

след ует отметить, ч то в станд артеSQL это п ред ложениенеп ред усматрив ает

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

п ред став лениях, в

которых оно оп ред елено, но нерасп ространяется на д ругиеп ред став ления, основ а нныена э томп ред став лении. Н а п р имер, в п ред ыд ущ емп римере

CREATE VIEW HIGH_RATING

AS SELECT UNIV_ID, RATING

FROM UNIVERSITY WHERE RATING >= 400

WITH CHECK OPTION;

п оп ытка в ста в итьили обнов итьз нач ения п оля RATING, отлич ные от 400, буд ет отв ергнута , п оскольку п рисутств ует указ а ниеWITH CHECK OPTION. О д нако, если соз д ается в торое п ред став ление (с тем же сод ержанием), основ а нноена п ерв ом:

CREATE VIEW MYRATING AS

SELECT *

FROM HIGH_RATING;

то в в од в п оле RATING с п омощ ью нижеп р ив ед енного з а п роса з нач ений, отлич а ющ ихся от 400, уже не буд ет отв ер гнуто как ошибоч ное. То есть след ующ ий з ап рос

UPDATE MYRATING SET RATING = 200

WHERE UNIV_ID = 18;

небуд ет отв ергнут ка к некорректный, и, п ослеего в ып олнения, строки с обнов ленными д а нными исч ез нут из ка к из п ред став ленияMYRATING, та к и из п ред став ленияHIGH_RATING.

Пред ложение WITH CHECK OPTION п росто гарантирует, ч то любое

обнов лениев

п ред став лении осущ еств ляется в соотв етств ии со з нач ениями,

указ анными

именно д ля эт о го п ред став ления.

О бнов ление д ругих

п ред став лений, баз ир ующ ихся на п ер в ом текущ ем,

п ри э том д оп устимым,

если эти п ред став лениянез ащ ищ ены п ред ложениями WITH CHECK OPTION, з ад а нными именно д ляних. Пред ложенияWITH CHECK OPTION п р ов еряют

125

п ред ика ты только того п ред став ления, в котором они сод ержатся. Пр и этом неяв ляется в ыход ом из п оложения и соз д аниеп ред став ленияMYRATING с п омощ ьюз а п роса

CREATE VIEW MYRATING AS

SELECT *

FROM HIGH_RATING

WITH CHECK OPTION;

УП Р АЖ НЕ НИ Я

114.

К акие из

п ред став ленных ниже п ред став лений яв ляются

обнов ляемыми?

a)

CREATE VIEW DAILYEXAM AS

 

SELECT DISTINCT STUDENT_ID, SUBJ_ID, MARK, EXAM_DATE

 

FROM EXAM_MARKS;

b) CREATE VIEW CUSTALS AS

 

SELECT SUBJECT.SUBJ_ID, SUM (MARK) AS MARK1

 

FROM SUBJECT, EXAM_MARKS

 

WHERE SUBJECT.SUBJ_ID = EXAM_MARKS.SUBJ_ID

 

GROUP BY SUBJECT.SUBJ_ID;

c)

CREATE VIEW THIRDEXAM

 

AS SELECT *

 

FROM DAILYEXAM

 

WHERE EXAM_DATE = ‘10/02/1999’;

d)

CREATE VIEW NULLCITIES

 

AS SELECT STUDENT_ID, SURNAME, CITY

 

FROM STUDENT

 

WHERE CITY IS NULL

 

OR SURNAME BETWEEN АAND Д’;

115.

Соз д айте

п ред ста в ление таблицы STUDENT с именем STIP,

в ключ а ющ ееп оляSTIPEND и STUDENT_ID и п оз в оляющ еев в од итьили из менятьз на ч ениеп оля STIPEND (стип енд ия), но только в п р ед ела х от

100 д о 200.

6.О пр еделен и епр а в до ступа по льзо ва телей кда н н ы м

6.1. П ол ь з оват ел и и привил егии

К ажд ый,

кто имеет д оступ

к баз е д анных, наз ыв ается по льзо ва т елем .

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

раз гранич енияп ра в

п ольз ов а телей с точ ки з ренияд оступ а к д а нным и п рав

на в ып олнениес ними тех или иных манип уляций. Д ля этих целей

SQL

реализ ов аны

сред ств а, п оз в оляющ ие уста нав лив ать и

контролиров ать

п рив илегии п ольз ов ателей ба з ы д а нных.

 

 

К ажд ый

п ольз ов атель в

сред е SQL имеет сп ециальное имя

или

ид ентификатор, с

п омощ ью

которого осущ еств ляется

ид ентифика ция

п ольз ов ателяд ляустанов ки и оп ред еленияего п ра в с точ ки з ренияд оступ а к д анным. К а жд а я п осла нная к СУ Б Д кома нд а SQL-з ап р оса ассоциируется СУ Б Д с ид ентифика торомд оступ а к д аннымконкретного п ольз ов ателя.

Польз ов ательоп ред еляетсяс п омощ ьюслед ующ ей кома нд ы.

CREATE USER <и м я_по льзо ва т еля> IDENTIFIED BY <па р о ль>

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

У д алениеп ольз ов ателяп роиз в од итсякоманд ой

DROP USER <и м я_по льзо ва т еля> .

Н аз нач аемыеп ольз ов ателю п рив илегии – это то, ч то оп р ед еляет, может ли указ анный п ольз ов ательв ып олнитьд а нную кома нд у над оп р ед еленным

объектом баз ы д анных или нет. Имеется несколько тип ов

п р ив илегий,

соотв етств ующ их нескольким тип ам оп ераций. Прив илегии

д а ются и

отменяютсяд в умякоманд ами SQL, соотв етств енно:

 

GRANT – уста нов ка п рив илегий и

 

REVOKE – отмена п р ив илегий.

 

127

6.2. С т андарт ны е привил егии

Прив илегии, оп ред еленныестанд артом SQL – это п рив илегии объекта. Э то оз нач ает, ч то п ольз ов ательимеет п рив илегию (п ра в о) на в ып олнение

д анной кома нд ы только на оп ред еленномобъектев баз

ед анных. Прив илегии

объекта

св яз аны од нов ременно

и с п ольз ов ателями,

и

с таблица ми баз ы

д анных.

То есть,

п рив илегия

д а ется оп ред еленному

п ольз ов ателю

в

указ анной таблице.

Э то может быть как баз ов а я

таблица , так

и

п ред став ление.

 

 

 

 

 

Польз ов атель, соз д ав ший таблицу (любого в ид а ), яв ляется вла д ельцем этой таблицы. Э то оз нач ает, ч то этот п ольз ов ательимеет все п р ив илегии, относящ иесяк этой таблице, в том ч исле, он может п еред ав атьп рив илегии на работу с этой та блицей д ругимп ольз ов ателям.

 

Польз ов ателюмогутбытьназ нач ены след ующ иеп рив илегии:

SELECT – п ольз ов ательможет в ып олнятьз ап росы к таблице;

INSERT – п ольз ов ательможет в ып олнятьв та блице кома нд у INSERT;

UPDATE – п ольз ов а тельможет в ып олнятьв таблицекома нд у UPDATE.Э та

 

п рив илегияможет бытьогранич ена д ляоп р ед еленных столбцов таблицы;

DELETE – п ольз ов ательможет в ып олнятьв та блицекоманд у DELETE;

REFERENCES – п ольз ов ательможет оп р ед елитьв нешний ключ (только

 

д ляORACLE), который исп ольз ует од ин или болеестолбцов этой таблицы,

 

как род ительский ключ . Воз можно огранич ение этой п рив илегии д ля

 

оп ред еленных столбцов .

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

INDEX – п ольз ов ательимеетп р ав о соз д а в атьинд екс в та блице;

SYNONYM – п ольз ов а тельимеет п ра в о соз д ав атьсинонимд ляобъекта;

ALTER – п ольз ов ательимеет п рав о в ып олнятькоманд у ALTER TABLE в таблице;

EXECUTE – п оз в оляет в ып олнятьп роцед уру.

Наз нач ениеп ольз ов ателямэ тих п рив илегий осущ еств ляетсяс п омощ ью команд ы GRANT.

128

6.3. Ком анда GRANT

Польз ов атель,

яв ляющ ийся в лад ельцем та блицы STUDENT,

может

п еред а тьд ругому

п ольз ов ателю (п устьэто буд ет п ольз ов атель с

именем

IVANOV) п р ив илегиюSELECT с п омощ ьюслед ующ ей кома нд ы.

 

GRANT SELECT ON STUDENT TO IVANOV;

Теп ерьп ольз ов а тельс именем IVANOV может в ып олнятьSELECT-з а- п росы к таблицеSTUDENT. Б ез налич ияд ругих п р ив илегий он может только вы би р а т ь з нач ения, но неможет в ып олнятьлюбыед ейств ия, которыебы в оз д ейств ов а ли на з нач ения в та блице STUDENT, в ключ ая исп ольз ов ание таблицы STUDENT в кач еств ерод ительской таблицы в нешнего ключ а . К огд а

SQL п олуч ает кома нд у

GRANT, п ров еряются п рив илегии п ольз ов ателя,

д ав шего эту команд у, ч тобы оп р ед елитьд оп устимостькома нд ы GRANT д ля

этого п ольз ов ателя. Польз ов ательIVANOV са мостоятельно неможет з ад ать

эту кома нд у.

О н та кже не может п ред остав ить п ра в о SELECT д ругому

п ольз ов ателю,

та к как таблица п р ина д лежит неему (нижебуд ет п оказ а но,

как в лад елец

таблицы

может п еред ать д ругому п ольз ов ателю п рав о

пред остав ленияп рив илегий).

Команд а

GRANT INSERT ON EXAM_MARKS TO IVANOV;

п ред остав ляет п ольз ов ателю IVANOV п рав о в в од итьв та блицу EXAM_MARKS нов ыестроки.

В команд е

GRANT д оп

устимо указ ыв ать ч ерез з ап ятые сп исок

п ред остав ляемых

п рив илегий

и сп исок п ольз ов ателей, которым они

п ред остав ляются. Н ап ример :

GRANT SELECT, INSERT ON SUBJECT TO IVANOV, PETROV;

При этом в есь указ анный сп исок п р ив илегий п ред остав ляются в сем указ а нным п ольз ов а телям. В строгой ANSI-интерп рета ции нев оз можно п ред остав итьп рив илегии д лянескольких та блиц од ной кома нд ой GRANT.

129

6.4. И спол ь з ование аргум ент ов ALL и PUBLIC

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

GRANT ALL PRIVILEGES ON STUDENT TO IVANOV;

или болеекоротко

GRANT ALL ON STUDENT TO IVANOV;

п еред а ет п ольз ов ателюIVANOV в есь набор п рив илегий в таблицеSTUDENT.

А ргумент PUBLIC исп ольз уется д ля п ер ед ач и указ анных в команд е

п рив илегий в сем

остальнымп ольз ов ателям. Н аиболееч а сто это п рименяется

д ля п рив илегии

SELECT в оп ред еленных баз ов ых таблица х или

п ред став лениях,

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

п ольз ов ателя. Н а п ример, ч тобы п оз в олитьлюбому п ольз ов а телю п олуч ать информациюиз таблицы EXAM_MARKS, можно исп ольз ов а тькома нд у

GRANT SELECT ON EXAM_MARKS TO PUBLIC;

Пред остав лениев сех п рив илегий к таблицев сем п ольз ов ателям обыч но

яв ляется

нежелательным.

Все п р ив илегии

з а

исключ ением SELECT

п оз в оляют

п ольз ов ателю

из менять (или,

в

случ ае REFERENCES,

огранич ив ать) сод ержаниетаблицы, п оэтому ра зрешениев семп ольз ов а телям из менять сод ержание та блиц может в ыз в ать оп ред еленные п роблемы

обесп еч ения без оп асности

и з ащ иты д анных. Тем более, ч то п рив илегия

PUBLIC не огра нич ена в

п еред ач е п рав только текущ им п ольз ов ателям.

Л юбой нов ый п ольз ов атель, д оба в ляемый к системе, ав томатич ески п олуч ает э том случ ае п олный набор п рив илегий, наз на ч енный ранее в сем

п ольз ов ателям.

Поэ тому д ля огр анич ения д оступ а к таблицев сем и в сегд а

луч ше в сего

п ред остав ить п рив илегии, отлич ные от SELECT, только

инд ив ид уальнымп ольз ов ателям.

130

6.5. О т м ена привил егий

О тмена п р ив илегии осущ еств ляется с п омощ ью кома нд ы REVOKE, котора яимеет синтаксис, ана логич ный команд еGRANT.

Н а п ример, команд а

REVOKE INSERT ON STUDENT FROM PETROV;

отменяет

п рив илегию INSERT в

та блице STUDENT д ля п ольз ов ателя

PETROV. Воз можно исп ольз ов а ниев команд еREVOKE сп исков п рив илегий и

п ольз ов ателей. Н а п ример

 

 

 

REVOKE INSERT, DELETE ON STUDENT

 

 

FROM PETROV, SIDOROV;

 

 

След ует иметьв

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

который

их п ред остав ил,

и,

п р и этом отмена

ав томатич ески

расп ространяется на

в сех

п ольз ов а телей, п олуч ив ших

от него эту

п рив илегию.

 

 

 

 

6.6. И спол ь з ование предст авл ений дл я ф ил ь т рац ии привил егий

Д ейств ия

п рив илегий можно

сд елать более точ ными,

исп ольз уя

п ред став ления.

При п еред ач еп р ив илегии п ольз ов ателю в ба з ов ой таблице,

она ав томатич ески ра сп ространяется на

в се строки, а

п р и исп ольз ов а нии

в оз можных исключ ений UPDATE и REFERENCES, и на в сестолбцы та блицы.

Соз д ав а я п ред став ление,

котор ое ссыла ется на баз ов ую та блицу, и з атем,

п еред а в ая п р ив илегию уже на это

п р ед ста в ление, можно огранич итьэти

п рив илегии

любыми

в ыражениями

з ап росе,

сод ержащ емся

в

п ред став лении. Такой метод расширяет в оз можности кома нд ы GRANT.

 

Д лясоз д анияп ред став лений п ольз ов а тельд олжен обла д атьп рив илегией

SELECT в о в сех таблица х, на которыеон ссылается в

п ред став лении. Е сли

п ред став лениемод ифицир уемое, то люба яиз п рив илегий INSERT, UPDATE

и DELETE,

котора я п ред остав лена

п ольз ов ателю в ба з ов ой таблице, буд ет

ав тома тич ески

расп ространяться на п ред став ление. Е сли п рив илегии

на

обнов ление отсутств уют,

то их нев оз можно п олуч ить и в

соз д анных

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