SQL в вопросах и задачах
.pdf
|
131 |
п ред став лениях, |
д аже если сами эти п ред став ления обнов ляемые. Так как |
в нешние ключ и |
не п рименяются в п ред став лениях, то и п рив илегия |
REFERENCES никогд а неисп ольз уетсяп ри соз д а нии п ред ста в лений.
6.6.1.О граничение привил егии SELECT дл я определ енны х ст ол бц ов
Пред п оложим, необход имо |
обесп еч ить п ольз ов ателю PETROV |
в оз можностьд оступ а только к столбца м STUDENT_ID и SURNAME таблицы |
|
STUDENT. Э то можно сд ела ть, |
п оместив имена этих столбцов в |
п ред став ление |
|
CREATE VIEW STUDENT_VIEW AS SELECT STUDENT_ID, SURNAME FROM STUDENT;
и п ред остав ить п ольз ов ателю PETROV п рив илегию SELECT в соз д анном п ред став лении, а нев са мой таблицеSTUDENT:
GRANT SELECT ON STUDENT_VIEW TO PETROV;
Д ля столбцов можно соз д атьраз лич ные п рив илегии, од нако, след ует иметьв в ид у, ч то д лякома нд ы INSERT это буд ет оз нач атьв став ку з нач ений п о умолч анию, а д лякоманд ы DELETE огра нич ениестолбца небуд ет в ообщ е иметьз на ч ения.
6.6.2. О граничение привил егий дл я определ енны х ст рок
Пред став ления п оз в оляют огра нич ить (фильтров ать) |
п р ив илегии |
д ля |
||||
оп ред еленных |
строк таблицы. Д ля |
э того |
естеств енно |
исп ольз ов ать в |
||
п ред став лении |
п ред ика т, который оп ред елит, |
какие строки |
в ключ ены |
в |
||
п ред став ление. Ч тобы п ред остав итьп ольз ов ателюPETROV п р ив илегию в ид а |
||||||
UPDATE в таблице UNIVERSITY |
д ля в сех з ап исей |
о |
М осков ских |
|||
унив ерситета х, можно соз д атьслед ующ ееп ред став ление: |
|
|
|
CREATE VIEW MOSC_UNIVERSITY AS
SELECT * FROM UNIVERSITY
WHERE CITY = ‘М о сква ’
WITH CHECK OPTION;
|
|
132 |
|
|
Затем можно |
п еред ать |
п рив илегию UPDATE |
в |
этой та блице |
п ольз ов ателюPETROV: |
|
|
|
|
GRANT UPDATE ON MOSC_UNIVERSITY TO PETROV; |
|
|||
В отлич иеот п рив илегии UPDATE д ляоп ред еленных столбцов , которая |
||||
расп ространена на |
в се строки |
та блицы UNIVERSITY, |
д анна я п рив илегия |
|
относится только |
к строка м, |
д ля которых з нач ение п оля CITY рав но |
||
‘М о сква ’. Пред ложение WITH CHECK OPTION п ред охраняет п ольз ов ателя |
||||
PETROV от з амены з нач енияп оляCITY на любоез нач ение, |
кромез на ч ения |
|||
‘М о сква ’. |
|
|
|
|
6.6.3.П редост авл ение дост упа т ол ь кок из вл еченны м данны м
Д ругаяв оз можностьсостоит в том, ч тобы устана в лив атьп ольз ов а телям п рив илегии на д оступ к уже из в леч енным д анным, а не к з на ч ениям таблице. Д ляэ того уд обно исп ольз ов а тьа грегирующ иефункции. Н а п ример, соз д а д им п ред став ление, которое д ает информацию о колич еств е оценок, сред неми общ емба лла х д лястуд ентов на кажд ый д ень:
CREATE VIEW DATETOTALS AS
SELECT EXAM_DATE, COUNT (*) AS KOL, SUM (MARK) AS SUMMA, AVG (MARK) AS TOT
FROM EXAM_MARKS GROUP BY EXAM_DATE;
Теп ерьможно п еред атьп ольз ов а телю PETROV п рив илегию SELECT в соз д а нномп ред ста в лении DATETOTALS с п омощ ьюз а п роса :
GRANT SELECT ON DATETOTALS TO PETROV;
133
6.6.4.И спол ь з ование предст авл ений в качест ве ал ь т ернат ивы ограничения м
Пред став ленияс WITH CHECK OPTION могут исп ольз ов атьсяв кач еств е альтернатив ы огра нич ениям. Н а п р имер, необход имо уд остов ериться, ч то в се з нач ения п оля CITY в та блице STUDENT ра в ны наз в аниям конкретных город ов . Д ляэтого можно уста нов итьогра нич ениеCHECK неп осред ств енно на столбец CITY. О д нако п оз жеего из менениебуд ет з атр уд нено. В кач еств е альтернатив ы можно соз д атьп ред став ление, исключ ающ ее неп ра в ильные з нач енияCITY:
CREATE VIEW CURCITYES AS SELECT *
FROM STUDENT
WHERE CITY IN (‘М о сква ’, ‘Во р о н еж ’)
WITH CHECK OPTION;
Теп ерь, в место того, ч тобы п ред остав лятьп ольз ов ателям п рив илегии
обнов ления в |
таблице STUDENT, можно |
п ред остав ить соотв етств ующ ие |
||||
п рив илегии |
в |
п ред став лении |
CURCITYES. |
Преимущ еств о та кого п од ход а |
||
состоит в |
том, ч то п ри необход имости |
из менения можно |
уд алить это |
|||
п ред став ление, |
соз д а тьнов ое, |
и п ред остав итьв |
этом нов ом п р ед ста в лении |
|||
п рив илегии |
п ольз ов ателям. |
Та кая оп ерация |
в ып олняется |
п рощ е, ч ем |
||
из менение огр анич ений в та блице. Н ед остатком э того метод а |
яв ляется то, |
|||||
ч то в ла д елец |
та блицы STUDENT также д олжен исп ольз ов ать это нов ое |
п ред став ление, инач еего собств енныекоманд ы такженебуд ут п риняты.
6.7. Д ругие т ипы привил егий
Д о сих п ор не рассмотрены в оп росы уста нов ки целого ряд а д ругих п рив илегий, а именно:
∙К то имеет п р ав о соз д а в атьта блицы?
∙К то имеет п р ав о из менять, уд алять, или огранич ив а тьтаблицы?
∙ |
Д олжны ли п ра в а соз д ания баз ов ых та блиц отлич атьсяот п рав соз д ания |
|
п ред ста в лений? |
∙ |
Д олжен ли сущ еств ов ать супер по льзо ва т ель, то есть п ольз ов атель, |
|
|
|
134 |
|
|
|
|
|
отв еч ающ ий з а |
п од д ержание баз ы д а нных |
и, |
след ов ательно, имеющ ий |
|||||
наибольшие, |
или п олные п р ив илегии, |
которые не п ред остав ляются |
||||||
обыч ному п ольз ов ателю? |
|
|
|
|
|
|||
Прив илегии, |
которые не оп ред еляются в |
термина х |
сп ециа льных |
|||||
объектов |
д анных, |
наз ыв а ются пр и ви леги ям и |
си ст ем ы , или |
пр а в а м и ба зы |
||||
д а нны х. |
Э ти п рив илегии в ключ ают |
себя п ра в о соз д ав атьобъекты д а нных, |
||||||
отлич а ющ иеся |
от |
баз ов ых таблиц |
(обыч но |
соз д ав аемых |
несколькими |
|||
п ольз ов ателями) |
и п ред ста в лений |
(обыч но |
соз д ав а емых |
большинств ом |
||||
п ольз ов ателей). |
Прив илегии системы д ля соз д а ния п ред став лений д олжны |
|||||||
д оп олнять, а нез а менятьп рив илегии объекта, |
которыестанд а рт тр ебует от |
|||||||
соз д а телей п ред став лений (оп исаны ранее). |
К роме того, в любой системе |
в сегд а имеютсянекоторыетип ы суп ер п ольз ов а телей, то естьп ольз ов ателей, которыеимеют большинств о или в сеп рив илегии, и которыемогут п еред ать св ой статус суп ерп ольз ов ателя кому-либо с п омощ ью п рив илегии или
груп п ы п р ив илегий. |
Та кого род а |
п ольз ов ателем яв ляется так наз ыв аемый |
а д м и ни ст р а т о р ба зы |
д а нны х, или |
DBA (DataBase Administrator). |
6.8. Т ипичны е привил егии сист ем ы
При общ емп од ход еимеетсятри ба з ов ых п рив илегии системы:
∙CONNECT (Подключить),
∙RESOURCE (Ресурс) и
∙DBA (Администратор Базы Данных).
Прив илегия CONNECT состоит из п ра в а з а регистриров а ться и п рав а соз д а в атьп ред став ленияи синонимы, если п еред аны п р ив илегии объекта.
Прив илегияRESOURCE состоит из п ра в а соз д ав атьбаз ов ыетаблицы.
Прив илегияDBA – это п рив илегияад министратора баз ы д анных, то есть суп ер п ольз ов ателя, которому п ред остав ляются самые в ысокие п олномоч ия п ри ра ботес баз ой д анных. Э ту п рив илегию может иметьод ин или более п ольз ов ателей с функциями а д министра тора баз ы д анных. К ома нд а GRANT (в из мененной форме) может п р именятьсякак с п р ив илегиями объекта, так и с системными п рив илегиями.
135
6.9. С оз дание и удал ение пол ь з оват ел ей
В |
большинств е реализ а ций |
SQL нов ого п ольз ов ателя |
соз д ает |
п ольз ов атель с п рив илегией DBA, |
то есть а д министра тор баз ы |
д а нных, |
|
который |
ав томатич ески п ред остав ляет нов ому п ольз ов ателю п р ив илегию |
CONNECT. В этом случ а е обыч но д обав ляется п ред ложение IDENTIFIED BY, указ ыв а ющ ееп ар ольд ляэтого п ольз ов ателя. Н ап р имер, кома нд а
GRANT CONNECT TO PETROV IDENTIFIED BY ‘PETROVPASSWORD’;
п рив ед ет к соз д аниюп ольз ов ателяс именемPETROV, п ред остав ит ему п рав о
регистриров а ться в |
ба з е |
д а нных, |
и |
наз нач ает |
ему |
п ароль |
|
“PETROVPASSWORD”. |
После |
этого, |
так |
как |
PETROV |
уже яв ляется |
|
з арегистриров анным п ольз ов ателем, |
он (или п ольз ов атель DBA) |
может |
|||||
исп ольз ов ать э ту |
же команд у |
д ля |
из менения д анного |
п а роля |
|||
“PETROVPASSWORD”. |
|
|
|
|
|
|
|
К огд а п ольз ов атель A п ред остав ляет п рив илегию CONNECT д ругому п ольз ов ателюB, гов орят, ч то п ольз ов а тельA “со зд а ет ” п ольз ов ателяB. При этом п ольз ов атель A обяз ательно д олжен иметь п р ив илегию DBA. Е сли
п ольз ов атель B |
буд ет соз д а в ать |
баз ов ые |
таблицы (а |
не только |
п ред став ления), |
ему также д олжна |
быть |
п ред остав лена |
п рив илегия |
RESOURCE. Н о п ри э томв оз никает д ругаяп роблема . Пр и п оп ыткеуд а ления п ольз ов ателем A п р ив илегии CONNECT п ольз ов ателя B, который ужеимеет соз д а нныеим таблицы, эта кома нд а уд а ления п рив илегии буд ет отклонена ,
п оскольку ее д ейств ие остав ит эти та блицы без |
в лад ельца, ч то |
не |
д оп ускается. Поэ тому, п режд еч ем уд а литьп рив илегию CONNECT ка кому- |
||
либо п ольз ов ателю, снач а ла необход имо уд а лить из |
ба з ы д анных |
в се |
соз д а нные этим п ольз ов ателем таблицы. Прив илегию RESOURCE уд а лять отд ельно не требуется, д остаточ но уд алить CONNECT, ч тобы уд а лить п ольз ов ателя.
УП Р АЖ НЕ НИ Я
116. |
Перед айте п ольз ов ателю PETROV п рав о на из менение в баз е д анных |
з нач ений оценок д ляз ап исей о студ ентах. |
|
117. |
Перед айте п ольз ов ателю SIDOROV п р а в о п еред ав ать д ругим |
136
п ольз ов ателямп рав а на осущ еств лениез ап росов к та блицеEXAM_MARKS.
118. О тменитеп рив илегию INSERT п о отношению к таблицеSTUDENT у
п ольз ов ателя |
IVANOV и у |
в сех |
д ругих п ольз ов ателей, которым |
п рив илегия, в |
св ою оч еред ь, |
была |
п ред остав лена этим п ольз ов а телем |
IVANOV. |
|
|
|
119. Перед айтеп ольз ов ателю SIDOROV п рав о в ып олнятьоп ерации в став ки или обнов ления д ля таблицы UNIVERSITY, но только д ля з ап исей об унив ерситетах, з нач ениярейтингов которых лежат в д иа п аз онеот 300 д о
400.
120. Ра з решите п ольз ов ателю PETROV д ела ть з а п росы к та блице EXAM_MARKS, но з ап ретитеему из менятьв этой та блицез нач енияоценок студ ентам, имеющ имнеуд ов летв орительные(=2) оценки.
6.10. С оз дание синоним ов (SYNONYM)
К ажд ый раз п ри |
ссылке к баз ов ой таблице или п ред став лению, |
не |
яв ляющ имися собств енностью п ольз ов ателя, требуется установ ить |
в |
|
кач еств е п рефикса к |
имени э той таблицы имя ее в ла д ельца , п оскольку |
система несможет оп ред елитьместона хожд ениетаблицы, так ка к у раз ных п ольз ов ателей могут оказ а ться таблицы с од инаков ыми именами. Исп ольз ов а ние д линных имен с п рефикса ми может ока з аться неуд обным. Поэтому большинств о реа лиз а ций SQL п оз в оляют соз д ав а ть д ля таблиц синонимы (ч то неяв ляетсяста нд артомANSI). Си но ни м – это альтернатив ное
имя таблицы. |
Пр и соз д а нии синонимов п ольз ов атель станов ится его |
собств енником, |
п оэтому необход имостьисп ольз ов ания п рефикса к имени |
таблицы д лянего отп а д ает. Польз ов а тельимеет п ра в о соз д ав атьсинонимд ля таблицы, если он имеет, п о кра йней мере, од ну п рив илегию в од ном или болеестолбцах этой та блицы.
С п омощ ью кома нд ы CREATE SYNONYM п ольз ов ательIVANOV может д ля таблицы с именем PETROV.STUDENT соз д а ть синоним с именем CLIENTS след ующ имобраз ом.
CREATE SYNONYM CLIENTS FOR PETROV.STUDENT;
137
Теп ерьп ольз ов ательIVANOV может исп ольз ов атьтаблицу с именем CLIENTS в кома нд еточ но та к же, как имяPETROV.STUDENT.
К ак уже гов орилось, п рефикс п ольз ов а теля – |
э то фактич ески |
ч а сть |
|||||||
имени любой таблицы. |
Всякий раз , |
когд а |
п ольз ов атель не указ ыв ает |
||||||
собств енное имя в месте с |
именем св оей |
та блицы, SQL п о умолч а нию |
|||||||
п од ста в ляет |
ид ентификатор |
п ольз ов а теля |
в |
кач еств е п рефикса |
имени |
||||
таблицы. След ов ательно, |
д в а |
од инаков ых имени таблицы, но св яз а нные с |
|||||||
раз лич ными |
в лад ельцами, |
ста нов ятся неид ентич ными и, след ов ательно, |
не |
||||||
п рив од ят к |
какой-либо |
п утанице в |
з ап росах. |
Та ким обра з ом, |
д в а |
п ольз ов ателя могут соз д а в ать д в е п олностью нез а в исимые таблицы с од инаков ыми именами, но это та кжеоз нач ает, ч то од ин п ольз ов ательможет соз д а тьп ред став ление, основ а нноена имени, стоящ емп ослеимени та блицы, и исп ольз уемымд ругимп ольз ов ателем. Э то иногд а д елаетсяв случ аях, когд а п ред став лениеисп ольз уетсякак з амена самой исход ной таблицы, на п ример,
если п ред став ление п росто исп ольз ует CHECK |
OPTION как |
з аменитель |
|||||||||
огранич енияCHECK в баз ов ой таблице. М ожно такжесоз д ав ать собств енные |
|||||||||||
синонимы |
п ольз ов а теля, имена |
котор ых |
буд ут |
такими |
же, |
как и |
|||||
п ерв онач альные имена |
таблиц. Н ап р имер, |
п ольз ов атель PETROV |
может |
||||||||
оп ред елитьимяSTUDENT как св ой синонимд лятаблицы IVANOV.STUDENT |
|||||||||||
с п омощ ьюз ап р оса : |
|
|
|
|
|
|
|
|
|
||
CREATE SYNONYM STUDENT FOR IVANOV.STUDENT; |
|
|
|
|
|||||||
С точ ки з ренияSQL, теп ерьимеютсяд в а ра з ных имени од ной та блицы: |
|||||||||||
IVANOV.STUDENT |
и |
PETROV.STUDENT. |
О д нако |
ка жд ый |
из |
этих |
|||||
п ольз ов ателей может |
обращ аться к д а нной |
таблице, |
исп ольз уя имя |
||||||||
STUDENT. |
SQL, |
ка к |
гов орилось в ыше, |
сам |
д обав ит |
к |
этому |
имени |
|||
нед остающ иеимена п ольз ов ателей |
кач еств еп рефиксов . |
|
|
|
|
138
6.11.С иноним ы общ егопол ь з ования
(PUBLIC)
Е сли п ланируется |
исп ольз ов ать та блицу STUDENT большим ч ислом |
п ольз ов ателей, уд обнее, |
ч тобы в сеп ольз ов атели ссыла лиськ ней с п омощ ью |
од ного и того же имени. Э то д аст в оз можность, на п ример, исп ольз ов ать
указ а нное имя без огранич ений в п риклад ных п рогра мма х. |
Ч тобы соз д ать |
|
ед иноеимяд ляв сех п ольз ов ателей, соз д аетсяобщ ий синоним. |
|
|
Н а п ример, если в сеп ольз ов а тели буд ут в ыз ыв атьтаблицу STUDENT с |
||
д анными о студ ентах, |
можно п р исв оить ей о бщи й синоним STUDENT |
|
след ующ имобраз ом: |
|
|
CREATE PUBLIC SYNONYM STUDENT FOR STUDENT; |
|
|
О бщ ие синонимы |
основ ном соз д аются в лад ельцами |
объектов или |
п ольз ов ателями с п рив илегиями ад министратора баз ы д анных (п ольз ов а тель
DBA). Д р угим п ольз ов ателям |
п р и этом д олжны |
быть п ред остав лены |
соотв етств ующ ие п р ив илегии в |
таблице STUDENT, |
ч тобы она была им |
д оступ на. Д ажеесли имяяв ляетсяобщ им, сама таблица общ ей неяв ляется.
6.12. Удал ение синоним ов
О бщ иеи д ругиесинонимы могут уд алятьсякома нд ой DROP SYNONYM. Синонимы могут уд алятьсятолько их в лад ельца ми, кр омеобщ их синонимов ,
которые |
могут уд а ляться соотв етств ующ ими п рив илегиров а нными |
|
п ольз ов ателями (обыч но это п ольз ов атели DBA). Ч тобы уд алить, |
на п ример, |
|
синоним |
CLIENTS, когд а в место него уже п ояв ился общ ий |
синоним |
STUDENT, п ольз ов ательможет в в ести кома нд у |
|
DROP SYNONYM CLIENTS;
139
7. Упр а влен и етр а н за кци ями
В п роцессев ып олненияп ослед ов ательности команд SQL таблицы баз ы
д анных не в сегд а |
могут наход иться в согласов а нном состоянии. В случ ае |
||||
в оз никнов ения |
ка ких-либо |
сбое , |
когд а |
логич ески |
св яз анная |
п ослед ов ательностьз ап р осов |
не д ов ед ена |
д о конца, в оз можно |
нарушение |
целостности д анных в баз е. Д ляобесп еч енияцелостности д анных логич ески
св яз анные |
п ослед ов а тельности |
з ап росов , |
нед елимые |
с точ ки |
з рения |
||||||
в оз д ейств ия на баз у |
д а нных, объед иняют |
так |
наз ыв аемые т р а нза кци и . |
||||||||
Зап росы, |
состав ляющ ие |
транз а кцию, |
д олжны |
или |
в ып олняться в се |
||||||
п олностью – |
с п ерв ого |
д о п ослед него, и |
тогд а |
транз акция з ав ер шается |
|||||||
команд ой |
COMMIT, или, |
если в |
силу |
каких-либо в нешних |
п р ич ин это |
||||||
оказ ыв ается нев оз можным, в несенные з а п росами |
транз акции |
из менения в |
|||||||||
баз е д а нных |
д олжны |
аннулиров аться кома нд ой |
ROLLBACK. |
Во |
в тором |
||||||
случ а е баз а |
д анных |
в оз в ращ ается в |
целостное состояние на |
момент, |
п ред шеств ующ ий нач а лу транз а кции. Э то наз ыв а ют о т ка т о м транз а кции.
Н ов а я транз а кция нач инается п осле кажд ой кома нд ы |
COMMIT или |
||
ROLLBACK. |
|
|
|
В большинств е реализ а ций можно установ ить п араметр, наз ыв аемый |
|||
AUTOCOMMIT. |
О н буд ет |
а в томатич ески з ап омина ть в се |
в ып олняемые |
д ейств ия над |
д а нными. |
Д ейств ия, которые п рив ед ут к |
ошибке п ри |
нез а в ершенной транз акции, в сегд а буд ут а в томатич ески “откатаны” обра тно.
Имеется в оз можностьуста нов ки режима AUTOCOMMIT а в томатич ески п ри р егистрации. Е сли сеанс п ольз ов а теляз ав ерша етсяав а рийно, на п ример, п роиз ошел сбой системы или в ып олнена п ер ез агруз ка п ольз ов ателя, то текущ ая транз акция в ып олнит а в томатич еский откат из менений. Э то – од на из в оз можностей уп ра в ления в ып олнением д иа логов ой обработки з ап росов п утем ра з д еления кома нд на большое колич еств о ра з лич ных тр анз акций. О д иноч ная транз а кция не д олжна сод ержатьслишком много несв яз анных команд , на п рактикеона ч а сто состоит из ед инств енной команд ы. Х орошее п рав ило, которому можно след ов ать– это соз д ав атьтранз а кции из од ной команд ы или нескольких близ ко св яз анных команд .
Н а п ример, требуетсяуд а литьсв ед енияо студ ентеп о фамилии ‘Ива н о в’ из баз ы д анных. Прежд е, ч емсв ед енияиз таблицы STUDENT буд ут уд а лены,
140
требуетсяосущ еств итьоп ред еленныед ейств ияс д анными об этомстуд ентев д ругих таблица х, в ч астности с д а нными о его оценках. Н еобход имо уста нов итьсоотв етств ующ ее этому студ енту п оле STUDENT_ID в та блице EXAM_MARKS в NULL. Послеэтого можно уд алитьз ап исьоб этом студ енте из таблицы STUDENT. Э ти д ейств ияв ып олняютсяс п омощ ьюд в ух з ап р осов
UPDATE EXAM_MARKS
SET STUDENT_ID = NULL
WHERE STUDENT_ID = 1004;
DELETE FROM STUDENT
WHERE STUDENT_ID = 1004;
Е сли в оз никает п роблема с уд а лением з ап иси о студ ентес фа милией ‘Ива н о в’ (в оз можно, имеетсяд ругой в нешний ключ , ссылающ ийсяна него, о котором небыло из в естно, и, соотв етств енно, неуч тено п ри уд алении), можно было бы отменитьв сесд ела нныеиз менения, п о кра йней мере, д о тех п ор, п ока п роблема небуд ет решена . Д ляэ того п рив ед еннуюгр уп п у команд след ует обрабатыв ать как од иноч ную тра нз акцию, п ред усматрив ая ее з ав ершениес п омощ ью команд ы COMMIT или ROLLBACK – в з ав исимости от рез ультата.
УП Р АЖ НЕ НИ Я
121. Вы п еред али п ра в о SELECT в таблице EXAM_MARKS п ольз ов ателю IVANOV. Вв ед итекома нд у так, ч тобы в ы могли ссылатьсяк э той таблице, как к EXAM_MARKS, неисп ольз уяимяIVANOV в кач еств еп рефикса .
122. Е сли п роиз ойд ет сбой п итания, ч то случ ится со в семи из менениями, сд еланными в о в ремятекущ ей тра нз акции?