Вы находитесь на странице: 1из 48

Ë À Â À 12

Îáåñïå÷åíèå çàùèòû
áàçû äàííûõ
 ýòîé ãëàâå. . .

• Ñîçäàíèå ó÷åòíûõ çàïèñåé è ðîëåé


• Èñïîëüçîâàíèå ðîëåé äëÿ êîíòðîëÿ äîñòóïà ê îáúåêòàì
• Îãðàíè÷åíèå äîñòóïà ê äàííûì ïîñðåäñòâîì ïðåäñòàâëåíèé è ïðîöåäóð
• Øèðîâàíèå äàííûõ
• Óñòàíîâêà è îòñëåæèâàíèå ðåâèçèè çàùèòû

. Ñîçäàíèå è ðåäàêòèðîâàíèå ó÷åòíûõ çàïèñåé


 íàñòîÿùåå âðåìÿ ðàçðàáîò÷èêè è ïîëüçîâàòåëè âñå áîëüøå îñîçíàþò âàæíîñòü
çàùèòû äàííûõ. àíåå îðãàíèçàöèÿ ìîãëà íàíÿòü àäìèíèñòðàòîðà, îòâå÷àþùåãî çà
áåçîïàñíîñòü, èëè êîíñóëüòàíòà ïî äàííîìó âîïðîñó. Ýòè ñïåöèàëèñòû ïîìîãàëè íà-
ñòðàèâàòü ñèñòåìó, îáåñïå÷èâàëè îïðåäåëåííûé óðîâåíü çàùèòû, ïîñëå ÷åãî ïðåäïî-
ëàãàëîñü, ÷òî áåçîïàñíîñòü äàííûõ ãàðàíòèðîâàíà. Òåïåðü ïðè ðàáîòå ñ áàçîé äàííûõ
àäìèíèñòðàòîð íàðÿäó ñ âûïîëíåíèåì îñòàëüíûõ îáÿçàííîñòåé çàíèìàåòñÿ îáåñïå-
÷åíèåì áåçîïàñíîñòè.  íàñòîÿùåå âðåìÿ âîïðîñû çàùèòû ñòàíîâÿòñÿ âñå âàæíåå,
ïîýòîìó ñîçäàíèå óñëîâèé äëÿ áåçîïàñíîé ðàáîòû ñòàíîâèòñÿ âñå òðóäíåå. ×èñëî
àòàê óâåëè÷èâàåòñÿ, è ñèñòåìà ðàáîòàåò â óñëîâèÿõ ïîñòîÿííîé óãðîçû.  ðåçóëüòà-
òå ïðèõîäèòñÿ ïðåäóñìàòðèâàòü çàùèòó óæå íà ýòàïå ðàçðàáîòêè. Ñðåäñòâà çàùèòû
äîëæíû áûòü èíòåãðèðîâàíû â ïðèëîæåíèå, à íå ñâÿçûâàòüñÿ ñ ãîòîâîé ïðîãðàììîé.
CD124 ëàâà 12. Îáåñïå÷åíèå çàùèòû áàçû äàííûõ

Äëÿ òîãî ÷òîáû ïîíÿòü, êàê ðàáîòàþò ñðåäñòâà çàùèòû, íåîáõîäèìî ïðåäñòàâëÿòü
ñåáå, îòêóäà èñõîäèò óãðîçà. Ïîäðîáíîå îáñóæäåíèå âîïðîñîâ áåçîïàñíîñòè âûõîäèò
çà ðàìêè äàííîé êíèãè; ìû îáñóäèì ëèøü íåñêîëüêî îñíîâíûõ ïîíÿòèé. Îäíà èç
âàæíûõ îñîáåííîñòåé ðàáîòû ñîâðåìåííûõ ñèñòåì ñîñòîèò â òîì, ÷òî äåéñòâèÿ, âû-
ïîëíÿåìûå âíóòðè êîðïîðàöèè, ïðèâîäÿò ê çíà÷èòåëüíî áîëüøèì ïîòåðÿì äåíåã, ÷åì
àòàêè èçâíå. Êðîìå òîãî, ïîòåðè äàííûõ ÷àñòî âûçûâàþòñÿ ïðè÷èíàìè, íå èìåþùèì
îòíîøåíèÿ ê íàìåðåíèÿì çëîóìûøëåííèêîâ: ïîæàðîì, íàâîäíåíèåì, íåèñïðàâíîñòüþ
àïïàðàòóðû, íåêâàëèèöèðîâàííûìè äåéñòâèÿìè ïîëüçîâàòåëåé è ò.ä. Êîíå÷íî, àòà-
êè èçâíå íåëüçÿ ñáðàñûâàòü ñî ñ÷åòîâ. Îäíàêî âûÿâèòü è óñòðàíèòü óãðîçó èçíóòðè
÷àñòî áûâàåò ãîðàçäî òðóäíåå. Ïîëüçîâàòåëÿì ñèñòåìû ïðèõîäèòñÿ äîâåðÿòü. Ñîòðóä-
íèêè äîëæíû èìåòü âîçìîæíîñòü âûïîëíÿòü ñâîþ ðàáîòó, ïðè÷åì áîëüøèíñòâî èç
íèõ äåëàþò ýòî âïîëíå äîáðîñîâåñòíî. Äîñòóï ê ñèñòåìå íóæåí òàêæå êîíñóëüòàíòàì
è äåëîâûì ïàðòíåðàì. Îäíàêî ýòîò äîñòóï äîëæåí áûòü îãðàíè÷åí. Òàêèì îáðàçîì,
îäíà èç îñíîâíûõ è ñàìûõ òðóäíûõ çàäà÷  âûÿñíèòü, äîñòóï ê êàêèì äàííûì òðå-
áóåòñÿ ñîòðóäíèêó, à êàêèå äàííûå ñëåäóåò ñêðûòü îò íåãî. Âûÿâëåíèå è óñòàíîâêà
íåîáõîäèìûõ ïðàâ äëÿ ïîëüçîâàòåëåé  îäíà èç ïðè÷èí, ïî êîòîðûì ñðåäñòâà çàùèòû
äîëæíû ïðîåêòèðîâàòüñÿ óæå íà ðàííèõ ñòàäèÿõ ðàáîòû íàä ïðèëîæåíèåì. Èìåííî
ðàçðàáîò÷èêè ëó÷øå äðóãèõ ïîíèìàþò ñèñòåìó, ïîýòîìó îíè äîëæíû îïðåäåëÿòü ðî-
ëè ñîòðóäíèêîâ.
Ñèñòåìà çàùèòû áàçû äàííûõ ïðåñëåäóåò òðè îñíîâíûå öåëè: îáåñïå÷èòü êîíè-
äåíöèàëüíîñòü, öåëîñòíîñòü è äîñòóïíîñòü ñèñòåìû. Êîíèäåíöèàëüíîñòü îçíà÷àåò,
÷òî äîñòóï ê äàííûì ìîãóò ïîëó÷àòü òîëüêî àâòîðèçîâàííûå ïîëüçîâàòåëè. Íàïðè-
ìåð, ñâåäåíèÿ î ñîñòîÿíèè çäîðîâüÿ äîëæíû áûòü äîñòóïíû îãðàíè÷åííîìó ÷èñ-
ëó ïîëüçîâàòåëåé, ïðèíàäëåæàùèõ â îñíîâíîì ðóêîâîäñòâó êîìïàíèè. Ñîòðóäíèêàì,
âûïèñûâàþùèì ñ÷åòà, èìåòü ýòó èíîðìàöèþ íå îáÿçàòåëüíî. Êîíèäåíöèàëüíîñòü
ïðåäïîëàãàåò è çàùèòó ñåðâåðîâ áàç äàííûõ è êàíàëîâ ïåðåäà÷è, à òàêæå àóòåíòèè-
êàöèþ ïîëüçîâàòåëåé.
Öåëîñòíîñòü îçíà÷àåò íàëè÷èå îïðåäåëåííîé ñèñòåìû çàïèñè äàííûõ è èõ õðàíå-
íèÿ. Íåîáõîäèìî, ÷òîáû áûëà ðàçðàáîòàíà ïðîöåäóðà âîññòàíîâëåíèÿ ñèñòåìû â ñëó-
÷àå ñáîåâ, à íåàâòîðèçîâàííûå ïîëüçîâàòåëè íå äîëæíû èìåòü ïðàâî èçìåíÿòü äàííûå.
Íàïðèìåð, ðÿäîâûì ñîòðóäíèêàì íåëüçÿ ïðåäîñòàâëÿòü âîçìîæíîñòü ìîäèèöèðîâàòü
èòîãîâûå äàííûå, îòðàæàþùèå ðåçóëüòàòû ïðîäàæ.
Âîïðîñû äîñòóïíîñòè òàêæå ÷ðåçâû÷àéíî âàæíû, íî èì ÷àñòî íå óäåëÿþò äîëæ-
íîãî âíèìàíèÿ. Äîñòóïíîñòü îçíà÷àåò âîçìîæíîñòü îáðàùàòüñÿ ê ñèñòåìå â ñëó÷àå
íåîáõîäèìîñòè. Ê âîïðîñàì äîñòóïíîñòè òàêæå èìååò îòíîøåíèå ñîçäàíèå ðåçåðâ-
íûõ êîïèé íà ñëó÷àé íåèñïðàâíîñòè ñèñòåìû. Àâòîðèçîâàííûå ïîëüçîâàòåëè äîëæíû
èìåòü äîñòóï ê ñèñòåìå. Èíîãäà óñèëèÿ ïî îáåñïå÷åíèþ áåçîïàñíîñòè çàõîäÿò òàê
äàëåêî, ÷òî ïîëüçîâàòåëè íà÷èíàþò èñïûòûâàòü ðåàëüíûå ïðîáëåìû, ïûòàÿñü íà-
÷àòü ðàáîòó.
Ñîçäàíèå è ðåäàêòèðîâàíèå ó÷åòíûõ çàïèñåé CD125

Íà äîñòóïíîñòü òàêæå îêàçûâàþò âëèÿíèå ðàáîòû ïî ñîçäàíèþ ðåçåðâíûõ êîïèé


è âîññòàíîâëåíèþ ñèñòåìû. åçåðâèðîâàíèå  îäíà èç êëþ÷åâûõ ïðîöåäóð, îáåñïå-
÷èâàþùèõ áåçîïàñíîñòü áàçû äàííûõ. Âîïðîñû ñîçäàíèÿ ðåçåðâíûõ êîïèé è âîñ-
ñòàíîâëåíèÿ èíîðìàöèè áóäóò îáñóæäàòüñÿ â ãëàâå 13. Äëÿ èõ ðåøåíèÿ íåîáõîäèìî
ïîíèìàòü, êàê õðàíÿòñÿ äàííûå â ñèñòåìå Ora le, è îáëàäàòü ïðàâàìè àäìèíèñòðàòîðà.
 äàííîé ãëàâå îáñóæäàþòñÿ îñíîâíûå èíñòðóìåíòû, ïðåäîñòàâëÿåìûå Ora le
è ïðåäíàçíà÷åííûå äëÿ ïîâûøåíèÿ óðîâíÿ çàùèòû áàçû äàííûõ. Îäíàêî íå çàáûâàéòå
è î íàëè÷èè òðàäèöèîííûõ ñðåäñòâ çàùèòû, òàêèõ êàê ïðîâåðêà ïîëüçîâàòåëåé, óñòà-
íîâêà áðàíäìàóýðîâ è îãðàíè÷åíèå èçè÷åñêîãî äîñòóïà ê ñåðâåðó. Äàííûå âîïðîñû
ïîäðîáíî ðàññìàòðèâàþòñÿ â êíèãàõ, ñïåöèàëüíî ïîñâÿùåííûõ áåçîïàñíîñòè ñèñòåì.

Àóòåíòèèêàöèÿ ïîëüçîâàòåëåé
Êòî âû? Êàê êîìïüþòåð óçíàåò îá ýòîì? Äàííûé âîïðîñ  îäèí èç êëþ÷åâûõ â ñè-
ñòåìå áåçîïàñíîñòè. Ê ñîæàëåíèþ, ñ íèì ñâÿçàíû ïðîáëåìû, ðåøèòü êîòîðûå äî-
ñòàòî÷íî òðóäíî.  íàñòîÿùåå âðåìÿ ñàìûì ðàñïðîñòðàíåííûì ñïîñîáîì àóòåíòè-
èêàöèè ïîëüçîâàòåëåé ÿâëÿåòñÿ ñèñòåìà ðåãèñòðàöèîííûõ èìåí è ïàðîëåé. Ïàðîëü
çíàåò òîëüêî ïîëüçîâàòåëü è ñèñòåìà. Åñëè ïîëüçîâàòåëü óêàæåò êîððåêòíîå ñî÷åòàíèå
ðåãèñòðàöèîííîãî èìåíè è ïàðîëÿ, îí áóäåò èäåíòèèöèðîâàí êîìïüþòåðîì.
Òåîðåòè÷åñêè ïîäõîä, áàçèðóþùèéñÿ íà èìåíè ïîëüçîâàòåëÿ è ïàðîëå, âïîëíå
íàäåæåí. Êðîìå òîãî, îí î÷åíü ïðîñòî ðåàëèçóåòñÿ  äîñòàòî÷íî èìåòü íàäåæíóþ
ñèñòåìó øèðîâàíèÿ ïàðîëåé. Íà ïðàêòèêå âñå îêàçûâàåòñÿ ñëîæíåå. Áîëüøèíñòâî
âîçíèêàþùèõ ïðîáëåì ðåøèòü íåâîçìîæíî. Íàïðèìåð, ïîëüçîâàòåëþ î÷åíü òðóäíî
çàïîìíèòü äåñÿòêè ïàðîëåé, ïîýòîìó îí çàïèñûâàåò èõ èëè âûáèðàåò êîðîòêèå ïîñëå-
äîâàòåëüíîñòè ñèìâîëîâ. Ê ñ÷àñòüþ, äàííàÿ ïðîáëåìà ïîääàåòñÿ ðåøåíèþ. Âìåñòî
òîãî ÷òîáû çàñòàâëÿòü ïîëüçîâàòåëÿ ðåãèñòðèðîâàòüñÿ äåñÿòêè ðàç, ìîæíî ðåàëèçîâàòü
ïðîöåäóðó åäèíñòâåííîé ðåãèñòðàöèè. Ïðè ýòîì ïîëüçîâàòåëü, ðàáîòàÿ â ïðåäåëàõ îä-
íîé îðãàíèçàöèè, äîëæåí áóäåò çàïîìíèòü åäèíñòâåííîå ñî÷åòàíèå ðåãèñòðàöèîííîãî
èìåíè è ïàðîëÿ. Çàðåãèñòðèðîâàâøèñü îäèí ðàç, îí ïîëó÷èò âîçìîæíîñòü ðàáîòàòü
ñ ëþáîé èç ñèñòåì, ê êîòîðûì åìó ðàçðåøåí äîñòóï.
Ïðèëîæåíèÿ Ora le ïîääåðæèâàþò åäèíóþ ðåãèñòðàöèþ, îäíàêî äëÿ ýòîãî òðåáó-
þòñÿ îïðåäåëåííûå êîìïîíåíòû è äîïîëíèòåëüíàÿ íàñòðîéêà. Ïîìíèòå, êàê âû çàïóñ-
êàëè ïðèëîæåíèå, ñîçäàííîå â ãëàâå 11? Âû ðåãèñòðèðîâàëèñü îäèí ðàç äëÿ ðàáîòû
ñ îðìàìè è åùå îäèí ðàç äëÿ ïðîñìîòðà îò÷åòîâ. Äâîéíàÿ ðåãèñòðàöèÿ íåîáõîäèìà
áûëà ïîòîìó, ÷òî îðìû è îò÷åòû ïîääåðæèâàþòñÿ ðàçëè÷íûìè ïðîöåññîðàìè. Åñëè
â êîìïàíèè èñïîëüçóåòñÿ íåñêîëüêî ïðèëîæåíèé, ïîëüçîâàòåëþ ïðèäåòñÿ ðåãèñòðèðî-
âàòüñÿ äëÿ ðàáîòû ñ êàæäûì èç íèõ. Îäèíî÷íàÿ ðåãèñòðàöèÿ ïîçâîëÿåò óñòðàíèòü ïðî-
áëåìó èëè ïî êðàéíåé ìåðå ñäåëàòü åå ìåíåå îñòðîé. Åñëè âû èíñòàëëèðîâàëè Ora le
Enterprise Edition, âàì ïðèäåòñÿ óñòàíîâèòü è ñêîíèãóðèðîâàòü OID (Ora le Internet
Dire tory). OID ïîääåðæèâàåò ïîëíîìî÷èÿ ïîëüçîâàòåëÿ äëÿ âñåõ ïðèëîæåíèé Ora-
le. Ïðè ïåðåíîñå ïðèëîæåíèÿ íà Ora leAS âû ìîæåòå ñêîíèãóðèðîâàòü ñåðâåð äëÿ
CD126 ëàâà 12. Îáåñïå÷åíèå çàùèòû áàçû äàííûõ

ðàáîòû ñ OID. Åñëè âñå ïðèëîæåíèÿ èñïîëüçóþò OID, ïîëüçîâàòåëþ ïðèäåòñÿ ðåãè-
ñòðèðîâàòüñÿ åäèíîæäû. Åùå âàæíåå òîò àêò, ÷òî OID ïîääåðæèâàåò ïðîòîêîë LDAP
(Lightweight Dire tory Appli ation Proto ol), êîòîðûé ÿâëÿåòñÿ ñòàíäàðòíûì ñðåäñòâîì
äëÿ õðàíåíèÿ ñâåäåíèé î ïîëüçîâàòåëå. OID ìîæåò âûáèðàòü ïîëíîìî÷èÿ äëÿ ðàçíûõ
ïëàòîðì, âêëþ÷àÿ Mi rosoft A tive Dire tory èëè SunONE Dire tory Server. Äðóãèìè
ñëîâàìè, ïîëüçîâàòåëè ðåãèñòðèðóþòñÿ íà ñâîèõ êîìïüþòåðàõ, è ðåçóëüòàòû àóòåí-
òèèêàöèè ñòàíîâÿòñÿ äîñòóïíû ñåðâåðàì Ora le. Òàêèì îáðàçîì, äàæå ïðè ðàáîòå
íà ðàçíûõ ïëàòîðìàõ ïîëüçîâàòåëü ïðîõîäèò ïðîöåäóðó ðåãèñòðàöèè îäèí ðàç. Äëÿ
êîíèãóðàöèè ñèñòåì ïðèõîäèòñÿ çàòðàòèòü ìíîãî óñèëèé, íî ðàáîòà ïîëüçîâàòåëåé
ñóùåñòâåííî óïðîùàåòñÿ, è óðîâåíü áåçîïàñíîñòè ïîâûøàåòñÿ, ïîñêîëüêó àóòåíòè-
èêàöèÿ âûïîëíÿåòñÿ â îäíîì ìåñòå è ïîëüçîâàòåëÿì ïðèõîäèòñÿ çàïîìèíàòü òîëüêî
îäèí íàáîð èäåíòèèêàöèîííûõ äàííûõ. àññìîòðåíèå âîïðîñîâ íàñòðîéêè OID âû-
õîäèò çà ðàìêè äàííîé êíèãè, íî âû äîëæíû çíàòü î íàëè÷èè óïîìÿíóòûõ çäåñü
âîçìîæíîñòåé è óìåòü âîñïîëüçîâàòüñÿ èìè.
Ïðè îòñóòñòâèè OID èëè LDAP ïðèøëîñü áû ñîçäàâàòü ó÷åòíûå çàïèñè ïîëüçî-
âàòåëåé â áàçå äàííûõ Ora le. îðàçäî ïðîùå ïðîòåñòèðîâàòü ïðèëîæåíèå ñ áàçîé
äàííûõ íà îäíîé ñèñòåìå, à çàòåì ïåðåíåñòè åãî íà Ora leAS è OID. Î÷åíü ÷àñòî âîç-
íèêàåò íåîáõîäèìîñòü ñîçäàâàòü ó÷åòíóþ çàïèñü ïîëüçîâàòåëÿ íà ñâîåì êîìïüþòåðå.
Ñîîòâåòñòâóþùàÿ êîìàíäà SQL èìååò ñëåäóþùèé âèä:
CREATE USER
<ðåãèñòðàöèîííîå_èìÿ>
IDENTIFIED BY <ïàðîëü>
Âû òàêæå ìîæåòå âûäåëèòü ïîëüçîâàòåëþ ïðîñòðàíñòâî äëÿ õðàíåíèÿ èíîðìà-
öèè. Îáû÷íî âûïîëíÿòü ïîäîáíûå óñòàíîâêè ïðèõîäèòñÿ òîãäà, êîãäà ïîëüçîâàòåëü
ìîæåò ñîçäàâàòü òàáëèöû.  áîëüøèíñòâå ñëó÷àåâ âàøè ïîëüçîâàòåëè áóäóò ëèøåíû
ïîäîáíûõ ïðàâ, ïîýòîìó âïîëíå ìîæíî ïðèíÿòü çíà÷åíèÿ ïî óìîë÷àíèþ. Äëÿ òåñòèðî-
âàíèÿ ñðåäñòâ çàùèòû ïðèëîæåíèÿ Redwood Realty âàì ïîíàäîáèòñÿ êàê ìèíèìóì äâå
ó÷åòíûå çàïèñè. Ïðè ýòîì â âàøåé ñîáñòâåííîé ó÷åòíîé çàïèñè äîëæíû áûòü ïðåäó-
ñìîòðåíû ïðàâà äëÿ ñîçäàíèÿ íîâûõ ïîëüçîâàòåëåé. Âàì ïîòðåáóþòñÿ ëèáî ïðèâèëå-
ãèè àäìèíèñòðàòîðà áàçû äàííûõ, ëèáî, êàê ìèíèìóì, ïîëíîìî÷èÿ CREATE USER.

1. Ñîçäàéòå ó÷åòíóþ çàïèñü àãåíòà Kai Mar oux:


CREATE USER Mar ouxK IDENTIFIED BY hangeme;
GRANT Create Session To Mar ouxK;
2. Ñîçäàéòå ó÷åòíóþ çàïèñü ìåíåäæåðà Tobias Carling:
CREATE USER CarlingT IDENTIFIED BY hangeme2
GRANT Create Session To CarlingT;

Âû ìîæåòå âûáðàòü ëþáûå ïàðîëè, íî îáÿçàòåëüíî çàïîìíèòå èõ. Òàêæå áóäüòå


âíèìàòåëüíû ïðè íàçíà÷åíèè ïðàâ äëÿ ýòèõ ó÷åòíûõ çàïèñåé, ïîñêîëüêó äðóãèå ïîëü-
çîâàòåëè ñìîãóò ïîëó÷èòü äîñòóï ê âàøåé áàçå äàííûõ. Êàê âû óâèäèòå â ãëàâå 13,
Ñîçäàíèå è ðåäàêòèðîâàíèå ó÷åòíûõ çàïèñåé CD127

èñ. 12.1. Ñîçäàíèå ó÷åòíîé çàïèñè ïîëüçîâàòåëÿ ñ ïîìîùüþ Enterprise Manager

ïðè íàëè÷èè ïðàâ àäìèíèñòðàòîðà âû ìîæåòå èñïîëüçîâàòü Enterprise Manager äëÿ


ñîçäàíèÿ ó÷åòíûõ çàïèñåé è íàçíà÷åíèÿ ïîëíîìî÷èé. Ïîñêîëüêó ïðàâ àäìèíèñòðà-
òîðà áàçû äàííûõ ó âàñ íåò, â ýòîé ãëàâå áóäåò ðàññìàòðèâàòüñÿ ïîäõîä, ñâÿçàííûé
ñ èñïîëüçîâàíèåì SQL. Íà ðèñ. 12.1 ïîêàçàíî îêíî Enterprise Manager, ïîçâîëÿþùåå
íàçíà÷àòü íîâûõ ïîëüçîâàòåëåé. Âû ââîäèòå äàííûå (èìÿ ïîëüçîâàòåëÿ è ïàðîëü), è
äëÿ âàñ îðìèðóåòñÿ òðåáóåìàÿ êîìàíäà SQL. Ýòîò èíñòðóìåíò õîðîøî ïîäõîäèò,
åñëè âû çàáûëè ñèíòàêñèñ CREATE USER. Îäíàêî åñëè íåîáõîäèìî ñîçäàòü äâå èëè
áîëåå ó÷åòíûõ çàïèñåé, îí íå î÷åíü óäîáåí.  ýòîì ñëó÷àå öåëåñîîáðàçíî íàïèñàòü
ñöåíàðèé, êîòîðûé áóäåò ÷èòàòü ðåãèñòðàöèîííûå èìåíà è ïàðîëè èç àéëà è ñîçäà-
âàòü ó÷åòíûå çàïèñè.
Çàìåòüòå, ÷òî âòîðàÿ ñòðîêà (GRANT Create Session) íåîáõîäèìà äëÿ òîãî, ÷òî-
áû ðàçðåøèòü ïîëüçîâàòåëþ ðåãèñòðàöèþ. Îáû÷íîå ñîçäàíèå ó÷åòíîé çàïèñè ïîëü-
çîâàòåëÿ íå ïîäðàçóìåâàåò ýòîé âîçìîæíîñòè. Äëÿ òîãî ÷òîáû íà÷àòü ñåàíñ ðàáîòû,
íóæíû ñïåöèàëüíûå ïðàâà.
CD128 ëàâà 12. Îáåñïå÷åíèå çàùèòû áàçû äàííûõ

Ñîâåò . Åñëè ïðè âûïîëíåíèè âûðàæåíèé CREATE èëè GRANT âû ïîëó÷èòå ñîîáùåíèå
îá îøèáêå, ýòî çíà÷èò, ÷òî â âàøåé ñîáñòâåííîé ó÷åòíîé çàïèñè íå ïðåäóñìîòðåíû
ïðàâà äëÿ ñîçäàíèÿ ïîëüçîâàòåëåé. Âàì íàäî îáðàòèòüñÿ ê àäìèíèñòðàòîðó è ïîïðî-
ñèòü åãî óñòàíîâèòü ïîëíîìî÷èÿ CREATE USER è CREATE SESSION WITH ADMIN.
Îäíàêî ó÷èòå, ÷òî àäìèíèñòðàòîðû ïðåäïî÷èòàþò íå ïðåäîñòàâëÿòü ïîäîáíûõ ïðàâ.

Ïîëüçîâàòåëüñêèå ðîëè
 ãëàâå 2 áûëè êðàòêî îïèñàíû äâå îñíîâíûå êîìàíäû SQL, èìåþùèå îòíîøåíèå
ê áåçîïàñíîñòè: GRANT è REVOKE. Êàê âû ïîìíèòå, GRANT ïðåäîñòàâëÿåò ïîëüçîâàòåëþ
ïðàâî äîñòóïà ê òàáëèöå, à REVOKE îòìåíÿåò ïîëíîìî÷èÿ. Ñèíòàêñèñ îáåèõ êîìàíä
î÷åíü ïðîñò:
GRANT
ïðèâèëåãèÿ [, ïðèâèëåãèÿ [, ïðèâèëåãèÿ℄ ... ℄ | ALL PRIVILEGES
ON îáúåêò
TO ïîëüçîâàòåëü
[IDENTIFIED BY ïàðîëü ℄ [, ïîëüçîâàòåëü_2 [, ïîëüçîâàòåëü_3 ℄... ℄
| PUBLIC [WITH GRANT OPTION℄
Åäèíñòâåííàÿ ïðîáëåìà ñîñòîèò â òîì, ÷òî âûðàæåíèÿ GRANT è REVOKE äîâîëüíî
ðåäêî ïðèõîäèòñÿ ïðèìåíÿòü ê îäíîìó êîíêðåòíîìó ïîëüçîâàòåëþ. àññìîòðèì ýòîò
âîïðîñ áîëåå ïîäðîáíî. Äàæå â íåáîëüøèõ êîìïàíèÿõ, íàïðèìåð Redwood Realty, ìî-
ãóò ðàáîòàòü äåñÿòêè ðÿäîâûõ ñîòðóäíèêîâ è äî äåñÿòè ìåíåäæåðîâ. ×òî äåëàòü ïðè
ïîÿâëåíèè íîâîãî ñîòðóäíèêà? Êòî-òî äîëæåí íàçíà÷àòü åìó íåîáõîäèìûå ïîëíîìî-
÷èÿ. Åñòü ëè ãàðàíòèÿ, ÷òî ïðè óñòàíîâêå äåñÿòêîâ âàðèàíòîâ ïðàâ íå áóäåò äîïóùåíà
îøèáêà? Ìîæíî ó÷åñòü âñå ïðàâà â àéëå ñöåíàðèÿ, îäíàêî ïðè ýòîì àäìèíèñòðàòîð,
îòâå÷àþùèé çà áåçîïàñíîñòü ñèñòåìû, äîëæåí áóäåò íàéòè íóæíûé àéë è ïðîâåðèòü,
íå òðåáóåò ëè îí ìîäèèêàöèè. À ÷òî ïðîèçîéäåò, åñëè ïîòðåáóåòñÿ èçìåíèòü áàçîâûé
íàáîð ïðèâèëåãèé äëÿ âñåõ ñîòðóäíèêîâ? Íåîáõîäèìî áóäåò íå òîëüêî ñïëàíèðîâàòü
òðåáóåìûå èçìåíåíèÿ, íî è íàéòè âñå ó÷åòíûå çàïèñè è ïðàâèëüíî ìîäèèöèðîâàòü
èõ. Îïèñàííûå òðóäíîñòè ìíîãîêðàòíî âîçðàñòàþò äëÿ áîëüøèõ êîìïàíèé, íàñ÷èòû-
âàþùèõ òûñÿ÷è, à òî è äåñÿòêè òûñÿ÷ ñîòðóäíèêîâ.
åøåíèåì ïðîáëåìû ÿâëÿåòñÿ èñïîëüçîâàíèå ïîëüçîâàòåëüñêèõ ðîëåé. Ïîëüçîâà-
òåëüñêàÿ ðîëü  ýòî íàáîð ïîëíîìî÷èé, êîòîðûå ïîëó÷àþò ïîëüçîâàòåëè, ïðèíàäëå-
æàùèå îïðåäåëåííîé ãðóïïå. Íàïðèìåð, âñåì ñîòðóäíèêàì îòäåëà çàðàáîòíîé ïëàòû
íóæíû îäèíàêîâûå ïîëíîìî÷èÿ, áåç êîòîðûõ îíè íå ñìîãóò âûïîëíÿòü ñâîè ñëóæåá-
íûå îáÿçàííîñòè. Âìåñòî òîãî ÷òîáû íàçíà÷àòü ïðàâà êàæäîìó ïîëüçîâàòåëþ èíäèâè-
äóàëüíî, ìîæíî ñîçäàòü ïîëüçîâàòåëüñêóþ ðîëü è óñòàíîâèòü äëÿ íåå îïðåäåëåííûé
íàáîð ïðèâèëåãèé. Ïîñëå ýòîãî ìîæíî áóäåò ñâÿçàòü ðîëü ñ êàæäûì ïîëüçîâàòåëåì.
Íà ðèñ. 12.2 óñëîâíî ïîêàçàí îïèñàííûé çäåñü ïðîöåññ. Êàê ðàçðàáîò÷èê âû äîëæ-
íû îïðåäåëèòü ðàçëè÷íûå ðîëè, íåîáõîäèìûå äëÿ âàøåãî ïðèëîæåíèÿ. Çàòåì ñëåäóåò
îïðåäåëèòü íàáîð ïðàâ äëÿ êàæäîé ðîëè. È íàêîíåö, àäìèíèñòðàòîð, îòâåòñòâåííûé
Ñîçäàíèå è ðåäàêòèðîâàíèå ó÷åòíûõ çàïèñåé CD129

Привилегии:
Добавление потребителя
Добавление списка
Добавление предложений
База данных
...
Роль: Agent

Учетные записи
StewartM
Роль: Agent

èñ. 12.2. Ïîëüçîâàòåëüñêèå ðîëè

çà áåçîïàñíîñòü ñèñòåìû, ñâÿæåò ðîëü ñ êîíêðåòíûì ïîëüçîâàòåëåì, êîòîðûé àâòîìà-


òè÷åñêè ïîëó÷èò ïîëíîìî÷èÿ, óñòàíîâëåííûå äëÿ ðîëè. Çàìåòüòå, ÷òî ïîëüçîâàòåëþ
ìîæíî ïîñòàâèòü â ñîîòâåòñòâèå íåñêîëüêî ðîëåé, è îí ïîëó÷èò ïðàâà, óñòàíîâëåííûå
äëÿ êàæäîé ðîëè. Åñòü òàêæå âîçìîæíîñòü ñîçäàòü ðîëü, êîòîðàÿ áóäåò íàñëåäîâàòü
ïîëíîìî÷èÿ îò äðóãîé ðîëè. Íàïðèìåð, ìîæíî óñòàíîâèòü ïîäîáíîå ñîîòâåòñòâèå
ìåæäó ðîëÿìè Agent è Manager.  ðåçóëüòàòå ìåíåäæåðû ïîëó÷àò âñå ïðàâà àãåíòîâ
ïëþñ äîïîëíèòåëüíûå ïîëíîìî÷èÿ, óñòàíîâëåííûå äëÿ ðîëè Manager. Ñî âðåìåíåì
íàáîðû ðîëåé è ïîëíîìî÷èé áóäóò ñòàíîâèòüñÿ âñå ñëîæíåå, ïîýòîìó íå çàáûâàéòå
àêêóðàòíî äîêóìåíòèðîâàòü èõ. Ïðè âîçíèêíîâåíèè ïðîáëåì àäìèíèñòðàòîð äîëæåí
ïðåäñòàâëÿòü ñåáå ñâÿçè ìåæäó ðîëÿìè. Â ýòîì ïîìîæåò äàæå ïðîñòîé ýñêèç.

Ñèñòåìíûå è îáúåêòíûå ïðèâèëåãèè


Ora le îïðåäåëÿåò äâà òèïà ïðèâèëåãèé, êîòîðûå ìîãóò áûòü ïðåäîñòàâëåíû ïîëüçî-
âàòåëÿì è ðîëÿì: îáúåêòíûå è ñèñòåìíûå. Îáúåêòíûå ïðèâèëåãèè ðàçðåøàþò îïåðà-
öèè íàä ñóùåñòâóþùèìè òàáëèöàìè áàçû äàííûõ, ïðåäñòàâëåíèÿìè, ïðîöåäóðàìè è
äðóãèìè ïîäîáíûìè îáúåêòàìè. Íàïðèìåð, äëÿ òîãî, ÷òîáû ÷èòàòü äàííûå èç òàáëè-
öû Customer, àãåíò äîëæåí èìåòü ïðàâà SELECT. Ñèñòåìíûå ïðèâèëåãèè ïîçâîëÿþò
ïîëüçîâàòåëÿì èçìåíÿòü ñòðóêòóðó áàçû, íàïðèìåð, ñîçäàâàòü òàáëèöû, ó÷åòíûå çà-
ïèñè ïîëüçîâàòåëåé èëè ïðåäñòàâëåíèÿ. Íàïðèìåð, ÷òîáû îïðåäåëèòü íîâóþ òàáëè-
öó, âàì ïîòðåáóþòñÿ ïðàâà CREATE TABLE. Ìàëîâåðîÿòíî, ÷òîáû ðÿäîâîé ñîòðóäíèê
ïîëó÷èë ñèñòåìíûå ïðèâèëåãèè, çà èñêëþ÷åíèåì ñëó÷àåâ, êîãäà åìó íåîáõîäèìî âû-
ïîëíèòü ñöåíàðèé, ñîçäàþùèé âðåìåííóþ òàáëèöó.  òàáë. 12.1 ïåðå÷èñëåíû íåêî-
òîðûå ñèñòåìíûå ïðèâèëåãèè, êîòîðûå ìîãóò ïîíàäîáèòüñÿ âàì â ïðîöåññå ðàáîòû.
CD130 ëàâà 12. Îáåñïå÷åíèå çàùèòû áàçû äàííûõ

ÒÀÁËÈÖÀ 12.1. ×àñòî èñïîëüçóåìûå ñèñòåìíûå ïðèâèëåãèè

ALTER SESSION
ALTER SYSTEM
ALTER USER
AUDIT ANY
BACKUP ANY TABLE
CREATE PROCEDURE
CREATE ROLE
CREATE SEQUENCE
CREATE TABLE
CREATE TRIGGER
CREATE TYPE
CREATE USER
CREATE VIEW
DROP USER
FORCE TRANSACTION

Ýòè ïðèâèëåãèè ïðîñòû, ïîýòîìó âïîëíå ìîæåò âîçíèêíóòü ñèòóàöèÿ, ïðè êîòîðîé
îíè áóäóò ïðèìåíåíû ê îáû÷íûì ïîëüçîâàòåëÿì.  ñèñòåìå Ora le îïðåäåëåíî áî-
ëåå 150 ñèñòåìíûõ ïðèâèëåãèé. Ìíîãèå èç íèõ îðèåíòèðîâàíû íà àäìèíèñòðàòîðîâ
áàç äàííûõ è âûñîêîêâàëèèöèðîâàííûõ ìåíåäæåðîâ, ïîëüçóþùèõñÿ äîâåðèåì ðóêî-
âîäñòâà. Â Ora le SQL Referen e âû íàéäåòå ïîëíûé ñïèñîê ñèñòåìíûõ ïðèâèëåãèé.
Áîëüøèíñòâî ïîëüçîâàòåëåé, êîòîðûå íå ïðèìåíÿþò ñöåíàðèè, ñïîñîáíûå èçìåíèòü
áàçó, ìîãóò îãðàíè÷èòüñÿ ëèøü íåñêîëüêèìè ïîäîáíûìè ïðèâèëåãèÿìè. Íåîáõîäè-
ìî çíàòü îñíîâíûå ïðèâèëåãèè, ïîñêîëüêó ìíîãèå èç íèõ ìîãóò ïîòðåáîâàòüñÿ äëÿ
ó÷åòíûõ çàïèñåé ðàçðàáîò÷èêîâ.
Îáúåêòíûå ïðèâèëåãèè çàâèñÿò îò òèïà êîíêðåòíîãî îáúåêòà. Èõ ìîæíî ñðàâíèòü
ñ ïðàâàìè GRANT, òàêèìè êàê DELETE è INSERT. Â òàáë. 12.2 ïðèâåäåíû íåêîòîðûå
ñâåäåíèÿ èç Ora le SQL Referen e. Äàííàÿ òàáëèöà äåìîíñòðèðóåò, êàêèå ïðàâà ìîãóò
áûòü ïðèìåíåíû ê îáúåêòó êàæäîãî òèïà. Â íåé íå óêàçàíû îáúåêòû è ïðèâèëåãèè,
î êîòîðûõ íå øëà ðå÷ü â äàííîé êíèãå. Ïðåäïîëàãàåòñÿ, ÷òî âû ÷àùå âñåãî áóäåòå
èñïîëüçîâàòü ïðàâà Table, View è Pro edure.
Îáúåêòíûå ïðèâèëåãèè ÷àùå âñåãî óñòàíàâëèâàþò äëÿ ïîëüçîâàòåëüñêèõ ðîëåé.
Âûÿñíèòü íàáîð ðîëåé, íåîáõîäèìûõ äëÿ ïðèëîæåíèÿ,  íåïðîñòàÿ çàäà÷à. Òàêæå
íåîáõîäèìî îïðåäåëèòü îáúåêòíûå ïðèâèëåãèè, íåîáõîäèìûå äëÿ êàæäîé ðîëè. Âàøà
öåëü êàê ðàçðàáîò÷èêà  ïðåäîñòàâèòü ìèíèìàëüíûé íàáîð ïðèâèëåãèé äëÿ êàæäîé
ðîëè, äîñòàòî÷íûé äëÿ òîãî, ÷òîáû ñîîòâåòñòâóþùèå ïîëüçîâàòåëè ìîãëè ýåêòèâíî
âûïîëíÿòü ñòîÿùèå ïåðåä íèìè çàäà÷è.
Ñîçäàíèå è ðåäàêòèðîâàíèå ó÷åòíûõ çàïèñåé CD131

ÒÀÁËÈÖÀ 12.2. ×àñòî èñïîëüçóåìûå îáúåêòíûå ïðèâèëåãèè

Ïðèâèëåãèÿ Table View Sequen e Pro edure, Òèï, îïðåäåëåííûé


Fun tion ïîëüçîâàòåëåì
èëè Pa kage
ALTER X X
DELETE X X
EXECUTE X X
DEBUG X X X X
FLASHBACK X X
INDEX X
INSERT X X
ON COMMIT REFRESH X
QUERY REWRITE X
REFERENCES X X
SELECT X X X
UNDER X X
UPDATE X X

Äëÿ òîãî ÷òîáû ïðàâèëüíî èäåíòèèöèðîâàòü íåîáõîäèìûå ïðàâà, íàäî áûòü çíà-
êîìûì ñ ïîíÿòèåì ðàçäåëåíèå îáÿçàííîñòåé. Íåîáõîäèìîñòü ðàçäåëåíèÿ îáÿçàííî-
ñòåé õîðîøî âèäíà íà êëàññè÷åñêîì ïðèìåðå íåçàêîííûõ äåéñòâèé, íåîäíîêðàòíî âû-
ÿâëÿåìûõ â îðãàíèçàöèÿõ ñ íèçêèì óðîâíåì êîíòðîëÿ. Ïðåäïîëîæèì, ÷òî ñîòðóäíèê
îòäåëà ñíàáæåíèÿ ðåøàåò íåçàêîííî ïîëó÷èòü äåíüãè. Îí ðåãèñòðèðóåò ïîäëîæíóþ
êîìïàíèþ-ïîñòàâùèêà, êîòîðàÿ ïðåäëàãàåò îðãàíèçàöèè, â êîòîðîé îí ðàáîòàåò, íåêî-
òîðûå òîâàðû ïî íèçêèì öåíàì. Åñëè ýòîò ñîòðóäíèê áóäåò èìåòü íåîïðàâäàííî ìíîãî
ïðàâ, îí ïîäïèøåò êîíòðàêò ñ ïîäëîæíîé èðìîé è ñîñòàâèò çàêàç. Â äàëüíåéøåì
îí óêàæåò â ñèñòåìå, ÷òî ïðîäóêöèÿ ÿêîáû ïîëó÷åíà. Êîìïàíèÿ îïëàòèò èêòèâíóþ
ïîêóïêó, è äåíüãè ïðèäóò íà ñ÷åò, êîíòðîëèðóåìûé ñîòðóäíèêîì-çëîóìûøëåííèêîì.
Ïîäîáíàÿ ñèòóàöèÿ ñòàíîâèòñÿ âîçìîæíîé ëèøü ïîòîìó, ÷òî îäèí è òîò æå ñîòðóäíèê
ìîæåò äåéñòâîâàòü íà íåñêîëüêèõ ýòàïàõ ïîêóïêè òîâàðà. Êàê ïîêàçàíî íà ðèñ. 12.3,
â ýòîì ïðîöåññå äîëæíû ó÷àñòâîâàòü ÷åòûðå ÷åëîâåêà. Ïåðâûé  ýòî ìåíåäæåð ïî
ñíàáæåíèþ, ðåãèñòðèðóþùèé íîâîãî ïîñòàâùèêà; òîëüêî îí äîëæåí èìåòü ïðàâî
âêëþ÷àòü íîâûå çàïèñè â ñîîòâåòñòâóþùóþ òàáëèöó. Âòîðîé  ñîòðóäíèê îòäåëà
ñíàáæåíèÿ; îí èìååò ïðàâî âíîñèòü çàïèñè â òàáëèöû Pur hase è Pur haseItem,
íî âûáèðàòü ïîñòàâùèêà ìîæåò òîëüêî èç òåõ, êîòîðûå óæå çàðåãèñòðèðîâàíû â òàá-
ëèöå Supplier. Òðåòèé  ñîòðóäíèê, ïðèíèìàþùèé òîâàð; îí ìîæåò ðåãèñòðèðîâàòü
ïîñòóïèâøóþ ïðîäóêöèþ, ò.å. îáíîâëÿòü çíà÷åíèÿ QuantityRe eived. È íàêîíåö,
÷åòâåðòûé  ñîòðóäíèê, îñóùåñòâëÿþùèé ïëàòåæè; îí ïîëüçóåòñÿ äàííûìè èç òðåõ
òàáëèö è ïðèíèìàåò ðåøåíèå î âûïëàòå äåíåã ïîñòàâùèêàì. Â íåáîëüøèõ êîìïàíè-
CD132 ëàâà 12. Îáåñïå÷åíèå çàùèòû áàçû äàííûõ

Таблица Supplier INSERT


Менеджер
по снабжению проверяет
SELECT нового поставщика

Таблица Purchase Поставщик


Таблица PurchaseItem INSERT

Сотрудник
отдела снабжения
UPDATE помещает заказ
Поступившая
продукция

SELECT
Сотрудник,
принимающий
товар
AccountsPayable
Денежные средства

INSERT

Сотрудник,
осуществляющий
платежи

èñ. 12.3. àçäåëåíèå îáÿçàííîñòåé

ÿõ ìîæíî îáúåäèíèòü äâå èç ýòèõ ðîëåé, íî íåîáõîäèìî ñîáëþäàòü ïðàâèëî: ÷òîáû


ïðîöåññ áûë çàâåðøåí, â íåì äîëæíî ó÷àñòâîâàòü íå ìåíåå äâóõ ñîòðóäíèêîâ. ×åì
áîëüøå ñîòðóäíèêîâ âîâëå÷åíî â ðàáîòó, òåì ìåíüøå âåðîÿòíîñòü òîãî, ÷òî îíè âñòó-
ïÿò â ïðåñòóïíûé ñãîâîð. Íèêîãäà íåëüçÿ èñêëþ÷àòü ñèòóàöèþ, ïðè êîòîðîé â êîì-
ïàíèè ïîÿâèòñÿ íå÷åñòíûé ñîòðóäíèê, íî âåðîÿòíîñòü òîãî, ÷òî òàêîâûìè îêàæóòñÿ
÷åòûðå ÷åëîâåêà, î÷åíü ìàëà. È äàæå åñëè ìîðàëüíûé îáëèê èõ âñåõ áóäåò íèçîê,
ýòî åùå íå àêò, ÷òî îíè ñîãëàñÿòñÿ ó÷àñòâîâàòü â ñäåëêå, êîòîðàÿ ãðîçèò ñóäåáíûì
ðàçáèðàòåëüñòâîì.
Òåïåðü, êîãäà âû óáåäèëèñü â íåîáõîäèìîñòè ðàçäåëåíèÿ îáÿçàííîñòåé, íàäî ðå-
øèòü, êàê îáåñïå÷èòü ïîääåðæêó ýòîãî ïðàâèëà ïîñðåäñòâîì ïðàâ äîñòóïà ê îáúåêòàì
áàçû äàííûõ. Íà ðèñ. 12.3 óñëîâíî ïîêàçàíû îñíîâíûå ýòàïû ðàáîòû. Êîíòðîëèðóÿ
ïðàâà äëÿ âñåõ òàáëèö, âàì íàäî ñîçäàòü äëÿ êàæäîé çàäà÷è îòäåëüíóþ ðîëü. Êî-
íå÷íî, âàøè äåéñòâèÿ íå ãàðàíòèðóþò óñïåõà; îíè îêàæóòñÿ áåññìûñëåííûìè, åñëè
Êîíòðîëü äîñòóïà ïîëüçîâàòåëåé ê îáúåêòàì CD133

êòî-íèáóäü ñâÿæåò âñå ÷åòûðå ðîëè ñ îäíèì ñîòðóäíèêîì. Ýòî åùå îäíà ïðè÷èíà, ïî
êîòîðîé íåîáõîäèìî òùàòåëüíî äîêóìåíòèðîâàòü âñå ñâîè ðåøåíèÿ, âëèÿþùèå íà çà-
ùèòó ñèñòåìû. Â íàñòîÿùåå âðåìÿ Ora le (èëè ëþáàÿ äðóãàÿ ÑÓÁÄ) íå èìååò ñðåäñòâ
àâòîìàòè÷åñêîãî êîíòðîëÿ ðîëåé, ïîýòîìó íàäî çàïèñûâàòü ñâîè ðåøåíèÿ è ïðè÷èíû,
ïî êîòîðûì âû èõ ïðèíÿëè.
Íà òåêóùèé ìîìåíò âàì íåîáõîäèìî ñäåëàòü ñëåäóþùåå:

1. Èäåíòèèöèðîâàòü îñíîâíûå îáúåêòû áàçû äàííûõ.


2. Èäåíòèèöèðîâàòü îñíîâíûå ðîëè ïîëüçîâàòåëåé, ó÷èòûâàÿ âàæíîñòü ðàçäåëåíèÿ
îáÿçàííîñòåé.
3. Îïðåäåëèòü äëÿ êàæäîé ðîëè ïðàâà ïî îòíîøåíèþ ê êàæäîìó îáúåêòó.

Ïîìíèòå, ÷òî ó âàñ åñòü âîçìîæíîñòü îãðàíè÷èòü îáúåêòíûå ïðèâèëåãèè ñòîëáöà-


ìè òàáëèöû. Â ïðåäûäóùåì ïðèìåðå ìîæíî áûëî áû ðàçðåøèòü ñîòðóäíèêó, çàíè-
ìàþùåìóñÿ ïðèåìîì òîâàðà, îáíîâëÿòü òîëüêî ñòîëáåö QuantityRe eived. Âåðñèÿ
Enterprise ñèñòåìû Ora le òàêæå ïðåäîñòàâëÿåò ìåõàíèçì, îãðàíè÷èâàþùèé äîñòóï
ê äàííûì îòäåëüíûìè çàïèñÿìè. Íàïðèìåð, âû ìîæåòå ïîçâîëèòü ïîëüçîâàòåëþ ðà-
áîòàòü ñ òàáëèöåé, ñîäåðæàùåé èíîðìàöèþ î ñîòðóäíèêàõ, íî îãðàíè÷èâàòü åãî
êîíêðåòíîé ñòðîêîé, ñîîòâåòñòâóþùåé åãî EmployeeID. Ïðàâà SELECT îòíîñèòåëü-
íî ïðîñòî íàçíà÷èòü íà óðîâíå îòäåëüíûõ çàïèñåé. Îäíàêî îïåðàöèÿ UPDATE òðå-
áóåò ñïåöèàëüíîé íàñòðîéêè ñèñòåìû çàùèòû. Ýòîò âîïðîñ çäåñü ðàññìàòðèâàòüñÿ
íå áóäåò. Åñëè âàì íàäî ðåàëèçîâàòü ñëîæíûé êîíòðîëü íà óðîâíå ñòðîê, íåîáõîäè-
ìî èçó÷èòü äîêóìåíòàöèþ î âèðòóàëüíûõ ïðèâàòíûõ áàçàõ äàííûõ (virtual private
database  VPD).

. Êîíòðîëü äîñòóïà ïîëüçîâàòåëåé ê îáúåêòàì


Âûðàæåíèÿ GRANT è REVOKE  îñíîâíûå ñðåäñòâà çàùèòû â SQL. Ïî óìîë÷àíèþ
ïîëüçîâàòåëè íå ïîëó÷àþò ïî÷òè íèêàêèõ ïðàâ, îäíàêî ñèòóàöèÿ ìîæåò èçìåíèòü-
ñÿ â çàâèñèìîñòè îò îñîáåííîñòåé ñîçäàíèÿ ó÷åòíîé çàïèñè. Èñïîëüçóÿ Enterprise
Manager, ìîæíî ñâÿçàòü ñ ïîëüçîâàòåëåì ïðåäîïðåäåëåííóþ ðîëü Conne t, êîòîðàÿ
ïðåäïîëàãàåò CREATE TABLE è íåêîòîðûå äðóãèå ïðàâà, íå òðåáóþùèåñÿ ðÿäîâûì
ñîòðóäíèêàì. Ïðè ñîçäàíèè ó÷åòíîé çàïèñè ñðåäñòâàìè SQL ïîëüçîâàòåëü ïåðâîíà-
÷àëüíî íå ïîëó÷àåò íèêàêèõ ïðèâèëåãèé; îí äàæå íå èìååò ïðàâà ðåãèñòðèðîâàòüñÿ
â ñèñòåìå. Ïåðåä òåì êàê ïðèñòóïàòü ê ñîçäàíèþ íîâîãî ïîëüçîâàòåëÿ, íàäî âûÿñ-
íèòü, êàêèå ïðàâà îí ïîëó÷àåò ïî óìîë÷àíèþ. Ïðè íåîáõîäèìîñòè ìîæíî îòìåíèòü
íåêîòîðûå ïîëíîìî÷èÿ.
 íåêîòîðûõ ñëó÷àÿõ êîððåêòíîå íàçíà÷åíèå ïðàâ ñòàíîâèòñÿ òðóäíîé çàäà÷åé
è ïðåäïîëàãàåò âûïîëíåíèå îïðåäåëåííîãî îáúåìà ðàáîòû ïî òåñòèðîâàíèþ. Ïðè-
CD134 ëàâà 12. Îáåñïå÷åíèå çàùèòû áàçû äàííûõ

õîäèòñÿ àíàëèçèðîâàòü ïðèëîæåíèå è èäåíòèèöèðîâàòü îñíîâíûå ðîëè è îáúåêòû.


 ðåçóëüòàòå ïîëó÷àåòñÿ òàáëèöà, â êîòîðîé îòìå÷åíû ïðàâà, êîòîðûå, ïî ìíåíèþ ðàç-
ðàáîò÷èêà, òðåáóþòñÿ äëÿ êàæäîé ðîëè ïî îòíîøåíèþ ê êàæäîìó îáúåêòó. Çàòåì íàäî
ñîçäàòü ðîëè è îïðåäåëèòü ïîëüçîâàòåëÿ, íà êîòîðîì áóäóò ïðîâåðÿòüñÿ îñíîâíûå ðî-
ëè. Çàòåì óêàçûâàþòñÿ ïðàâà, òðåáóþùèåñÿ äëÿ ïðîâåðêè âñåãî ïðèëîæåíèÿ ñ òî÷êè
çðåíèÿ êàæäîé ðîëè. Óáåäèòåñü, ÷òî ðîëü, ïðåäíàçíà÷åííàÿ äëÿ ïîëüçîâàòåëÿ, ïîçâîëÿ-
åò åìó âûïîëíÿòü ñâîè ñëóæåáíûå îáÿçàííîñòè. Çàòåì ïîðàáîòàéòå ñ ñèñòåìîé îò èìå-
íè ýòîãî ïîëüçîâàòåëÿ è âíåñèòå òðåáóåìûå èçìåíåíèÿ, íàïðèìåð, îòìåíèòå ïðàâà íà
òå äåéñòâèÿ, êîòîðûå ýòîò ïîëüçîâàòåëü íå äîëæåí èìåòü âîçìîæíîñòè îñóùåñòâèòü.
Ïîñëå òîãî êàê âû ðàçðàáîòàåòå è ïðîâåðèòå íàáîð ïðàâ, âàì ïî÷òè íàâåðíÿêà
ïîòðåáóåòñÿ ìîäèèöèðîâàòü èõ. Íàèëó÷øåå ðåøåíèå  íàïèñàòü àéë ñöåíàðèÿ
PL/SQL, êîòîðûé íàçíà÷àë áû âñå òðåáóåìûå ïðèâèëåãèè. Åñëè íóæíû èçìåíåíèÿ,
âíîñèòå èõ â àéë ñöåíàðèÿ. Îòìåíèòå âñå ïðàâà, çàòåì çàïóñòèòå àéë, ÷òîáû ïðè-
ìåíèòü ê ïîëüçîâàòåëþ íîâûé íàáîð ïðèâèëåãèé. Â ïðîöåññå ïðîâåðêè ñîõðàíÿéòå
ñòàðûå âàðèàíòû àéëîâ ñöåíàðèåâ. Îíè ìîãóò ïîíàäîáèòüñÿ, åñëè îêàæåòñÿ, ÷òî âû
âíåñëè ëèøíèå èçìåíåíèÿ è âàì ïðèäåòñÿ âåðíóòüñÿ ê ïðåäûäóùåé âåðñèè. Êîãäà âû
áóäåòå óäîâëåòâîðåíû ðåçóëüòàòàìè, îïèøèòå àéë ñöåíàðèÿ. Ñîçäàííîå âàìè îïèñà-
íèå ïîìîæåò àäìèíèñòðàòîðó, îòâå÷àþùåìó çà áåçîïàñíîñòü ñèñòåìû, âïîñëåäñòâèè
íåçíà÷èòåëüíî ìîäèèöèðîâàòü ñöåíàðèé.
Çàìåòüòå, ÷òî âûðàæåíèå GRANT ìîæåò âêëþ÷àòü WITH ADMIN. Ýòà îïöèÿ èñïîëü-
çóåòñÿ î÷åíü ðåäêî è äàåò ïîëüçîâàòåëþ ïðàâî ïåðåäàâàòü èìåþùèåñÿ ïðèâèëåãèè
äðóãèì. Èíûìè ñëîâàìè, óêàçàâ ýòó îïöèþ, âû òåðÿåòå êîíòðîëü íàä êðóãîì ëèö,
êîòîðûå èìåþò äîñòóï ê íåêîòîðîìó îáúåêòó, è ïåðåäàåòå åãî äðóãîìó ïîëüçîâàòåëþ.
Åñëè âû óêàæåòå îáû÷íîå âûðàæåíèå GRANT, ïîëüçîâàòåëü ëèøü ïîëó÷èò îïðåäåëåí-
íûå ïðàâà. Åñëè àíàëîãè÷íûå ïðàâà ïîòðåáóþòñÿ êîìó-òî äðóãîìó, òîò äîëæåí áóäåò
îáðàòèòüñÿ ê âàì èëè ê àäìèíèñòðàòîðó áàçû äàííûõ è ïîëó÷èòü îò íåãî òðåáóåìûå
ïîëíîìî÷èÿ. Äîáàâèâ ê êîìàíäå âûðàæåíèå WITH ADMIN, âû ïîçâîëÿåòå ïîëüçîâà-
òåëþ íàçíà÷àòü ïðèâèëåãèè íà ïîëüçîâàíèå îáúåêòîì äðóãèì ëèöàì. Ýòî óìåíüøèò
îáúåì âàøåé ïîâñåäíåâíîé ðàáîòû, íî ïîëüçîâàòåëü, êîòîðîìó âû ïðåäîñòàâèëè òàêèå
áîëüøèå ïðàâà, äîëæåí çàñëóæèâàòü ïîëíîãî äîâåðèÿ.

Ñîçäàíèå ðîëåé
Äëÿ ïðèëîæåíèÿ Redwood Realty ñàìûìè âàæíûìè ÿâëÿþòñÿ ðîëè Agent è Man-
ager. Ìîæíî ðàññìîòðåòü âîïðîñ îá îïðåäåëåíèè òðåòüåé ðîëè, Administrator,
íî êîìïàíèÿ äîñòàòî÷íî ìàëà, ïîýòîìó ëó÷øå ïîçâîëèòü âûïîëíÿòü óíêöèè àä-
ìèíèñòðàòîðà îáû÷íûì ìåíåäæåðàì. ( ïîëüçó òàêîãî ðåøåíèÿ ìîæíî âûäâèíóòü
ñëåäóþùèé àðãóìåíò: åñëè àäìèíèñòðàòîð âûíóæäåí áóäåò íà âðåìÿ âûåõàòü â äðó-
ãîé ãîðîä, îñòàëüíûå ìåíåäæåðû íå áóäóò çíàòü, êàê âíåñòè òðåáóåìûå èçìåíåíèÿ.)
Åñëè ïëàíèðóåòñÿ äàëüíåéøèé ðîñò êîìïàíèè, ìîæíî ñîçäàòü ðîëü Administrator
è íàçíà÷èòü åå âñåì ìåíåäæåðàì. Èòàê, íà äàííûé ìîìåíò îñòàíàâëèâàåìñÿ íà äâóõ
Êîíòðîëü äîñòóïà ïîëüçîâàòåëåé ê îáúåêòàì CD135

îñíîâíûõ ðîëÿõ è ñ÷èòàåì, ÷òî ìåíåäæåðû ÿâëÿþòñÿ òàêæå àäìèíèñòðàòîðàìè ïðè-


ëîæåíèÿ. Àäìèíèñòðàòîðàì ïðèëîæåíèÿ íåîáõîäèìà âîçìîæíîñòü èçìåíÿòü çíà÷åíèÿ
â òàáëèöàõ, íàïðèìåð SaleStatus.

1. Ñîçäàíèå ðîëåéAgent è Manager íå âûçûâàåò òðóäíîñòåé.


CREATE ROLE Agent;
CREATE ROLE Manager;

Ñîâåò . Åñëè âû ïîëó÷èòå ñîîáùåíèå îá îøèáêå, ýòî îçíà÷àåò, ÷òî â âàøåé ñîá-
ñòâåííîé ó÷åòíîé çàïèñè íå ïðåäóñìîòðåíû íåîáõîäèìûå ïðèâèëåãèè. Âàì íóæ-
íà ñèñòåìíàÿ ïðèâèëåãèÿ CREATE ROLE.

Îáðàòèòå âíèìàíèå íà òî, ÷òî ñîçäàííûå ðîëè ïóñòû  îíè íå ïðåäîñòàâëÿþò


íèêàêèõ ïðàâ. Òåì íå ìåíåå âû ìîæåòå ñâÿçàòü ðîëè ñ äâóìÿ ó÷åòíûìè çàïèñÿìè.
Ïðåäïîëîæèì, ÷òî ïîëüçîâàòåëü Mar oux  àãåíò, à ïîëüçîâàòåëü Carling  ìåíå-
äæåð. Â èäåàëå ñëåäóåò óæå íà ýòàïå òåñòèðîâàíèÿ çíàòü âñåõ ïîëüçîâàòåëåé, êîòîðûå
ÿâëÿþòñÿ ìåíåäæåðàìè, è âûïîëíÿòü ïðîâåðêó íà ðåàëüíûõ äàííûõ, íî ìîæíî èñ-
ïîëüçîâàòü è ó÷åòíûå çàïèñè èêòèâíûõ ñîòðóäíèêîâ.  ðåàëüíîì ïðîåêòå ïðèäåòñÿ
ñäåëàòü ïîìåòêó â æóðíàëå, à çàòåì óäàëèòü ðîëè.

2. Ñâÿçûâàíèå ðîëåé ñ ïîëüçîâàòåëÿìè ïðîèñõîäèò ñëåäóþùèì îáðàçîì:


GRANT Agent to Mar ouxK;
GRANT Manager to CarlingT;

Àíàëîãè÷íûì îáðàçîì ïðèñâàèâàþòñÿ ðîëè è äðóãèì ïîëüçîâàòåëÿì.  äàííîì


ñëó÷àå óìåñòíî ïðèìåíèòü ïåðåìåííóþ ïîäñòàíîâêè, ÷òîáû ïîâòîðíî âûïîëíÿòü âû-
ðàæåíèå GRANT è ëèøü ïîäñòàâëÿòü òðåáóåìîå èìÿ. Ìû ïîñòóïèì òàê íåñêîëüêî
ïîçæå. Ñëåäóþùèé øàã  îïðåäåëåíèå ïîëíîìî÷èé, êîòîðîå íåîáõîäèìî íàçíà÷èòü
êàæäîé ðîëè. Ïî ìåðå ïðèñâîåíèÿ ïîëíîìî÷èé ðîëÿì ïîëüçîâàòåëè áóäóò àâòîìàòè-
÷åñêè ïîëó÷àòü ñîîòâåòñòâóþùèå ïðàâà.
Âàì ïîòðåáóþòñÿ ïðàâà àäìèíèñòðàòîðà áàçû äàííûõ, èëè âû äîëæíû èìåòü
âîçìîæíîñòü çàðåãèñòðèðîâàòüñÿ îò èìåíè ñîîòâåòñòâóþùåãî ïîëüçîâàòåëÿ. Èìåÿ
íóæíûå ïðèâèëåãèè, âû ìîæåòå èñïîëüçîâàòü òàáëèöó dba_role_privs. Ïðèâåäåí-
íûé íèæå êîä ïîêàçûâàåò îïèñàíèå òàáëèöû è çàòåì îòîáðàæàåò ðîëè, íàçíà÷åí-
íûå Mar ouxK.
Des ribe dba_role_privs;
Sele t GRANTED_ROLE From dba_role_privs WHERE Grantee='MARCOUXK';
Çàìåòüòå, ÷òî èìåíà ïîëüçîâàòåëåé íàäî ââîäèòü ñèìâîëàìè âåðõíåãî ðåãèñòðà, ïî-
ñêîëüêó èìåííî òàê îíè õðàíÿòñÿ â ñèñòåìå Ora le. Íà ðèñ. 12.4 âèäíî, ÷òî Mar ouxK
ïîñòàâëåíà â ñîîòâåòñòâèå òîëüêî ðîëü Agent.
CD136 ëàâà 12. Îáåñïå÷åíèå çàùèòû áàçû äàííûõ

èñ. 12.4. Èñïîëüçîâàíèå ñèñòåìíîé òàáëèöû äëÿ îòîáðàæåíèÿ ðîëåé,

íàçíà÷åííûõ ïîëüçîâàòåëþ

Åñëè âû îáëàäàåòå ïðàâàìè àäìèíèñòðàòîðà áàçû äàííûõ, òî ìîæåòå èñïîëüçî-


âàòü Enterprise Manager è îòîáðàçèòü ñ åãî ïîìîùüþ èçìåíåíèÿ ðîëåé äëÿ ëþáîãî
ïîëüçîâàòåëÿ. Åñëè ïîäîáíûõ ïðàâ ó âàñ íåò, âû ìîæåòå ëèøü èäåíòèèöèðîâàòü
ðîëè, íàçíà÷åííûå â ïðåäåëàõ òåêóùåãî ñåàíñà. Âû èìååòå âîçìîæíîñòü ïðîâåðÿòü
ñîáñòâåííûå ðîëè èëè çàðåãèñòðèðîâàòüñÿ êàê äðóãîé ïîëüçîâàòåëü, åñëè çíàåòå ñî-
îòâåòñòâóþùèé ïàðîëü. Òàê, íàïðèìåð, âû ìîæåòå âîéòè â ñèñòåìó îò èìåíè îäíîãî
èç ïîëüçîâàòåëåé, ñîçäàííûõ äëÿ òåñòèðîâàíèÿ. Èñïîëüçóÿ session_roles, ìîæíî
ïîëó÷èòü ñïèñîê íàçíà÷åííûõ ðîëåé.
SELECT Role FROM session_roles;

Ñîçäàíèå è îòìåíà ïîëíîìî÷èé


Ñëåäóþùèé ýòàï ðàáîòû  îïðåäåëåíèå îñíîâíûõ îáúåêòîâ áàçû äàííûõ. Â òàáë.
12.3 ïðèâåäåí ñïèñîê òàáëèö îðì è îò÷åòîâ, à òàêæå ïðåäïîëàãàåìûå ïîëíîìî÷èÿ
äëÿ äâóõ ðîëåé, èñïîëüçóåìûõ â ïðèëîæåíèè. Çàìåòüòå, ÷òî äëÿ ìåíåäæåðîâ ïðåäïî-
ëàãàåòñÿ ïîëíûé äîñòóï êî âñåì îáúåêòàì. Îäíàêî äîñòóï îãðàíè÷åí äàííûìè, à íå
îïðåäåëåíèÿìè ñàìèõ òàáëèö. Ìåíåäæåðû íå äîëæíû èìåòü âîçìîæíîñòü ïðèìåíÿòü
ê òàáëèöàì êîìàíäû DROP èëè ALTER. Çíà÷åíèå All çàäàåò ïðàâà SELECT, INSERT,
DELETE è UPDATE äëÿ ðàáîòû ñ òàáëèöåé.
Î÷åâèäíî, ÷òî âûðàæåíèÿ GRANT è REVOKE íå ìîãóò áûòü èñïîëüçîâàíû ñ îð-
ìàìè è îò÷åòàìè Ora le. Îäíàêî èõ ìîæíî âêëþ÷èòü â òàáëèöó ïîëíîìî÷èé, ÷òîáû
èñïîëüçîâàòü â äàëüíåéøåì. Îäèí èç ñïîñîáîâ ïîääåðæêè ïðàâ äëÿ îò÷åòîâ  ýòî
êîíòðîëü äîñòóïà ê ïðåäñòàâëåíèÿì, èñïîëüçóåìûì ïðè èõ ãåíåðàöèè. Äàæå åñëè
Êîíòðîëü äîñòóïà ïîëüçîâàòåëåé ê îáúåêòàì CD137

ÒÀÁËÈÖÀ 12.3. Òðåáóåìûå ïîëíîìî÷èÿ ïî îáúåêòàì è ðîëÿì

Îáúåêò áàçû äàííûõ îëü Agent îëü Manager


Òàáëèöû
Agents Sele t All
Conta tReason Sele t All
CustAgentList All All
Customers All All
Li enseStatus Sele t? All
Listings All All
Properties All All
SaleStatus Sele t All
Ôîðìû
AgentConta ts All All
AgentListings All All
Agents None All
Conta tReason None All
Customers All All
Li enseStatus None All
ListingA tivity All All
Listings All All
Management None All
Properties All All
SaleStatus None All
Sear h4 All All
Startup All All
Îò÷åòû
AgentSales Òîëüêî äëÿ ñâîèõ äàííûõ All
CustomerList All All
ListingsAndOffers All All
SalesByCityAndAgent Òîëüêî äëÿ ñâîèõ äàííûõ All
SalesByMonthAndAgent Òîëüêî äëÿ ñâîèõ äàííûõ All
àãåíò áóäåò çàïóñêàòü îò÷åò ïî èìåíè, îí ïîëó÷èò ñîîáùåíèå îá îøèáêå, òàê êàê ó
íåãî íåò ïðàâ íà ðàáîòó ñ ïðåäñòàâëåíèåì, êîòîðîå èçâëåêàåò äàííûå äëÿ îò÷åòà.
Âíà÷àëå âàì íàäî äîáàâèòü ê ðîëè Agent ïîëíîìî÷èÿ SELECT äëÿ ÷åòûðåõ îñíîâ-
íûõ òàáëèö (Agents, Conta tReason, Li enseStatus è SaleStatus).

1. Âû ìîæåòå ñäåëàòü ýòî â ðàìêàõ îäíîãî âûðàæåíèÿ, îäíàêî ÷åòûðå îòäåëüíûå


êîìàíäû GRANT áóäóò ïðîùå äëÿ âîñïðèÿòèÿ.
GRANT SELECT ON Agents TO Agent;
GRANT SELECT ON Conta tReason TO Agent;
CD138 ëàâà 12. Îáåñïå÷åíèå çàùèòû áàçû äàííûõ

GRANT SELECT ON Li enseStatus TO Agent;


GRANT SELECT ON SaleStatus TO Agent;
2. Äîáàâüòå ïðèâåäåííûå âûøå ÷åòûðå ñòðîêè êîäà â àéë ñöåíàðèÿ SQL, èñïîëüçóÿ
äëÿ ýòîé öåëè WordPad èëè Áëîêíîò. Ñîõðàíèòå àéë â ïàïêå, ïðåäíàçíà÷åííîé
äëÿ ðàáîòû íàä ïðèìåðàìè èç äàííîé ãëàâû.
3. Äîáàâüòå áîëåå îáøèðíûå ïîëíîìî÷èÿ äëÿ îñòàëüíûõ ÷åòûðåõ òàáëèö. Ýòè êî-
ìàíäû òàêæå íàäî ïîìåñòèòü â àéë ñöåíàðèÿ.
GRANT SELECT, UPDATE, INSERT, DELETE ON CustAgentList TO Agent;
GRANT SELECT, UPDATE, INSERT, DELETE ON Customers TO Agent;
GRANT SELECT, UPDATE, INSERT, DELETE ON Listings TO Agent;
GRANT SELECT, UPDATE, INSERT, DELETE ON Properties TO Agent;
4. Âîñåìü ïîëíîìî÷èé äëÿ ìåíåäæåðîâ õîðîøî ïîíÿòíû. Äëÿ ñîçäàíèÿ ïðèâåäåííîãî
íèæå ñïèñêà óäîáíî èñïîëüçîâàòü ñðåäñòâà êîïèðîâàíèÿ è âñòàâêè WordPad.

GRANT SELECT, UPDATE, INSERT, DELETE ON Agents TO Manager;


GRANT SELECT, UPDATE, INSERT, DELETE ON Conta tReason TO Manager;
GRANT SELECT, UPDATE, INSERT, DELETE ON Li enseStatus TO Manager;
GRANT SELECT, UPDATE, INSERT, DELETE ON SaleStatus TO Manager;
GRANT SELECT, UPDATE, INSERT, DELETE ON CustAgentList TO Manager;
GRANT SELECT, UPDATE, INSERT, DELETE ON Customers TO Manager;
GRANT SELECT, UPDATE, INSERT, DELETE ON Listings TO Manager;
GRANT SELECT, UPDATE, INSERT, DELETE ON Properties TO Manager;
Åñëè âû äîïóñòèòå îøèáêó èëè ïî äðóãèì ïðè÷èíàì çàõîòèòå îòìåíèòü ïîëíîìî-
÷èÿ, âû ìîæåòå èñïîëüçîâàòü êîìàíäó REVOKE. Áîëåå òîãî, æåëàòåëüíî âêëþ÷èòü âû-
ðàæåíèÿ REVOKE â íà÷àëî ñöåíàðèÿ, íàçíà÷àþùåãî ïîëíîìî÷èÿ. Ýòè âûðàæåíèÿ äîëæ-
íû áûòü ïðåäñòàâëåíû â âèäå REVOKE ALL ON Agents FROM Agent, Manager;.
×òîáû óñòàíîâèòü ïîëíîìî÷èÿ äëÿ ïîëüçîâàòåëÿ îò÷åòîâ, íåîáõîäèìî ïîìíèòü, ÷òî
êàæäûé îò÷åò èñïîëüçóåò ïðåäñòàâëåíèå. Ñ íèìè ìîæíî îçíàêîìèòüñÿ ïîñðåäñòâîì
Reports Builder. Îò÷åò èñïîëüçóåò ñîáñòâåííûå âíóòðåííèå çàïðîñû äëÿ èçâëå÷åíèÿ
äàííûõ èç òàáëèö. Ïîñêîëüêó àãåíòû è ìåíåäæåðû èìåþò ïî êðàéíåé ìåðå ïðèâèëå-
ãèè SELECT äëÿ ðàáîòû ñ òàáëèöàìè, êàæäûé èç íèõ ìîæåò ïðîñìàòðèâàòü îò÷åòû.
Åñëè âû íàéäåòå ïðåäñòàâëåíèå, ñîîòâåòñòâóþùåå îäíîìó èç îò÷åòîâ, òî ñìîæåòå
çàäàòü äëÿ ýòîãî ïðåäñòàâëåíèÿ ïðàâà SELECT â òðåáóåìûõ ðîëÿõ.
Åñëè âû ñåé÷àñ ïðîâåðèòå îðìû, òî áûñòðî îáíàðóæèòå ñåðüåçíóþ ïðîáëåìó:
íè îäíà èç îðì íå ðàáîòàåò. Äåëî â òîì, ÷òî ïðè êàæäîì îáðàùåíèè èñïîëüçóåòñÿ
ëèøü èìÿ òàáëèöû, íàïðèìåð Agents. Îäíàêî ïîëüçîâàòåëþ Mar ouxK ïî óìîë÷àíèþ
íàçíà÷àåòñÿ ñîáñòâåííàÿ ñõåìà, îòëè÷íàÿ îò ñõåìû Redwood. Ñóùåñòâóþò äâà ñïîñî-
áà íàñòðîéêè ñèñòåìû ñ òåì, ÷òîáû Mar ouxK ìîã îáðàùàòüñÿ ê òàáëèöàì â ñõåìå
Redwood. Âî-ïåðâûõ, ìîæíî ïðåäâàðÿòü êàæäóþ ññûëêó íà òàáëèöó è ïðåäñòàâëåíèå
èìåíåì ñõåìû, íàïðèìåð Redwood.Agents. Âî-âòîðûõ, ìîæíî îïðåäåëèòü îáùå-
äîñòóïíûé ñèíîíèì äëÿ êàæäîé òàáëèöû è ïðåäñòàâëåíèÿ. Âòîðîé ïîäõîä íàèáîëåå
ïðîñòîé (CREATE PUBLIC SYNONYM Agents FOR Redwood.Agents), îäíàêî âàì ïî-
Êîíòðîëü äîñòóïà ïîëüçîâàòåëåé ê îáúåêòàì CD139

òðåáóþòñÿ ñèñòåìíûå ïðèâèëåãèè íà ñîçäàíèå îáùåäîñòóïíûõ ñèíîíèìîâ, ëèáî âû


äîëæíû áóäåòå äîãîâîðèòüñÿ ñ àäìèíèñòðàòîðîì áàçû äàííûõ, ÷òîáû îí ñîçäàë èõ
äëÿ âàñ. Òàêèì îáðàçîì, íåñìîòðÿ íà òî, ÷òî ïåðâûé ïîäõîä òðåáóåò áîëüøå âðåìåíè,
âàì ëó÷øå îòðåäàêòèðîâàòü îðìû è èçìåíèòü ññûëêè íà òàáëèöû è ïðåäñòàâëåíèÿ.

5. Ñêîïèðóéòå âñå îðìû è îò÷åòû äëÿ ïðèëîæåíèÿ Redwood Realty â íîâóþ ïàïêó,
ïðåäíàçíà÷åííóþ äëÿ ðàáîòû ñ ïðèìåðàìè èç äàííîé ãëàâû.
6. Îòêðîéòå êàæäóþ îðìó, ðàçâåðíèòå óçåë Data Blo ks, èçìåíèòå ñâîéñòâî Query
Data Sour e Name, äîáàâèâ â êà÷åñòâå ïðåèêñà äëÿ êàæäîé òàáëèöû èìÿ ñõåìû.
Íàïðèìåð, â îðìå AgentListings âûðàæåíèå äëÿ áëîêà äàííûõ Listings, ïðè
óñëîâèè, ÷òî äîëæíà èñïîëüçîâàòüñÿ ñõåìà Redwood, áóäåò âûãëÿäåòü ñëåäóþùèì
îáðàçîì:
(SELECT ListingID, Listings.PropertyID, ListingAgentID,
SaleStatusID, BeginListDate, EndListDate,
AskingPri e, HousePhoto, Bedrooms, Bathrooms,
Stories, SQFT, YearBuilt FROM Redwood.Listings
INNER JOIN Redwood.Properties ON
Redwood.Listings.PropertyID=Redwood.Properties.PropertyID)
7. Ñäåëàéòå òî æå ñàìîå äëÿ âñåõ áëîêîâ äàííûõ. Íå çàáóäüòå èçìåíèòü çàïðîñû
äëÿ Re ord Groups, ïðåäïîëàãàþùèå èñïîëüçîâàíèå LOV. Ïîâòîðèòå äàííûé
ïðîöåññ äëÿ âñåõ îðì. Íà äàííûé ìîìåíò âû óæå çàøëè ñëèøêîì äàëåêî è ïîçäíî
ïðîñèòü àäìèíèñòðàòîðà î ïîëíîìî÷èÿõ íà ñîçäàíèå îáùåäîñòóïíûõ ñèíîíèìîâ,
íå òàê ëè?

Ïðèøëî âðåìÿ ïðîâåðêè ïðèëîæåíèÿ.

1. Çàïóñòèòå Forms Builder, îòêðîéòå îðìó Startup è îòðåäàêòèðóéòå èñõîäíûé


êîä îáðàáîò÷èêà òàê, ÷òîáû ãëîáàëüíûå ïåðåìåííûå óêàçûâàëè íà íîâîå ðàñïîëî-
æåíèå âàøèõ àéëîâ. Ñîõðàíèòå è ñêîìïèëèðóéòå îðìó.
2. Ñ ïîìîùüþ File⇒Dis onne t çàâåðøèòå ñåàíñ ëèáî çàêðîéòå Forms Builder è çà-
ïóñòèòå åãî ñíîâà. Çàïóñòèòå èñõîäíóþ îðìó è çàðåãèñòðèðóéòåñü êàê àãåíò
Mar ouxK. Ïîðàáîòàéòå ñ îðìàìè è îò÷åòàìè. Áîëüøèíñòâî èç íèõ äîëæíî áûòü
äîñòóïíî. Ïîñêîëüêó Mar oux ÿâëÿåòñÿ àãåíòîì, âû áóäåòå èìåòü âîçìîæíîñòü
ïðîñìàòðèâàòü äàííûå â îðìàõ ìåíåäæåðîâ, íî íå ñìîæåòå èçìåíèòü èëè äîáà-
âèòü çàïèñü.
3. Êîãäà âû ïðîâåðèòå îðìó Sear h, òî îáíàðóæèòå, ÷òî îíà íå ðàáîòàåò.  ÷åì
ïðè÷èíà? Äåëî â òîì, ÷òî îðìà áàçèðóåòñÿ íà ïðåäñòàâëåíèè ListingResults,
à âû íå èìååòå ïîëíîìî÷èé íà ðàáîòó ñ íèì. Äîáàâüòå â àéë ñöåíàðèÿ, èñïîëü-
çóåìûé äëÿ íàçíà÷åíèÿ ïîëíîìî÷èé, ïðèâåäåííóþ íèæå ñòðîêó êîäà è âûïîëíèòå
àéë â SQL*Plus îò ñâîåãî èìåíè. Ïîñëå ýòîãî ïîâòîðíî îáðàòèòåñü â îðìå
Sear h.
CD140 ëàâà 12. Îáåñïå÷åíèå çàùèòû áàçû äàííûõ

GRANT SELECT ON ListingResults TO Agent, Manager;


Åñëè âû èìååòå ïðèâèëåãèè àäìèíèñòðàòîðà áàçû äàííûõ, ìîæåòå èñïîëüçîâàòü
ñèñòåìíóþ òàáëèöó dba_tab_privs äëÿ ïðîñìîòðà âñåõ ïðàâ, êîòîðûå áûëè íàçíà-
÷åíû ðîëÿì èëè îòäåëüíûì ïîëüçîâàòåëÿì. Íàèáîëåå ÷àñòî èñïîëüçóåòñÿ ñëåäóþùèé
âàðèàíò êîìàíäû:
SELECT table_name, privilege FROM dba_tab_privs
WHERE Grantee='AGENT';
Íà äàííîì ýòàïå âñå îðìû äîëæíû ðàáîòàòü. Âàì ñëåäóåò òàêæå ïðîâåðèòü îð-
ìû, çàðåãèñòðèðîâàâøèñü êàê ìåíåäæåð CarlingT. Ïðîâåðüòå òàêæå è îò÷åòû.

. Íàçíà÷åíèå ïðèâèëåãèé ïîñðåäñòâîì


ïðåäñòàâëåíèé è ïðîöåäóð
Íà äàííûé ìîìåíò âû ïðåäñòàâëÿåòå ñåáå íåêîòîðûå ïðîáëåìû, ñâÿçàííûå ñ èñïîëü-
çîâàíèåì ïðîñòûõ ïðèâèëåãèé äëÿ ðàáîòû ñ òàáëèöàìè. Äîñòè÷ü òðåáóåìîãî óðîâíÿ
äåòàëèçàöèè äîñòàòî÷íî òðóäíî. Íàïðèìåð, âàì ìîæåò ïîòðåáîâàòüñÿ îãðàíè÷èòü äî-
ñòóï ê òàáëèöå êîíêðåòíûìè ñòîëáöàìè èëè ñòðîêàìè. Â ïðèíöèïå êîìàíäà GRANT
äàåò âîçìîæíîñòü ïðåäîñòàâèòü äîñòóï ê îòäåëüíûì ñòîëáöàì, îäíàêî îíà íå ðàáîòàåò
ñî ñòðîêàìè. Ïîýòîìó ïðèõîäèòñÿ èñêàòü äðóãèå ðåøåíèÿ.
Âàì íåîáõîäèìî çíàòü íåñêîëüêî ïîëåçíûõ ïðèåìîâ, ïîçâîëÿþùèõ îãðàíè÷èòü äî-
ñòóï ê äàííûì â áàçå. Íàèëó÷øèå ðåçóëüòàòû äàåò íàçíà÷åíèå ïîëüçîâàòåëÿì è ðîëÿì
ïðàâ äëÿ ðàáîòû ñ ïðåäñòàâëåíèÿìè è ïðîöåäóðàìè, âìåñòî ïðèâèëåãèé, ïðåäïîëàãà-
þùèõ äîñòóï ê òàáëèöå. Êàê âû ïîìíèòå, ïðåäñòàâëåíèå ìîæíî ñîçäàòü, èñïîëüçóÿ
ëþáûå òàáëèöû, ñòîëáöû è ñòðîêè. Ïðåäñòàâëåíèþ ìîæíî ïðèñâîèòü ïðàêòè÷åñêè
ëþáîå èìÿ, çà èñêëþ÷åíèåì êëþ÷åâûõ ñëîâ è òåõ èìåí, êîòîðûå íîñÿò ñóùåñòâó-
þùèå òàáëèöû. Åñëè ïîëüçîâàòåëþ íàäî ëèøü ïðîñìàòðèâàòü äàííûå, âû ìîæåòå
ñîçäàòü ïðåäñòàâëåíèå, îãðàíè÷èâ íàáîð âîçìîæíûõ ñòðîê è ñòîëáöîâ, è ïðåäîñòà-
âèòü ïîëüçîâàòåëþ äîñòóï íå ê òàáëèöå, à ê ýòîìó ïðåäñòàâëåíèþ.
Ïðåäñòàâëåíèÿ õîðîøî ðàáîòàþò äëÿ âûðàæåíèé SELECT, êîãäà âàì íàäî îãðàíè-
÷èòü äàííûå, äîñòóïíûå îòäåëüíûì ïîëüçîâàòåëÿì èëè ãðóïïàì. Îíè ìåíåå ïðèãîä-
íû â òîì ñëó÷àå, åñëè âàì íàäî ïîçâîëèòü ïîëüçîâàòåëÿì îáíîâëÿòü èíîðìàöèþ.
Ïðåäñòàâëåíèÿ íå äîïóñêàþò îáíîâëåíèå, çà èñêëþ÷åíèåì òåõ ñëó÷àåâ, êîãäà îíè
áàçèðóþòñÿ íà îäíîé òàáëèöå. Êðîìå òîãî, ñ ïîìîùüþ ïðåäñòàâëåíèÿ òðóäíî êîíòðî-
ëèðîâàòü èçìåíåíèÿ äàííûõ. Åñëè âàì íåîáõîäèìî óïðàâëÿòü ïðîöåññîì îáíîâëåíèÿ,
íàèëó÷øèì ðåøåíèåì áóäåò ñîçäàíèå õðàíèìîé ïðîöåäóðû, êîòîðàÿ èçìåíÿåò äàí-
íûå. Ïîëüçîâàòåëþ îïÿòü æå ïðåäîñòàâëÿåòñÿ äîñòóï ê ïðîöåäóðå, à íå ê òàáëèöå, ñ
êîòîðîé îíà ðàáîòàåò. Äàííûé ïîäõîä ìîæåò ïîêàçàòüñÿ ñëîæíûì, ïîýòîìó æåëàòåëü-
íî ðàññìîòðåòü êîíêðåòíûé ïðèìåð.
Íàçíà÷åíèå ïðèâèëåãèé ïîñðåäñòâîì ïðåäñòàâëåíèé è ïðîöåäóð CD141

Ïðåäñòàâëåíèÿ õîðîøî ïðèìåíèìû òîãäà, êîãäà íåîáõîäèìî îãðàíè÷èòü äîñòóï


ê îò÷åòàì. Reports Builder îáû÷íî ñîçäàåò âíóòðåííèé çàïðîñ, ïîñðåäñòâîì êîòî-
ðîãî äàííûå èçâëåêàþòñÿ èç òàáëèö. Ýòîò çàïðîñ ìîæíî ïðåâðàòèòü â ïðåäñòàâëå-
íèå, ñîçäàòü íà åãî îñíîâå îðìó è îãðàíè÷èòü ïðàâà íà èñïîëüçîâàíèå ïðåäñòàâ-
ëåíèÿ.  ýòîì ñëó÷àå, äàæå åñëè ïîëüçîâàòåëü áóäåò çíàòü èìÿ îò÷åòà, îí íå ñìî-
æåò çàïóñòèòü åãî.

1. Íà÷íèòå ðàáîòó ñ Reports Builder è îòêðîéòå îò÷åò SalesByMonthAndAgent. àç-


âåðíèòå óçåë Queries â ðàçäåëå Data Model. Îòêðîéòå ïàëèòðó ñâîéñòâ äëÿ çà-
ïðîñà Q_1 è îòêðîéòå ðåäàêòîð SQL, ùåëêíóâ íà SQL Query Statement.
2. Âàì íåîáõîäèìî âíåñòè â çàïðîñ íåáîëüøèå èçìåíåíèÿ, ïîýòîìó çàïóñòèòå Áëîê-
íîò è ñêîïèðóéòå çàïðîñ â îêíî ýòîãî ðåäàêòîðà. Èçìåíèòå âûðàæåíèå WHERE,
à èìåííî óäàëèòå ñòðîêó SaleStatusID âìåñòå ñî ñâÿçàííîé ïåðåìåííîé. Äî-
áàâüòå SaleStatusID ê âûðàæåíèþ SELECT è âêëþ÷èòå â íà÷àëî ñòðîêó CREATE
VIEW. Çàïóñòèòå SQL*Plus. Ñêîïèðóéòå íîâîå âûðàæåíèå è âûïîëíèòå åãî. Åñ-
ëè âû ïîëó÷èòå ñîîáùåíèå îá îøèáêå, ïðîâåðüòå çàïðîñ è ñíîâà ïîïûòàéòåñü
âûïîëíèòü åãî.
CREATE OR REPLACE VIEW SalesByMonthAndAgent AS
SELECT ALL AGENTS.LASTNAME, AGENTS.FIRSTNAME,
SALESTATUS.SALESTATUSID, LISTINGS.ASKINGPRICE,
TO_CHAR(LISTINGS.ENDLISTDATE, 'MM') SALEMONTH
FROM AGENTS, LISTINGS, SALESTATUS
WHERE ((LISTINGS.LISTINGAGENTID = AGENTS.AGENTID)
AND (LISTINGS.SALESTATUSID = SALESTATUS.SALESTATUSID))
ORDER BY AGENTS.LASTNAME ASC, AGENTS.FIRSTNAME ASC;
3. Âåðíèòåñü ê Reports Builder è çàìåíèòå çàïðîñ Q_1 îáðàùåíèåì ê íîâîìó ïðåä-
ñòàâëåíèþ. Óáåäèòåñü â òîì, ÷òî âû óêàçàëè êîððåêòíóþ ñõåìó (ò.å. Redwood).
SELECT ALL LASTNAME, FIRSTNAME, ASKINGPRICE, SALEMONTH
FROM Redwood.SalesByMonthAndAgent
WHERE SaleStatusID = :SALE_STATUS
4. Âåðíèòåñü ê SQL*Plus è ïðåäîñòàâüòå ìåíåäæåðàì ïðàâî ïðîñìàòðèâàòü çàïðîñ.
GRANT SELECT ON SalesByMonthAndAgent TO Manager;
5.  Reports Builder âàì íàäî äîáàâèòü ñõåìó ê ñïèñêó çíà÷åíèé äëÿ ïîëüçîâàòåëü-
ñêèõ ïàðàìåòðîâ. àçâåðíèòå óçëû Data Model è User Parameter. Îòêðîéòå
ïàëèòðó ñâîéñòâ äëÿ ýëåìåíòà SALE_STATUS. Ùåëêíèòå íà ñâîéñòâå List of
Values è äîáàâüòå èìÿ ñõåìû ê òàáëèöàì â çàïðîñå SQL.
SELECT ALL SALESTATUSID, SALESTATUS
FROM Redwood.SALESTATUS
ORDER BY SALESTATUS ASC
6. Çàïóñòèòå îðìó è, èñïîëüçóÿ File⇒Dis onne t, ïðîâåðüòå åå, çàðåãèñòðèðîâàâ-
øèñü êàê CarlingT (îíà äîëæíà ðàáîòàòü) è êàê Mar ouxK (â ýòîì ñëó÷àå îíà
ðàáîòàòü íå äîëæíà).
CD142 ëàâà 12. Îáåñïå÷åíèå çàùèòû áàçû äàííûõ

Êîíòðîëèðóÿ äîñòóï ê ïðåäñòàâëåíèÿì, âû ïðåïÿòñòâóåòå íåàâòîðèçîâàííûì ïîëü-


çîâàòåëÿì ïðîñìàòðèâàòü îò÷åòû. Îäíàêî, ïîñêîëüêó ïîëüçîâàòåëè èìåþò äîñòóï
ê òàáëèöàì, îíè ìîãóò èçâëåêàòü äàííûå è ñàìè ñîñòàâëÿòü îò÷åòû, ïîëüçóÿñü ðàçíî-
îáðàçíûìè èíñòðóìåíòàìè. Ïîýòîìó íåîáõîäèìî ðåøèòü ñëîæíóþ çàäà÷ó  ïðåäî-
ñòàâëÿòü ñîòðóäíèêàì òîëüêî òå äàííûå, êîòîðûå èì äåéñòâèòåëüíî íóæíû.

Îãðàíè÷åíèå äîñòóïà êîíêðåòíûìè ñòðîêàìè è ñòîëáöàìè

Ïîíÿòü ïðèíöèï èñïîëüçîâàíèÿ ïðåäñòàâëåíèÿ äëÿ îãðàíè÷åíèÿ âîçìîæíîñòåé âûðà-


æåíèÿ SELECT íåñëîæíî. Âû óæå çíàåòå, êàê ïèñàòü âûðàæåíèå SELECT äëÿ âûáîðà
êîíêðåòíûõ ñòîëáöîâ è ñòðîê. Âû òàêæå çíàåòå, êàê ïðåîáðàçîâàòü äàííîå âûðàæåíèå
â õðàíèìîå ïðåäñòàâëåíèå.

1. Çàðåãèñòðèðóéòåñü îò ñâîåãî èìåíè, ñîçäàéòå ïðåäñòàâëåíèå, êîòîðîå îòîáðàæàëî


áû ñïèñêè äëÿ àãåíòà Mar oux. ×òîáû óïðîñòèòü çàäà÷ó, èñïîëüçóéòå åãî èäåíòè-
èêàöèîííûé íîìåð (10041).
Create View Mar ouxListings AS
SELECT * FROM Listings
WHERE ListingAgentID=10041;
2. Òåïåðü ïðåäîñòàâüòå Mar oux äîñòóï ê ýòîìó ïðåäñòàâëåíèþ, íî íå ïðåäîñòàâ-
ëÿéòå åìó íèêàêèõ äðóãèõ ïðàâ.
GRANT SELECT ON Redwood.Mar ouxListings TO Mar ouxK;
Íå çàáóäüòå óêàçàòü ïðåèêñ Redwood, ÷òîáû çàäàòü òðåáóåìóþ ñõåìó. Åñëè âû
ïðîïóñòèòå ñõåìó Redwood, òî ïðåäîñòàâèòå Mar oux äîñòóï ê ïðåäñòàâëåíèþ
Mar ouxListings èëè ê òàáëèöå â åãî ñîáñòâåííîé ñõåìå, êîòîðîé íå ñóùåñòâóåò.
3. Óñòàíîâêè, ñâÿçàííûå ñ çàùèòîé, íàäî îáÿçàòåëüíî ïðîâåðÿòü, ïîýòîìó çàðåãè-
ñòðèðóéòåñü îò èìåíè Mar oux è óêàæèòå êîððåêòíîå èìÿ ñåðâåðà.
Conne t Mar ouxK/ hangeme <èìÿ_ñåðâåðà>
4. Ïðîâåðüòå ïðàâà äîñòóïà ê ïðåäñòàâëåíèþ.
SELECT ListingID, PropertyID, ListingAgentID, BeginListDate
FROM Redwood.Mar ouxListings;
5. Óáåäèòåñü, ÷òî Mar oux íå èìååò ïðàâà îáðàùàòüñÿ ê òàáëèöå Listings.
SELECT * FROM Redwood.Listings;
6. Îòêðîéòå âòîðîå îêíî SQL*Plus, çàðåãèñòðèðîâàâøèñü îò ñâîåãî èìåíè. Âàì íàäî
èìåòü âîçìîæíîñòü âíîñèòü èçìåíåíèÿ â îäíîì îêíå è ïðîâåðÿòü èõ â äðóãîì.

Íà ðèñ. 12.5 ïîêàçàíû ðåçóëüòàòû âûïîëíåíèÿ äâóõ çàïðîñîâ. Ñòðîêè ïðåäñòàâ-


ëåíèÿ ñîîòâåòñòâóþò AgentID äëÿ Mar oux; äðóãèõ ñòðîê äàííûé àãåíò ïîëó÷èòü íå
Íàçíà÷åíèå ïðèâèëåãèé ïîñðåäñòâîì ïðåäñòàâëåíèé è ïðîöåäóð CD143

èñ. 12.5. åçóëüòàòû ðàáîòû ñ ïðåäñòàâëåíèåì Mar ouxListings

èìååò ïðàâà. Äàæå åñëè îí óçíàåò èìÿ òàáëèöû Listings, îí íå ñìîæåò èçâëå÷ü èç íåå
äàííûå. Áîëåå òîãî, ñèñòåìà äàæå íå ïîäòâåðäèò, ÷òî òàêàÿ òàáëèöà ñóùåñòâóåò. Âû
ìîæåòå ñîõðàíèòü ñëîæíûå çàïðîñû êàê ïðåäñòàâëåíèÿ, ÷òîáû îáåñïå÷èòü êîíèäåí-
öèàëüíîñòü, íî âàì íå óäàñòñÿ ïðèìåíÿòü ýòè ïðåäñòàâëåíèÿ äëÿ îáíîâëåíèÿ äàííûõ.
Êîíå÷íî, ñîçäàâàòü ðàçíûå ïðåäñòàâëåíèÿ äëÿ êàæäîãî ñîòðóäíèêà ñëèøêîì ñëîæ-
íî. ×òîáû óïðîñòèòü ïðîöåññ, âû ìîæåòå äîáàâèòü ê òàáëèöå Agents ñòîëáåö, ñî-
äåðæàùèé èìÿ ïîëüçîâàòåëÿ. Òîãäà ìîæíî áóäåò ïîëó÷àòü èìÿ òåêóùåãî ïîëüçîâàòåëÿ
ïîñðåäñòâîì ñèñòåìíîé ïåðåìåííîé User è îãðàíè÷èâàòü äîñòóï ê ñòîëáöàì íà îñíî-
âå ýòîãî çíà÷åíèÿ. Ïîäðîáíîå îïèñàíèå íåîáõîäèìûõ äåéñòâèé çäåñü íå ïðèâîäèòñÿ,
ïîñêîëüêó àíàëîãè÷íàÿ ïðîöåäóðà, ïðåäíàçíà÷åííàÿ äëÿ êîíòðîëÿ îáíîâëåíèÿ äàí-
íûõ, áóäåò ðàññìîòðåíà â ñëåäóþùåì ðàçäåëå.

Èñïîëüçîâàíèå ïðîöåäóð äëÿ îãðàíè÷åíèÿ âîçìîæíîñòåé


îáíîâëåíèÿ äàííûõ
 íåêîòîðûõ ñëó÷àÿõ ïîëüçîâàòåëþ íåîáõîäèìî îáíîâëÿòü áàçó äàííûõ. Êàê ïîñòó-
ïàòü â ïîäîáíûõ ñèòóàöèÿõ? Ïîñêîëüêó ïðåäñòàâëåíèå Mar ouxListings áàçèðóåòñÿ
íà îäíîé òàáëèöå, îáíîâëåíèå âîçìîæíî. Âû ìîæåòå èçìåíèòü íàáîð ïîëíîìî÷èé,
÷òîáû ïîëüçîâàòåëü Mar oux ìîã âêëþ÷àòü ñòðîêè â ïðåäñòàâëåíèå, à îíî, â ñâîþ
î÷åðåäü, ïåðåäàâàëî áû èõ â òàáëèöó Listings.
CD144 ëàâà 12. Îáåñïå÷åíèå çàùèòû áàçû äàííûõ

Grant Insert on Redwood.Mar ouxListings to Mar ouxK;

1. Òåïåðü âû ìîæåòå çàðåãèñòðèðîâàòüñÿ êàê Mar ouxK è ïîïðîáîâàòü âêëþ÷èòü


ñòðîêó.
Insert Into Redwood.Mar ouxListings (ListingID, PropertyID,
ListingAgentID, SaleStatusID)
Values (99, 773, 10041, 101);
Commit;
2. Êîìàíäà INSERT âûïîëíÿåòñÿ íîðìàëüíî. Ïîñêîëüêó íîâàÿ ñòðîêà íå èìååò ñìûñ-
ëà, âàì ñëåäóåò çàðåãèñòðèðîâàòüñÿ ïîä ñâîèì èìåíåì è óäàëèòü åå.
DELETE FROM Listings WHERE ListingID=99;
Íà ïåðâûé âçãëÿä âñå îáñòîèò íîðìàëüíî.  ÷åì æå ïðîáëåìû ñ çàùèòîé?
3. Äëÿ òîãî ÷òîáû âûÿâèòü èõ, çàðåãèñòðèðóéòåñü êàê Mar ouxK è ïîïûòàéòåñü âû-
ïîëíèòü ñëåäóþùèé êîä:
Insert Into Redwood.Mar ouxListings (ListingID, PropertyID,
ListingAgentID, SaleStatusID)
Values (98, 773, 12963, 101);
Commit;
È ñíîâà êîìàíäà INSERT âûïîëíÿåòñÿ íîðìàëüíî. Âàì îïÿòü ïðèäåòñÿ çàðåãè-
ñòðèðîâàòüñÿ ïîä ñâîèì èìåíåì è óäàëèòü ListingID=98. Òåïåðü âàì ÿñíà ïî-
òåíöèàëüíàÿ ïðîáëåìà, ñâÿçàííàÿ ñ áåçîïàñíîñòüþ? Mar oux òîëüêî ÷òî âêëþ÷èë
íåäîïóñòèìûé ñïèñîê äëÿ äðóãîãî àãåíòà (Reed). Íå èñêëþ÷åíî, ÷òî âû çàõîòè-
òå ïðåäîñòàâèòü äîïîëíèòåëüíûå ïîëíîìî÷èÿ äëÿ ðàáîòû ñ òàáëèöåé Listings
ïîñðåäñòâîì ïðåäñòàâëåíèÿ Mar ouxListings. Êàæäîå ïîëíîìî÷èå ïðåäîñòàâèò
Mar oux âîçìîæíîñòü âíîñèòü âñå áîëåå ìàñøòàáíûå èçìåíåíèÿ â òàáëèöó, ïðè-
÷åì äàæå â çàïèñè, êîòîðûìè îí íå âëàäååò.
åøåíèå ýòîé ïðîáëåìû çàêëþ÷àåòñÿ â òîì, ÷òîáû ñîçäàòü ïðîöåäóðó, êîòîðàÿ
ñòðîãî êîíòðîëèðîâàëà áû ïðîöåññ îáíîâëåíèé, è çàòåì ïðåäîñòàâèòü Mar oux
ïðàâà íà ðàáîòó òîëüêî ñ ýòîé ïðîöåäóðîé.
4.  ïåðâóþ î÷åðåäü îòìåíèòå ïðàâà äàííîãî ïîëüçîâàòåëÿ íà âêëþ÷åíèå äàííûõ
ïîñðåäñòâîì ïðåäñòàâëåíèÿ.
REVOKE Insert ON Redwood.Mar ouxListings FROM Mar ouxK;
Ñåé÷àñ íàøà îñíîâíàÿ öåëü  ñîçäàòü ïðîöåäóðó, êîòîðàÿ äîáàâëÿëà áû íîâûå
ñïèñêè â áàçó äàííûõ. Îíà äîëæíà èìåòü âîçìîæíîñòü âûïîëíÿòü ðàáîòó äëÿ ëþ-
áîãî àãåíòà è àâòîìàòè÷åñêè âêëþ÷àòü ListingID, èäåíòèèêàòîð àãåíòà è êîä
For Sale (101).  èäåàëå íàäî òàêæå èçâëåêàòü çíà÷åíèå PropertyID èç âõîä-
íîé îðìû. Íàïðèìåð, àãåíò ìîæåò îáðàòèòüñÿ ê îðìå Property, ÷òîáû ââåñòè
äàííûå äëÿ íîâîãî îáúåêòà è èíîðìàöèþ î êîíòàêòàõ. Ïîñëå ââîäà äàííûõ îá
îáúåêòå è íà÷àëüíîé öåíû ïîëüçîâàòåëü äîëæåí ùåëêíóòü íà êíîïêå, è îðìà
âûçîâåò ïðîöåäóðó è çàïèøåò èíîðìàöèþ â òàáëèöó Listings.
Íàçíà÷åíèå ïðèâèëåãèé ïîñðåäñòâîì ïðåäñòàâëåíèé è ïðîöåäóð CD145

5. Äëÿ òîãî ÷òîáû ñèñòåìà àâòîìàòè÷åñêè ãåíåðèðîâàëà ListingID, âàì íóæíî íà-
ïèñàòü êîä äëÿ ðàáîòû ñ òàáëèöåé Listings. Êàê âëàäåëåö ñèñòåìû Redwood
ââåäèòå ñëåäóþùèå êîìàíäû:
CREATE SEQUENCE seq_Listings
INCREMENT BY 1
START WITH 20000;
Ñëåäóþùèé øàã íåñêîëüêî ñëîæíåå. Íàäî, ÷òîáû ïðîöåäóðà èäåíòèèöèðîâàëà
àãåíòà è íàõîäèëà çíà÷åíèå AgentID. Ñëåäóåò ñîçäàòü â òàáëèöå Agents äîïîëíè-
òåëüíûé ñòîëáåö, ñîäåðæàùèé ïîëüçîâàòåëüñêîå èìÿ äëÿ êàæäîãî àãåíòà. Ââåñòè
ïîëüçîâàòåëüñêîå èìÿ ìîæíî âðó÷íóþ, íî ïðîùå ñîðìèðîâàòü åãî, ïðèñîåäèíèâ
ê àìèëèè ïåðâóþ áóêâó èìåíè.
Äîáàâüòå ê òàáëèöå Agents íîâûé ñòîëáåö Username è óñòàíîâèòå èìÿ ïîëüçî-
âàòåëÿ ïî óìîë÷àíèþ.
6. Òåïåðü âû ìîæåòå ñîçäàòü íîâóþ ïðîöåäóðó, êîòîðàÿ áóäåò äîáàâëÿòü ñòðîêè ê òàá-
ëèöå Listings.
ALTER TABLE Agents
ADD (Username VARCHAR2(100));
UPDATE Agents
SET Username = LastName | | SUBSTR(FirstName,1,1);
Commit;
È íàêîíåö, âû ìîæåòå ñîçäàòü ïðîöåäóðó, êîòîðàÿ äîáàâèò íîâûå ñòðîêè ê òàáëèöå
Listings.
Create or Repla e Pro edure AddAgentListing(
PropertyID NUMBER,
BeginListDate DATE,
EndListDate DATE,
AskingPri e NUMBER)
AS
BEGIN
DECLARE nAgentID NUMBER;
BEGIN
SELECT AgentID INTO nAgentID
FROM Agents WHERE UPPER(Username)=User;
INSERT INTO Listings (ListingID, PropertyID, ListingAgentID,
SaleStatusID, BeginListDate, EndListDate, AskingPri e)
VALUES (
seq_Listings.NextVal,
AddAgentListing.PropertyID,
nAgentID,
101,
AddAgentListing.BeginListDate,
AddAgentListing.EndListDate,
AddAgentListing.AskingPri e
);
COMMIT;
END;
END;
CD146 ëàâà 12. Îáåñïå÷åíèå çàùèòû áàçû äàííûõ

×òîáû ïîíÿòü êîä ïðîöåäóðû, íàäî ó÷åñòü, ÷òî ñèñòåìíàÿ ïåðåìåííàÿ User èñ-
ïîëüçóåòñÿ äëÿ âûáîðà ïîëüçîâàòåëüñêîãî èìåíè àãåíòà, êîòîðûé çàðåãèñòðèðîâàëñÿ
è âûçâàë ïðîöåäóðó. Ïîñðåäñòâîì Username îñóùåñòâëÿåòñÿ ïîèñê ñîîòâåòñòâóþ-
ùåãî AgentID. Âûðàæåíèå INSERT äëÿ ðàáîòû ñ òàáëèöåé Listings äîñòàòî÷íî
ïðîñòîå. Âñå êëþ÷åâûå çíà÷åíèÿ, çà èñêëþ÷åíèåì PropertyID, ïîëíîñòüþ êîíòðî-
ëèðóþòñÿ ïðîöåäóðîé. Ïîëüçîâàòåëü íå âèäèò è íå ìîæåò èçìåíèòü èõ.

7. Ïðåäîñòàâüòå Mar ouxK è äðóãèì àãåíòàì âîçìîæíîñòü âûïîëíÿòü íîâóþ ïðîöå-


äóðó.
GRANT EXECUTE ON AddAgentListing TO Agent;
8. Çàðåãèñòðèðóéòåñü êàêMar ouxK è ïðîâåðüòå ïðîöåäóðó.
EXEC Redwood.AddAgentListing(773, '01-MAR-2006',
'01-JUL-2006', 150000);

È ñíîâà âàì ïðèäåòñÿ çàðåãèñòðèðîâàòüñÿ îò ñâîåãî èìåíè è óäàëèòü íåíóæíóþ


çàïèñü. Âåðîÿòíåå âñåãî, ýòî áóäåò ListingID=20000, íî äëÿ óâåðåííîñòè âàì íàäî
âûïîëíèòü ïðîâåðêó AgentID=10041, ïîñêîëüêó âû óæå çàïóñêàëè ãåíåðàòîð ïîñëå-
äîâàòåëüíûõ çíà÷åíèé è åãî ñîñòîÿíèå ìîãëî èçìåíèòüñÿ.
Åñëè âû âíèìàòåëüíî ïðîàíàëèçèðóåòå êîä, òî óâèäèòå, ÷òî åãî îñíîâîé ÿâëÿåòñÿ
îáû÷íîå âûðàæåíèå INSERT. Òàêèì îáðàçîì, ðåàëèçîâàòü åãî íåñëîæíî. Ïî÷åìó æå
ïðèøëîñü âûïîëíÿòü òàê ìíîãî ðàáîòû? Ìîæíî ëè ïðåäîñòàâèòü àãåíòó ïðàâà IN-
SERT, UPDATE è, ìîæåò áûòü, DELETE ê òàáëèöå Listings? Íà ýòîò âîïðîñ ìîæåòå
îòâåòèòü òîëüêî âû, òàê êàê êîíêðåòíîå ðåøåíèå çàâèñèò îò ñïåöèèêè êîìïàíèè. Â
ñëó÷àå àãåíòñòâà ñðåäíåé âåëè÷èíû âû, âîçìîæíî, ñîãëàñèòåñü, ÷òî äàííûå íå ÿâëÿ-
þòñÿ êðèòè÷íûìè è ðóêîâîäñòâî äîëæíî äîâåðÿòü ñîòðóäíèêàì. Îäíàêî åñòü ðèñê,
÷òî àãåíò, ó êîòîðîãî áûë êîíëèêò ñ ðóêîâîäñòâîì, ìîæåò èç ìåñòè óäàëèòü èëè
èçìåíèòü âàæíóþ èíîðìàöèþ.

Âèðòóàëüíàÿ ÷àñòíàÿ áàçà äàííûõ è ãðè ñåêðåòíîñòè


Ïîíÿòèå âèðòóàëüíîé ÷àñòíîé áàçû äàííûõ (virtual private database  VPD) ïîÿâèëîñü
îòíîñèòåëüíî íåäàâíî. Öåëü åå  îãðàíè÷èòü èíîðìàöèþ, ïîïàäàþùóþ â ðàñïîðÿ-
æåíèå ïîëüçîâàòåëÿ, ëèøü òåìè äàííûìè, êîòîðûå èìåþò íåïîñðåäñòâåííîå îòíî-
øåíèå ê íåìó. Íàïðèìåð, ñîòðóäíèê ñìîæåò ïðîñìàòðèâàòü è ðåäàêòèðîâàòü äàííûå,
êàñàþùèåñÿ åãî ñàìîãî. Ìåíåäæåðó æå áóäóò äîñòóïíû çàïèñè î âñåõ ñîòðóäíèêàõ
åãî ïîäðàçäåëåíèÿ. Ïîòðåáèòåëþ äîñòàòî÷íî âèäåòü ëèøü ñîáñòâåííûå çàêàçû. VPD
ìîæåò îòîáðàæàòü òàáëèöû òàê, êàê áóäòî îíè ñîäåðæàò òîëüêî äàííûå, êàñàþùèåñÿ
êîíêðåòíîãî ïîëüçîâàòåëÿ èëè êîíêðåòíîé êîìïàíèè.
Âèðòóàëüíàÿ ÷àñòíàÿ áàçà äàííûõ âûïîëíÿåò ñâîþ çàäà÷ó, ñîçäàâàÿ ïðåäñòàâëå-
íèÿ ñ äîïîëíèòåëüíûì âûðàæåíèåì WHERE. Îíè ðàáîòàþò òàê æå, êàê è ñðåäñòâà,
îáñóæäàâøèåñÿ â ïðåäûäóùèõ ðàçäåëàõ. Îòëè÷èå â òîì, ÷òî ïîñëå íàñòðîéêè VPD
Íàçíà÷åíèå ïðèâèëåãèé ïîñðåäñòâîì ïðåäñòàâëåíèé è ïðîöåäóð CD147

àâòîìàòè÷åñêè èçìåíÿåò âñå çàïðîñû. Ýòî è õîðîøî è ïëîõî. Äëÿ ñïåöèàëèñòîâ, íå


èìåþùèõ äîñòàòî÷íîãî îïûòà ðàáîòû, çàäà÷à óïðîùàåòñÿ, íî ïðè ýòîì ñíèæàåòñÿ
óðîâåíü êîíòðîëÿ çà ïðîöåññîì. VPD íàñòðàèâàåòñÿ ïóòåì óñòàíîâêè äåòàëüíûõ ïî-
ëèòèê äëÿ âñåõ òàáëèö, ïðåäñòàâëåíèé è äðóãèõ îáúåêòîâ. Ïîìî÷ü â îïðåäåëåíèè ïî-
ëèòèê ìîæåò Ora le Poli y Manager. Ìîæíî òàêæå èñïîëüçîâàòü ïàêåòû SYS_CONTEXT
è DBMS_RLS, ÷òîáû çàäàòü îãðàíè÷åíèÿ âðó÷íóþ.  ëþáîì ñëó÷àå äëÿ îðìèðîâàíèÿ
ïîëèòèê íàäî ïðèíàäëåæàòü ê ðîëè àäìèíèñòðàòîðà áàçû äàííûõ.
 Ora le òàêæå ðåàëèçîâàíà ñèñòåìà ãðèîâ ñåêðåòíîñòè. Ýòîò ïîäõîä àíàëî-
ãè÷åí òîìó, êîòîðûé äàâíî ïðèìåíÿåòñÿ â àðìèÿõ è ñëóæáàõ áåçîïàñíîñòè ñàìûõ
ðàçíûõ ãîñóäàðñòâ. Êàæäîìó ýëåìåíòó äàííûõ ïðèñâàèâàåòñÿ ãðè ñåêðåòíîñòè, íà-
ïðèìåð, ñîâåðøåííî ñåêðåòíî, ñåêðåòíî èëè êîíèäåíöèàëüíî. Òàêæå ïðîèçâî-
äèòñÿ ïðîâåðêà íà îòñóòñòâèå íàðóøåíèé ñåêðåòíîñòè äëÿ ïîëüçîâàòåëåé è ðàçëè÷íûõ
îáúåêòîâ. Òîëüêî èìåÿ ñîîòâåòñòâóþùèå ïðàâà, ìîæíî ïîëó÷èòü äîñòóï ê ñåêðåòíîé
èíîðìàöèè. Äàæå åñëè âû èìååòå ïîëíîìî÷èÿ íàèâûñøåãî óðîâíÿ, ñèñòåìà âñå ðàâ-
íî îãðàíè÷èò äîñòóïíûå âàì äàííûå òåìè, êîòîðûå âàì äåéñòâèòåëüíî íåîáõîäèìû.
Òàêèì îáðàçîì, åñëè ñèñòåìà êîíòðîëÿ äîñòóïà áóäåò íàñòðîåíà íåêîððåêòíî, ñè-
ñòåìà ãðèîâ ñåêðåòíîñòè ïðåäîòâðàòèò îáðàùåíèå ïîëüçîâàòåëÿ ñ íåäîñòàòî÷íûìè
ïðàâàìè ê äàííûì ñ âûñîêèì óðîâíåì ñåêðåòíîñòè. Äëÿ òîãî ÷òîáû âîñïîëüçîâàòüñÿ
ãðèàìè ñåêðåòíîñòè, âàì íàäî èíñòàëëèðîâàòü íàáîð èíñòðóìåíòàëüíûõ ñðåäñòâ äëÿ
ïîääåðæêè âèðòóàëüíîé ÷àñòíîé áàçû äàííûõ.

Îãðàíè÷åíèå äîñòóïà ñðåäñòâàìè ïðèëîæåíèÿ


Åùå îäèí ñïîñîá îáåñïå÷åíèÿ äåòàëüíîãî êîíòðîëÿ ïðè ðàáîòå ñ äàííûìè  ýòî
íàïèñàíèå ñðåäñòâ êîíòðîëÿ íåïîñðåäñòâåííî â ñîñòàâå îðì. àññìîòðèì îðìû
Startup è Management äëÿ ïðèëîæåíèÿ Redwood Realty. Ïåðåìåñòèâ îò÷åòû, ñâÿ-
çàííûå ñ óïðàâëåíèåì, â îðìó Management, ìû ñäåëàåì èõ ìåíåå î÷åâèäíûìè äëÿ
ðÿäîâûõ àãåíòîâ. Îäíàêî íèêòî íå çàïðåùàåò àãåíòàì ùåëêíóòü íà êíîïêå Manage-
ment è îáðàòèòüñÿ ê îò÷åòàì. Æåëàòåëüíî ñêðûòü êíîïêó Management îò àãåíòîâ

è ñäåëàòü òàê, ÷òîáû îíà áûëà âèäíà òîëüêî ìåíåäæåðàì.


Ñàìîå î÷åâèäíîå ðåøåíèå  ñäåëàòü êíîïêó Management íåâèäèìîé ïî óìîë÷à-
íèþ. Ìîæíî íàïèñàòü êîä îáðàáîò÷èêà òàê, ÷òîáû ýòà êíîïêà ñòàíîâèëàñü âèäèìîé
òîëüêî â òîì ñëó÷àå, êîãäà â ñèñòåìå ðåãèñòðèðóåòñÿ ìåíåäæåð. Èñïîëüçóÿ ñèñòåìíóþ
ïåðåìåííóþ User, âû ìîæåòå äàæå óïðàâëÿòü ïðåäñòàâëåíèåì êíîïêè è äîñòóïîì
ê íåé ñ ó÷åòîì òîãî, êàêîé èìåííî ïîëüçîâàòåëü ðàáîòàåò ñ ñèñòåìîé.

1. Çàïóñòèòå Forms Builder è îòêðîéòå èñõîäíóþ îðìó. Îòêðîéòå ïàëèòðó ñâîéñòâ


äëÿ êíîïêè Management è óñòàíîâèòå Visible=No.

Ñëåäóþùèé øàã  îòîáðàæåíèå êíîïêè â ñëó÷àå, åñëè ïîëüçîâàòåëü ÿâëÿåòñÿ


ìåíåäæåðîì. Îáðàòèâøèñü ê ïðåäñòàâëåíèþ Session_Roles, ìîæíî óâèäåòü, èñ-
CD148 ëàâà 12. Îáåñïå÷åíèå çàùèòû áàçû äàííûõ

ïîëüçóåòñÿ ëè ðîëü Manager. Åñëè ïðîâåðêà äàñò ïîëîæèòåëüíûé ðåçóëüòàò, êíîïêà


Management äîëæíà ñòàòü âèäèìîé. Ýòó ïðîâåðêó íàäî âûïîëíèòü â íà÷àëå ðàáîòû

ñ èñõîäíîé îðìîé. åàëèçóåì åå â âèäå îòäåëüíîé óíêöèè íà ñëó÷àé, åñëè îíà


ïîíàäîáèòñÿ íàì â äàëüíåéøåì.

2. Âûáåðèòå ðàçäåë Program Units â îáúåêòíîì íàâèãàòîðå è ùåëêíèòå íà êíîï-


êå Create. Ñîçäàéòå óíêöèþ è íàçîâèòå åå IsManager. Îòðåäàêòèðóéòå øàáëîí
òàê, ÷òîáû âîçâðàùàëîñü çíà÷åíèå Number, è äîáàâüòå êîä äëÿ ïðîâåðêè Ses-
sion_Roles.
FUNCTION IsManager RETURN Number IS
BEGIN
DECLARE
nRoles NUMBER;
BEGIN
SELECT Count(Role) INTO nRoles FROM Session_Roles
WHERE Role='MANAGER';
Return nRoles;
END;
END;
3.  îáðàáîò÷èêå When-New-Form-Instan e èñõîäíîé îðìû íàäî ñîçäàòü ãëî-
áàëüíóþ ïåðåìåííóþ, â êîòîðîé õðàíèëèñü áû ðåçóëüòàòû âûïîëíåíèÿ óíêöèè
IsManager. Ýòî ïîçâîëèò èñïîëüçîâàòü èõ â äðóãèõ îðìàõ. Ïðîâåðüòå çíà÷å-
íèå, ÷òîáû âûÿñíèòü, äîëæíà ëè êíîïêà Management áûòü âèäèìîé. Äîáàâüòå ê
èìåþùèìñÿ âûðàæåíèÿì ñëåäóþùèå ñòðîêè:
:GLOBAL.IsManager := IsManager();
IF (:GLOBAL.IsManager > 0) THEN
SET_ITEM_PROPERTY('BTN_MANAGEMENT', VISIBLE, PROPERTY_TRUE);
SET_ITEM_PROPERTY('BTN_MANAGEMENT', ENABLED, PROPERTY_TRUE);
END IF;
4. Ñêîìïèëèðóéòå è ñîõðàíèòå óíêöèþ è èçìåíåííûé êîä îáðàáîò÷èêà. Ñêîìïèëè-
ðóéòå èñõîäíóþ îðìó è çàïóñòèòå åå.

Ñîâåò . Åñëè âû ïîëó÷èòå â ïðîöåññå êîìïèëÿöèè ñîîáùåíèå îá îøèáêå, â êîòî-


ðîì óïîìèíàåòñÿ òàáëèöà Session_Roles, òî, èñïîëüçóÿ File⇒Conne t, ïðîâåðü-
òå, çàðåãèñòðèðîâàíû ëè âû äëÿ ðàáîòû ñ áàçîé äàííûõ.

Ïðè ïðîâåðêå îðìû îáðàòèòåñü ê íåé îò èìåíè ïîëüçîâàòåëÿ Mar ouxK, êîòîðûé
íå ñâÿçàí ñ ðîëüþ Manager. Íà ðèñ. 12.6 ïîêàçàíî îêíî, êîòîðîå âèäÿò ïîëüçîâàòåëè
Agent; â íåì îòñóòñòâóåò êíîïêà Management, ïîýòîìó îíè íå ìîãóò îáðàòèòüñÿ
ê ñðåäñòâàì óïðàâëåíèÿ èç èñõîäíîé îðìû. Ïîäîáíûì îáðàçîì âû ìîæåòå ñêðûòü
ëþáûå îðìû èëè îò÷åòû, îòíîñÿùèåñÿ ê çàäà÷àì óïðàâëåíèÿ.
Ñ òî÷êè çðåíèÿ áåçîïàñíîñòè ðåøåíèå íå èäåàëüíî, îíî ñêîðåå íîñèò êîñìå-
òè÷åñêèé õàðàêòåð. Ïîëüçîâàòåëü, êîòîðûé çíàåò èìÿ îðìû Management, ìîæåò
Íàçíà÷åíèå ïðèâèëåãèé ïîñðåäñòâîì ïðåäñòàâëåíèé è ïðîöåäóð CD149

management button
is not available

èñ. 12.6. Èñõîäíàÿ îðìà, ïðåäîñòàâëÿåìàÿ ïîëüçîâàòåëÿì, íå ïðèíàäëåæàùèì ðîëè

Manager

èçìåíèòü URL â áðàóçåðå è íåïîñðåäñòâåííî îòêðûòü îðìó. Äàííûé ïîäõîä ïðåäïî-


ëàãàåò, ÷òî ãëîáàëüíûå ïåðåìåííûå íåäîñòóïíû, ïîýòîìó îðìû è îò÷åòû íå áóäóò
îòêðûòû äî òåõ ïîð, ïîêà ïîëüçîâàòåëü íå íàéäåò ñïîñîá îïðåäåëèòü èõ. Íåîáõî-
äèìî ðåàëèçîâàòü äîïîëíèòåëüíóþ ïðîâåðêó â êàæäîé óïðàâëÿþùåé îðìå, ÷òîáû
ãàðàíòèðîâàòü, ÷òî òîëüêî ìåíåäæåðû ìîãóò çàïóñòèòü åå.
Îòêðîéòå îðìó Management è îòðåäàêòèðóéòå îáðàáîò÷èê ñîáûòèÿ When-New-
Form-Instan e. Äîáàâüòå ñëåäóþùèé êîä:
BEGIN
DEFAULT_VALUE(0, 'GLOBAL.IsManager');
IF (:GLOBAL.IsManager < 1) THEN
EXIT_FORM;
END IF;
CD150 ëàâà 12. Îáåñïå÷åíèå çàùèòû áàçû äàííûõ

IF (Not Form_Su ess) THEN


EXIT_FORM;
END IF;
EXCEPTION WHEN OTHERS THEN
EXIT_FORM;
END;
Îñíîâó îáðàáîò÷èêà ñîñòàâëÿåò âûðàæåíèå IF, êîòîðîå çàêðûâàåò îðìó, åñëè
ïîëüçîâàòåëü íå ÿâëÿåòñÿ ìåíåäæåðîì. Îäíàêî, ÷òîáû ïðåäîòâðàòèòü àâàðèéíîå çà-
âåðøåíèå âñëåäñòâèå òîãî, ÷òî ãëîáàëüíàÿ ïåðåìåííàÿ íå îïðåäåëåíà, âàì íàäî çà-
äàòü çíà÷åíèå ïî óìîë÷àíèþ äëÿ GLOBAL.IsManager.  ñîñòàâå îáðàáîò÷èêà òàê-
æå ïðèñóòñòâóþò äâå ïðîâåðêè íà íàëè÷èå îøèáîê. Ïðèâåäåííûé âûøå êîä ìîæ-
íî ñêîïèðîâàòü è ïîìåñòèòü â ñîñòàâ îáðàáîò÷èêà êàæäîé îðìû, ïðåäíàçíà÷åííîé
äëÿ óïðàâëåíèÿ.

. Çàùèòà äàííûõ ïîñðåäñòâîì øèðîâàíèÿ


Øèðîâàíèå  ìîùíîå ñðåäñòâî çàùèòû, íî íåîáõîäèìî ïðåäñòàâëÿòü ñåáå, ÷òî
ìîæíî, à ÷åãî íåëüçÿ ñäåëàòü ñ åãî ïîìîùüþ.  ïðîöåññå øèðîâàíèÿ êëþ÷åâîå
çíà÷åíèå èñïîëüçóåòñÿ äëÿ ïðåîáðàçîâàíèÿ îáû÷íîãî òåêñòà, â ðåçóëüòàòå ïîëó÷à-
åòñÿ êîäèðîâàííàÿ ïîñëåäîâàòåëüíîñòü, ñêðûâàþùàÿ â ñåáå èñõîäíóþ èíîðìàöèþ.
 íàñòîÿùåå âðåìÿ ðàçëè÷àþò äâà ïðèíöèïà øèðîâàíèÿ: ñ èñïîëüçîâàíèåì îäíîãî
êëþ÷à è ñ èñïîëüçîâàíèåì äâóõ êëþ÷åé. Ïðè øèðîâàíèè ñ ïîìîùüþ îäíîãî êëþ÷à,
èëè ñèììåòðè÷íîì øèðîâàíèè, îäèí è òîò æå êëþ÷ ïðèìåíÿåòñÿ êàê ïðè êîäè-
ðîâàíèè, òàê è ïðè äåêîäèðîâàíèè äàííûõ. Øèðîâàíèå ñ ïîìîùüþ äâóõ êëþ÷åé,
èëè øèðîâàíèå ñ ïîìîùüþ îòêðûòîãî êëþ÷à, ïðåäïîëàãàåò èñïîëüçîâàíèå äëÿ êî-
äèðîâàíèÿ è äåêîäèðîâàíèÿ ðàçíûõ êëþ÷åé. Åñëè îäèí êëþ÷ èç ïàðû áûë ïðèìåíåí
äëÿ øèðîâàíèÿ, òî ðàñøèðîâàòü èíîðìàöèþ ìîæíî òîëüêî ñ ïîìîùüþ âòîðî-
ãî êëþ÷à. Îñíîâíûì ïðåèìóùåñòâîì ñèììåòðè÷íîãî êîäèðîâàíèÿ ÿâëÿåòñÿ âûñîêàÿ
ïðîèçâîäèòåëüíîñòü. Íåäîñòàòîê òàêîãî êîäèðîâàíèÿ  ñëîæíîñòü ïåðåäà÷è êëþ÷åâî-
ãî çíà÷åíèÿ. Êîäèðîâàíèå ñ ïîìîùüþ äâóõ êëþ÷åé óñòðàíÿåò ýòîò íåäîñòàòîê, îäíàêî
ñêîðîñòü øèðîâàíèÿ è äåøèðîâêè îêàçûâàåòñÿ çíà÷èòåëüíî íèæå.  áîëüøèíñòâå
ðåàëüíûõ ñèñòåì äëÿ øèðîâàíèÿ ïåðåäàâàåìûõ ñîîáùåíèé ïðèìåíÿþòñÿ äâà êëþ÷à,
à äëÿ øèðîâàíèÿ õðàíèìûõ äàííûõ  îäèí êëþ÷. ×àñòî øèðîâàíèå äâóìÿ êëþ÷àìè
ïðèìåíÿåòñÿ ëèøü äëÿ ïåðåäà÷è åäèíñòâåííîãî êëþ÷à, êîòîðûé çàòåì èñïîëüçóåòñÿ â
õîäå ñåàíñà.

Çàùèòà äàííûõ ïðè ïåðåäà÷å ïî ãëîáàëüíîé ñåòè


Íà÷èíàÿ ñ âåðñèè Ora le 9i äîñòàâêà îðì è îò÷åòîâ îñóùåñòâëÿåòñÿ â îñíîâíîì ïî
ãëîáàëüíîé ñåòè. Òàêîé ïîäõîä ñóùåñòâåííî óïðîùàåò ðàáîòó ñ ïðèëîæåíèåì, ïî-
ñêîëüêó ïîëüçîâàòåëþ íóæåí òîëüêî Web-áðàóçåð è ó÷åòíàÿ çàïèñü íà ñåðâåðå, ïðè
Çàùèòà äàííûõ ïîñðåäñòâîì øèðîâàíèÿ CD151

ýòîì åìó íå ïðèõîäèòñÿ âûïîëíÿòü ñëîæíóþ íàñòðîéêó êàæäîé ìàøèíû. Îäíàêî Èí-
òåðíåò ïðåäñòàâëÿåò ñîáîé îòêðûòóþ ñåòü, ãäå äàííûå íà ïóòè îò êëèåíòà ê ñåðâåðó
ïðîõîäÿò ìíîæåñòâî ïðîìåæóòî÷íûõ óçëîâ. Ïðè ýòîì îòíîñèòåëüíî ïðîñòî ïåðåõâà-
òèòü ñîîáùåíèå, ïðî÷èòàòü äàííûå è äàæå èçìåíèòü èõ. Áåñïðîâîäíûå ñåòè åùå áîëåå
óâåëè÷èâàþò âåðîÿòíîñòü ïåðåõâàòà.
Ïðîáëåìà, ñâÿçàííàÿ ñ ïåðåõâàòîì èíîðìàöèè, àêòóàëüíà äëÿ êàæäîãî ïðèëîæå-
íèÿ, âûïîëíÿþùåãîñÿ â ñåòåâîé ñðåäå. Ñòàíäàðòíîå ðåøåíèå ñîñòîèò â øèðîâàíèè
ïåðåäàâàåìûõ äàííûõ. Òðåáîâàíèÿ ê øèðîâàíèþ äàâíî âûðàáîòàíû, è ñîîòâåòñòâó-
þùèå ñðåäñòâà âñòðîåíû â îñíîâíûå Web-áðàóçåðû. Ïîñêîëüêó ñèñòåìû øèðîâàíèÿ
íåîáõîäèìû ìíîãèì, íåêîòîðûå êîìïàíèè ñïåöèàëèçèðóþòñÿ íà ñîçäàíèè êîììåð÷å-
ñêèõ ïðîäóêòîâ äëÿ Web-ñåðâåðîâ. Â áîëüøèíñòâå èç íèõ èñïîëüçóþòñÿ ñðåäñòâà
SSL (se ure so kets layer), ïåðâîíà÷àëüíî ðàçðàáîòàííûå êîìïàíèåé Nets ape. Ñðåä-
ñòâà ïîääåðæêè SSL âñòðîåíû â áîëüøèíñòâî Web-áðàóçåðîâ è ñåðâåðîâ. Îäíàêî,
äëÿ òîãî, ÷òîáû ñêîíèãóðèðîâàòü SSL, íàäî ïîëó÷èòü öèðîâîé ñåðòèèêàò. SSL
èñïîëüçóåò â õîäå ñåàíñà êëþ÷è, äîñòàâëÿåìûå ïîñðåäñòâîì èíðàñòðóêòóðû îò-
êðûòîãî êëþ÷à (publi -key infrastru ture  PKI). Îñíîâíàÿ îñîáåííîñòü PKI ñîñòîèò
â òîì, ÷òî â íåé èñïîëüçóþòñÿ äâà êëþ÷à  îòêðûòûé è çàêðûòûé. Ñ ïîìîùüþ îäíîãî
èç íèõ äàííûå øèðóþòñÿ, à äðóãîé ïðèìåíÿåòñÿ äëÿ ðàñøèðîâêè. Îòêðûòûé êëþ÷
ðàñïðîñòðàíÿåòñÿ ñâîáîäíî, à çàêðûòûé äåðæèòñÿ â ñåêðåòå. Web-áðàóçåð øèðóåò
ñîîáùåíèå ñ ïîìîùüþ îòêðûòîãî êëþ÷à, ïîñëå ÷åãî îíî ìîæåò ñâîáîäíî ïåðåäà-
âàòüñÿ ïî ñåòè. àñøèðîâàòü åãî ñìîæåò òîëüêî òîò, êòî èìååò äîñòóï ê ñåêðåòíîìó
êëþ÷ó, õðàíÿùåìóñÿ íà ñåðâåðå. Êàê æå ïîëó÷èòü ñåêðåòíûé çàêðûòûé êëþ÷? Äëÿ
ýòîé öåëè ñëóæàò öèðîâûå ñåðòèèêàòû. Ñ ïîìîùüþ ñåðòèèêàòà ãåíåðèðóþòñÿ äâà
êëþ÷à. Îíè æå ñëóæàò äëÿ èäåíòèèêàöèè êîìïàíèè èëè ïîëüçîâàòåëÿ, âëàäåþùåãî
ñåðâåðîì. Ñåðòèèêàò ïðèõîäèòñÿ ïðèîáðåòàòü â îðãàíèçàöèè, ñïåöèàëèçèðóþùåéñÿ
íà ïîäîáíîé äåÿòåëüíîñòè (â íàñòîÿùåå âðåìÿ êðóïíåéøåé èç íèõ ÿâëÿåòñÿ Verisign).
Åñëè æå âàì íàäî îáåñïå÷èòü ñåêðåòíîñòü â ïðåäåëàõ êîìïàíèè, âû ìîæåòå ñãåíåðè-
ðîâàòü ñåðòèèêàò ñàìîñòîÿòåëüíî.
Èìåÿ öèðîâîé ñåðòèèêàò, åãî íàäî èíñòàëëèðîâàòü íà Web-ñåðâåðå. Êîíêðåòíûå
äåéñòâèÿ, âûïîëíÿåìûå â ïðîöåññå èíñòàëëÿöèè, çàâèñÿò îò îïåðàöèîííîé ñèñòåìû
è ñåðâåðà. Èíñòðóêöèè ïî óñòàíîâêè ðàçðàáîòàíû äëÿ âñåõ ïîïóëÿðíûõ ñåðâåðîâ.
Îáû÷íî ñîçäàåòñÿ íîâàÿ ïàïêà è ñåðâåðó ñîîáùàåòñÿ î òîì, ÷òî âñå äàííûå èç ýòîé
ïàïêè è âñåõ ïàïîê, íàõîäÿùèõñÿ â åå ñîñòàâå, ïîäëåæàò øèðîâàíèþ. Çàòåì àéëû
ïðèëîæåíèÿ ïåðåíîñÿòñÿ â ýòó ïàïêó è êîððåêòèðóþòñÿ Appli ationPath è êîíè-
ãóðàöèîííûå àéëû Ora leAS. Ïîëüçîâàòåëü îòêðûâàåò èñõîäíóþ îðìó, óêàçûâàÿ
â ñòðîêå àäðåñà ïðîòîêîë https, è âñå ïåðåäàâàåìûå äàííûå øèðóþòñÿ àâòîìàòè-
÷åñêè. Îïèñàííûé ïðîöåññ óñëîâíî ïîêàçàí íà ðèñ. 12.7. Äàæå åñëè ïîëüçîâàòåëü
ðàáîòàåò â áåñïðîâîäíîé ñåòè è êòî-íèáóäü ïåðåõâàòèò îòêðûòûé êëþ÷ èëè çàêîäèðî-
âàííûå äàííûå, îí íå ñìîæåò ðàñøèðîâàòü ñîîáùåíèå. Ýòî ìîæíî ñäåëàòü òîëüêî
ñ ïîìîùüþ çàêðûòîãî êëþ÷à, íàõîäÿùåãîñÿ íà ñåðâåðå.
CD152 ëàâà 12. Îáåñïå÷åíèå çàùèòû áàçû äàííûõ

Сертифицирующая
организация
ат
фик
и
рт
й се
о
ов
сервер ифр
Ц
а
вер
с сер Открытый ключ База данных
ч
клю Закрытый ключ
Клиентская р ы тый
программа Отк нны
е
р ова ключа
иф того
аш
н ы е, з откры Данные
Дан ощью
ом
https://server сп
Данные, расшифрованные
с помощью закрытого ключа,
находящегося на сервере

èñ. 12.7. Øèðîâàíèå ñ ïîìîùüþ äâóõ êëþ÷åé

Øèðîâàíèå îòäåëüíûõ äàííûõ â áàçå


 áîëüøèíñòâå ñëó÷àåâ êîíòðîëü äîñòóïà èñïîëüçóåòñÿ äëÿ òîãî, ÷òîáû ïîçâîëèòü èç-
âëåêàòü äàííûå èç áàçû è èçìåíÿòü èõ òîëüêî òåì, êòî äåéñòâèòåëüíî èìååò íà ýòî ïðà-
âî. Îäíàêî èíîãäà ïðèõîäèòñÿ ïðåäóñìàòðèâàòü äîïîëíèòåëüíóþ çàùèòó. Ïðåäñòàâüòå
ñåáå, ÷òî ïðîèçîéäåò, åñëè çëîóìûøëåííèêó óäàñòñÿ ïîõèòèòü àéëû ñ èíîðìàöèåé
î çàêàçàõ. Çàòðàòèâ îïðåäåëåííûå óñèëèÿ, îí ñìîæåò ïðî÷èòàòü èíîðìàöèþ è óçíàòü
íîìåð ïëàòåæíûõ êàðò ïîòðåáèòåëåé. Â Êàëèîðíèè äåéñòâóåò çàêîí, ïðåäïèñûâàþ-
ùèé îïîâåùàòü î ïîäîáíûõ ñèòóàöèÿõ âñåõ ïîòðåáèòåëåé (âñêîðå ïîäîáíûå çàêîíû
áóäóò ïðèíÿòû è â äðóãèõ øòàòàõ). ×òîáû îáåñïå÷èòü äîïîëíèòåëüíóþ çàùèòó, æå-
ëàòåëüíî êîäèðîâàòü âñå êðèòè÷åñêè âàæíûå äàííûå, íàïðèìåð, íîìåðà ïëàòåæíûõ
êàðò, èäåíòèèêàöèîííûå íîìåðà è ò.ä. Ïîäîáíàÿ ìåðà ïîâûñèò äîâåðèå ê êîìïàíèè.
Ora le ïðåäîñòàâëÿåò ïàêåò dbms_ rypto äëÿ PL/SQL, â êîòîðîì ðåàëèçîâàíû
ñòàíäàðòíûå àëãîðèòìû øèðîâàíèÿ. Ñ ïîìîùüþ ýòîãî èíñòðóìåíòà ìîæíî çàêîäè-
ðîâàòü äàííûå ïåðåä òåì, êàê ïîìåùàòü èõ â áàçó. Îäíàêî ýòîò ïðîöåññ ïðîèñõîäèò
íå àâòîìàòè÷åñêè. Áîëåå òîãî, àäìèíèñòðàòîð áàçû äàííûõ äîëæåí ïðåäîñòàâèòü âàì
ïðàâà íà ðàáîòó ñ óòèëèòàìè dbms_ rypto. Ýòè ïðàâà âñòóïàþò â äåéñòâèå ïðè
ðåãèñòðàöèè ïîëüçîâàòåëÿ êàê sysdba. Åñëè âû èñïîëüçóåòå ñîáñòâåííûé ñåðâåð,
ïîïðîáóéòå çàðåãèñòðèðîâàòüñÿ â SQL*Plus ñëåäóþùèì îáðàçîì:
Conne t sys/<ñèñòåìíûé_ïàðîëü><èìÿ_ñåðâåðà>
as sysdba
Grant Exe ute on dbms_ rypto to <ïîëüçîâàòåëüñêîå_èìÿ>
Dis onne t
Çàùèòà äàííûõ ïîñðåäñòâîì øèðîâàíèÿ CD153

Òåïåðü âû ñìîæåòå èñïîëüçîâàòü îò ñâîåãî èìåíè ïðîãðàììû êîäèðîâàíèÿ èç ïà-


êåòà dbms_ rypto. Åñëè âû íå ïîëó÷èòå òðåáóåìûõ ïîëíîìî÷èé, òî ñìîæåòå ëèøü
÷èòàòü êîä. Ïîäðîáíîå ïðåäñòàâëåíèå îá èñïîëüçîâàíèè óíêöèé èç óêàçàííîãî ïà-
êåòà ìîæíî ïîëó÷èòü, îçíàêîìèâøèñü ñ ïðèìåðàìè, ïðèâåäåííûìè â äîêóìåíòàöèè
Ora le. Íèæå ïðåäñòàâëåí êîä ïðîöåäóðû, ïðåäíàçíà÷åííîé äëÿ êîäèðîâàíèÿ è äåêî-
äèðîâàíèÿ ñòðîêè.
SET SERVEROUTPUT ON
CREATE OR REPLACE PROCEDURE TestEn rypt AS
BEGIN
DECLARE
input_string VARCHAR2(22) := 'This is plaintext data';
en _type Number := dbms_ rypto.DES_CBC_PKCS5;
key_string VARCHAR2(11) := 'my password';
raw_key RAW(128) := UTL_I18N.STRING_TO_RAW(key_string,'AL32UTF8');
en rypted_raw RAW(2048);
en rypted_string VARCHAR2(2048);
de rypted_raw RAW(2048);
de rypted_string VARCHAR2(2048);
BEGIN
dbms_output.put_line('> Input String : ' || input_string);
dbms_output.put_line('> ========= BEGIN TEST En rypt =========');
en rypted_raw := dbms_ rypto.En rypt(
sr => UTL_I18N.STRING_TO_RAW(input_string, 'AL32UTF8'),
typ => en _type,
key => raw_key);
dbms_output.put_line('> En rypted hex value : ' ||
rawtohex(UTL_RAW.CAST_TO_RAW(en rypted_raw)));
de rypted_raw := dbms_ rypto.De rypt(
sr => en rypted_raw,
typ => en _type,
key => raw_key);
de rypted_string := CONVERT(UTL_RAW.CAST_TO_VARCHAR2
(de rypted_raw),'US7ASCII','AL32UTF8');
dbms_output.put_line(
'> De rypted string output : ' | | de rypted_string);
IF input_string = de rypted_string THEN
dbms_output.put_line(
'> String DES En ryption and De ryption su essful');
END if;
END;
END;
/
Ïðîâåðüòå óíêöèþ; äëÿ ýòîãî íàäî ââåñòè exe TestEn rypt. Íà ðèñ. 12.8
ïîêàçàíû ðåçóëüòàòû âûçîâà óíêöèè. Êîäèðîâàíèå òåêñòà ïðîèñõîäèò äîñòàòî÷íî
ïðîñòî. îðàçäî òðóäíåå èñïîëüçîâàòü êîä äëÿ õðàíåíèÿ è èçâëå÷åíèÿ èç áàçû çà-
øèðîâàííûõ äàííûõ. Â ýòîì âàì ñíîâà ïîìîãóò ïðèìåðû èç äîêóìåíòàöèè Ora le.
Äëÿ îðãàíèçàöèè õðàíåíèÿ äàííûõ íàäî çàìåíèòü ñòàíäàðòíûé êîä INSERT íà îá-
ðàáîò÷èê, êîòîðûé âíà÷àëå øèðóåò êàæäóþ ñòðîêó. Äëÿ èçâëå÷åíèÿ äàííûõ íàäî
èñïîëüçîâàòü ïðåäñòàâëåíèå, êîòîðîå âûçûâàåò õðàíèìóþ ïðîöåäóðó äåêîäèðîâàíèÿ.
CD154 ëàâà 12. Îáåñïå÷åíèå çàùèòû áàçû äàííûõ

èñ. 12.8. åçóëüòàòû ïðîâåðêè óíêöèè êîäèðîâàíèÿ

Êàê âû óæå çíàåòå, îñíîâíàÿ ïðîáëåìà ñ ñèììåòðè÷íûìè êëþ÷àìè ñîñòîèò â òîì,


÷òî èõ íàäî õðàíèòü è ïåðåäàâàòü. Ýòà ïðîáëåìà òðóäíî ïîääàåòñÿ ðåøåíèþ. äå ðàç-
ìåñòèòü êëþ÷, ÷òîáû îí áûë äîñòóïåí è â òî æå âðåìÿ íàõîäèëñÿ â áåçîïàñíîñòè? Â
äîêóìåíòàöèè Ora le ïðåäëîæåíî íåñêîëüêî ñïîñîáîâ, íî êàæäûé èç íèõ èìååò ñâîè
íåäîñòàòêè. Ñàìûé ïðîñòîé ñïîñîá  âêëþ÷èòü êëþ÷ â êîä ïðîöåäóðû, îäíàêî åñëè
êòî-íèáóäü âçëîìàåò áàçó, îí íàéäåò êëþ÷ è ñìîæåò èñïîëüçîâàòü åãî äëÿ äåøè-
ðîâêè äàííûõ. Ìîæíî òàêæå õðàíèòü êëþ÷ â àéëå íà ñåðâåðå è èñïîëüçîâàòü äëÿ
åãî çàùèòû ñðåäñòâà îïåðàöèîííîé ñèñòåìû è âòîðîé óðîâåíü êîäèðîâàíèÿ. Îäíàêî
è ýòîò ïîäõîä íå ñîâåðøåíåí. Îäíî èç îñíîâíûõ ïðàâèë ñèñòåì áåçîïàñíîñòè ãëàñèò:
èäåàëüíàÿ çàùèòà íåâîçìîæíà. Íàäî íàéòè òàêîå ðåøåíèå, êîòîðîå áûëî áû íàèáîëåå
óìåñòíûì â êîíêðåòíîé ñèòóàöèè.

Çàùèòà èñõîäíîãî êîäà ñ ïîìîùüþ óòèëèòû wrap


Ñòðîãî ãîâîðÿ, óòèëèòà wrap íå ÿâëÿåòñÿ èíñòðóìåíòîì äëÿ êîäèðîâàíèÿ, íî îíà
âûïîëíÿåò ñõîäíûå óíêöèè. Äàííàÿ ïðîãðàììà ïåðåèìåíîâûâàåò âñå ïåðåìåííûå
è èñêàæàåò êîä PL/SQL, çàòðóäíÿÿ åãî âîñïðèÿòèå. Ïðîãðàììà ïî-ïðåæíåìó âûïîë-
íÿåòñÿ êîððåêòíî. Èñïîëüçóÿ ýòó óòèëèòó, âû ìîæåòå ïîñòàâëÿòü ñîçäàííûé âàìè êîä
Îòñëåæèâàíèå äåéñòâèé ñ áàçîé äàííûõ CD155

ïîòðåáèòåëÿì èëè óñòàíàâëèâàòü ïðîãðàììíûå ñðåäñòâà íà èõ ñåðâåðàõ. Åñëè êòî-


ëèáî çàõî÷åò âîñïîëüçîâàòüñÿ ïëîäàìè âàøèõ óñèëèé â ñâîèõ öåëÿõ, åìó ïðèäåòñÿ
çàòðàòèòü ìíîãî âðåìåíè, ÷òîáû ïðî÷èòàòü êîä è ïîíÿòü, êàê îí ðàáîòàåò. Çàäà÷à
âîññòàíîâëåíèÿ êîäà íå ÿâëÿåòñÿ íåðàçðåøèìîé, íî îíà äîñòàòî÷íî ñëîæíàÿ, ÷òîáû
îñòàíîâèòü ëþáèòåëåé âîñïîëüçîâàòüñÿ ðåçóëüòàòàìè ÷óæîãî òðóäà. Äîïîëíèòåëüíóþ
èíîðìàöèþ îá óòèëèòå wrap ìîæíî íàéòè â äîêóìåíòàöèè Ora le. Îíà âûçûâàåòñÿ
èç êîìàíäíîé ñòðîêè ñëåäóþùèì îáðàçîì:
wrap iname=<âõîäíîé_àéë> [oname=<âûõîäíîé_àéë>℄
Åñëè âû îáðàáîòàåòå óòèëèòîé wrap àéë ñöåíàðèÿ PL/SQL, òî íå ñìîæåòå îò-
ðåäàêòèðîâàòü åãî. Ïðèäåòñÿ âíåñòè èçìåíåíèÿ â èñõîäíûé àéë è ñíîâà ïðèìåíèòü
ê íåìó èíñòðóìåíò wrap. Ñëåäèòå çà òåì, ÷òîáû âàøè èñõîäíûå àéëû õðàíèëèñü
â ìåñòå, íåäîñòóïíîì äëÿ ïîñòîðîííèõ. Çàìåòüòå òàêæå, ÷òî óòèëèòà wrap íå ïðåîáðà-
çóåò îáðàáîò÷èêè ñîáûòèé. Âàì ïðèäåòñÿ ñîçäàòü îòäåëüíóþ çàùèùåííóþ ïðîöåäóðó
è îáðàùàòüñÿ ê íåé èç òåëà îáðàáîò÷èêà.
Åñëè âû èñïîëüçóåòå ñèñòåìû øèðîâàíèÿ, ñëåäèòå çà òåì, ÷òîáû óòèëèòà wrap
áûëà ïðèìåíåíà êî âñåì ïàêåòàì êîäèðîâàíèÿ, â îñîáåííîñòè â òîì ñëó÷àå, åñëè êëþ÷
ñîäåðæèòñÿ â ñîñòàâå ïðîöåäóðû. Äàæå åñëè êëþ÷ õðàíèòñÿ ïî-äðóãîìó, âàì âñå ðàâíî
íàäî ñäåëàòü êîä òðóäíûì äëÿ âîñïðèÿòèÿ, ÷òîáû ïóòåì åãî àíàëèçà ñëîæíåå áûëî
íàéòè êëþ÷.

. Îòñëåæèâàíèå äåéñòâèé ñ áàçîé äàííûõ


Îòñëåæèâàíèå, èëè ìîíèòîðèíã, äåéñòâèé ñ áàçîé äàííûõ  îäèí èç êëþ÷åâûõ ýëå-
ìåíòîâ ïëàíà çàùèòû. Îáû÷íîé óñòàíîâêè ïðàâ è øèðîâàíèÿ äàííûõ íåäîñòà-
òî÷íî.  ðÿäå ñëó÷àåâ ïðèõîäèòñÿ ñëåäèòü çà äåéñòâèÿìè ñ áàçîé, ÷òîáû âûÿâèòü
ïðîáëåìó ðàíüøå, ÷åì ñèòóàöèÿ âûéäåò èç ïîä êîíòðîëÿ. Ìîíèòîðèíã äàåò ñëåäóþ-
ùèå ïðåèìóùåñòâà.

• Ïîçâîëÿåò âûÿâëÿòü íåæåëàòåëüíûå äåéñòâèÿ, ïðåäïðèíèìàåìûå íåêîòîðûìè


ïîëüçîâàòåëÿìè.
• Îïîâåñòèâ âñåõ î ãîòîâÿùåìñÿ ìîíèòîðèíãå, âû óäåðæèòå ïîëüçîâàòåëåé îò ñî-
áëàçíà ïîïûòàòüñÿ ïðåäïðèíÿòü íåäîïóñòèìûå äåéñòâèÿ.
• åçóëüòàòû ìîíèòîðèíãà ÿâëÿþòñÿ èñõîäíûì ìàòåðèàëîì äëÿ èññëåäîâàíèÿ îñî-
áåííîñòåé ðàáîòû ñ áàçîé.
• Ïîäðîáíàÿ èíîðìàöèÿ îá èñïîëüçîâàíèè áàçû äàííûõ ïîìîãàåò àäìèíèñòðàòîðó
íàñòðîèòü áàçó.
• Ïîëó÷åííàÿ èíîðìàöèÿ ïîìîãàåò óòî÷íèòü íàáîð ïîëíîìî÷èé.
CD156 ëàâà 12. Îáåñïå÷åíèå çàùèòû áàçû äàííûõ

ÒÀÁËÈÖÀ 12.4. Âàðèàíòû ìîíèòîðèíãà, îáåñïå÷èâàåìûå Ora le

Òèï ìîíèòîðèíãà Îïèñàíèå


Îòñëåæèâàíèå Ñëåäèò çà èñïîëüçîâàíèåì îïðåäåëåííîãî òèïà âûðàæåíèé.
âûðàæåíèé Íàïðèìåð, AUDIT TABLE êîíòðîëèðóåò íåêîòîðûå âûðàæåíèÿ
DDL, íåçàâèñèìî îò èñïîëüçóåìîé òàáëèöû. Ýòîò òèï ìîíèòî-
ðèíãà ìîæåò áûòü ïðèìåíåí ê îòäåëüíûì èëè êî âñåì ïîëüçî-
âàòåëÿì
Îòñëåæèâàíèå Ñëåäèò çà èñïîëüçîâàíèåì ñèñòåìíûõ ïðèâèëåãèé, íàïðèìåð
ïðèâèëåãèé AUDIT CREATE TABLE. Ìîæåò áûòü ïðèìåíåí ê îòäåëüíûì èëè
êî âñåì ïîëüçîâàòåëÿì
Îòñëåæèâàíèå Ñëåäèò çà ïðèìåíåíèåì îïðåäåëåííûõ âûðàæåíèé ê îòäåëüíûì
îáúåêòîâ ñõåìû îáúåêòàì. Íàïðèìåð, AUDIT SELECT ON ustomers îòìå÷àåò
êàæäóþ ïîïûòêó èçâëå÷ü äàííûå èç òàáëèöû ñ èíîðìàöèåé
î ïîëüçîâàòåëÿõ. Ïðèìåíÿåòñÿ òîëüêî êî âñåì ïîëüçîâàòåëÿì
Ïîäðîáíûé Îáåñïå÷èâàåò äåòàëüíûé êîíòðîëü. Âû ìîæåòå ñîçäàòü ëîãè-
ìîíèòîðèíã ÷åñêèå óñëîâèÿ äëÿ êîíêðåòíûõ ñòîëáöîâ è ñòðîê. Íàïðèìåð,
ìîæíî ñëåäèòü çà âñåìè çàêàçàìè, ñóììà êîòîðûõ ïðåâûøàåò
çíà÷åíèå 100000

 õîäå ìîíèòîðèíãà äåéñòâèÿ ïîëüçîâàòåëåé îòñëåæèâàþòñÿ è çàïèñûâàþòñÿ â îò-


äåëüíóþ ïàïêó, äîñòóï ê êîòîðîé èìåþò ëèøü òå ëèöà, êîòîðûå äîëæíû ðàáîòàòü ñ ïî-
ëó÷åííûìè äàííûìè. Î÷åâèäíî, ÷òî îáúåì äàííûõ áûñòðî âîçðàñòàåò. Ñëåäîâàòåëü-
íî, íåîáõîäèìî òî÷íî îïðåäåëèòü, êàêèå òèïû ñîáûòèé è êàêèå äåéñòâèÿ íåîáõîäèìî
èêñèðîâàòü. Êàê ïðàâèëî, ñïåöèàëèñòû îãðàíè÷èâàþòñÿ ñðàâíèòåëüíî íåáîëüøèì
ñïèñêîì êðèòè÷åñêè âàæíûõ äåéñòâèé. Åñëè â ðåçóëüòàòå ìîíèòîðèíãà áóäóò âûÿâ-
ëåíû ïðîáëåìû èëè ïîäîçðèòåëüíàÿ äåÿòåëüíîñòü ïîëüçîâàòåëåé, ìîæíî âêëþ÷èòü
äîïîëíèòåëüíûå ñðåäñòâà êîíòðîëÿ. Ora le ïîääåðæèâàåò ðàçëè÷íûå óðîâíè ìîíèòî-
ðèíãà; ÷åòûðå îñíîâíûå êàòåãîðèè ïåðå÷èñëåíû â òàáë. 12.4.
Ïðè ìîíèòîðèíãå ðåãèñòðèðóåòñÿ íàçâàíèå âûïîëíÿåìîé îïåðàöèè, îáúåêò, íà
êîòîðûé îíà âîçäåéñòâóåò, èìÿ ïîëüçîâàòåëÿ, ïðåäïðèíÿâøåãî äàííîå äåéñòâèå, è
âðåìÿ. åçóëüòàòû ìîãóò ëèáî ñîõðàíÿòüñÿ â áàçå äàííûõ, ëèáî çàïèñûâàòüñÿ â ñè-
ñòåìíûé àéë. Äëÿ ïîìåùåíèÿ äàííûõ â òàáëèöó sys.aud$ èñïîëüçóåòñÿ êîìàíäà
DBA_AUDIT_TRAIL. Çàïèñè î ìîíèòîðèíãå, ïîìåùàåìûå â áàçó äàííûõ, ñîäåðæàò
áîëüøå èíîðìàöèè, ÷åì ñâåäåíèÿ, çàïèñûâàåìûå â ñèñòåìíûé àéë. Íåçàâèñèìî îò
òîãî, çàïèñûâàþòñÿ ëè ðåçóëüòàòû â áàçó äàííûõ èëè â àéë, ìîæåò âîçíèêíóòü ïðî-
áëåìà, ñâÿçàííàÿ ñ íåõâàòêîé äèñêîâîãî ïðîñòðàíñòâà. Ïîñêîëüêó â õîäå äåòàëüíîé
ïðîâåðêè ãåíåðèðóþòñÿ îãðîìíûå îáúåìû äàííûõ, íåîáõîäèìî ñëåäèòü çà ïîëó÷àå-
ìîé èíîðìàöèåé è âîâðåìÿ ïðèâîäèòü åå â ïîðÿäîê.
Îòñëåæèâàíèå äåéñòâèé ñ áàçîé äàííûõ CD157

 ñèñòåìå ìîíèòîðèíãà ïðåäóñìîòðåíû âûðàæåíèÿ äëÿ îòñëåæèâàíèÿ êîìàíä, âû-


ïîëíåííûõ óñïåøíî (WHENEVER SUCCESSFUL), îïåðàöèé, â õîäå êîòîðûõ âîçíèêëè
ïðîáëåìû (WHENEVER UNSUCCESSFUL), èëè è òåõ è äðóãèõ îäíîâðåìåííî. ×àñòî èí-
îðìàöèÿ î ïðîáëåìàõ â õîäå âûïîëíåíèÿ êîìàíä ÿâëÿåòñÿ ñèãíàëîì îá àòàêå èçâíå.
Åñëè âàøè ïðàâà óñòàíîâëåíû êîððåêòíî, à êòî-òî ïîñòîðîííèé ïûòàåòñÿ ïîëó÷èòü
èëè óäàëèòü äàííûå, ýòî îòðàçèòñÿ â ðåçóëüòàòàõ ìîíèòîðèíãà.
Ora le òàêæå ïðåäîñòàâëÿåò âîçìîæíîñòü îòñëåæèâàíèÿ âñåõ äåéñòâèé, èñïîëüçóÿ
ðåãèñòðàöèþ sysdba è sysoper. Êîìàíäà AUDIT_SYS_OPERATIONS çàïèñûâàåò âñå
óñïåøíî âûïîëíåííûå SQL-âûðàæåíèÿ â ñèñòåìíûé àéë. óêîâîäñòâî êîìïàíèè
ìîæåò èñïîëüçîâàòü ýòó âîçìîæíîñòü äëÿ êîíòðîëÿ äåéñòâèé àäìèíèñòðàòîðà áàçû
äàííûõ. Îáû÷íî àäìèíèñòðàòîð èìååò ïðàêòè÷åñêè íåîãðàíè÷åííûé äîñòóï ê áàçå,
ïîýòîìó íàçíà÷àòü íà ýòó äîëæíîñòü íåîáõîäèìî ñîòðóäíèêà, ïîëüçóþùåãîñÿ ïîëíûì
äîâåðèåì. Îäíàêî, åñëè âîçíèêëè êàêèå-ëèáî ïîäîçðåíèÿ â åãî äîáðîñîâåñòíîñòè,
åñòü âîçìîæíîñòü îòñëåäèòü åãî äåéñòâèÿ ñ áàçîé. Ñèñòåìà Ora le àâòîìàòè÷åñêè
âûïîëíÿåò ìîíèòîðèíã äåéñòâèé êàæäîãî ïîëüçîâàòåëÿ, çàðåãèñòðèðîâàâøåãîñÿ êàê
sysdba èëè sysoper. Òàêæå ðåãèñòðèðóåòñÿ âðåìÿ çàïóñêà è îñòàíîâêè ÑÓÁÄ.
Äëÿ òîãî ÷òîáû âîñïîëüçîâàòüñÿ êîìàíäàìè ìîíèòîðèíãà, íàäî èìåòü äîñòóï ê ïà-
êåòó DBMS_FGA. Ñ ïîìîùüþ ýòîãî èíñòðóìåíòà àäìèíèñòðàòîð òàêæå ìîæåò ñîçäà-
âàòü íîâûå îáðàáîò÷èêè ñîáûòèé. Ïîìèìî çàïèñè äàííûõ â àéë, àäìèíèñòðàòîð
ìîæåò íàïèñàòü ïðîöåäóðó, êîòîðàÿ áóäåò îòïðàâëÿòü ïðåäóïðåæäàþùèå ñîîáùå-
íèÿ è äàæå çàâåðøàòü ðàáîòó îïðåäåëåííûõ ïðîãðàìì èëè ñåàíñû ðàáîòû íåêîòî-
ðûõ ïîëüçîâàòåëåé.

Âêëþ÷åíèå ðåæèìà ìîíèòîðèíãà


Ïî óìîë÷àíèþ ñðàçó ïîñëå óñòàíîâêè áàçû äàííûõ Ora le ìîíèòîðèíã çàïðåùåí. Äëÿ
òîãî ÷òîáû ðàçðåøèòü åãî, âàì íàäî èçìåíèòü ïàðàìåòð â îäíîì èç êîíèãóðàöèîííûõ
àéëîâ. ×òîáû èçìåíåíèÿ áûëè ó÷òåíû, íåîáõîäèìî ïåðåçàïóñòèòü áàçó äàííûõ.
Ìîäèèöèðîâàòü êîíèãóðàöèîííûé àéë ìîæåò ëèáî âëàäåëåö, ëèáî àäìèíèñòðàòîð
áàçû äàííûõ. Åñëè âû ðàáîòàåòå ñî ñðåäñòâàìè Ora le íà ñâîåé ìàøèíå, ïðîáëåì ó âàñ
íå âîçíèêíåò. Åñëè æå êîìïüþòåð ñ áàçîé ïðèíàäëåæèò íå âàì, òî âíåñòè òðåáóåìûå
èçìåíåíèÿ, ïî-âèäèìîìó, íå óäàñòñÿ. àçðåøèâ ìîíèòîðèíã, âû ñìîæåòå íàïèñàòü
âûðàæåíèÿ äëÿ îòñëåæèâàíèÿ äåéñòâèé ñ ñîçäàííûìè âàìè îáúåêòàìè.
Åñëè âû ðàáîòàåòå ñ ñîáñòâåííîé êîïèåé Ora le, òî èìååòå âîçìîæíîñòü îòðå-
äàêòèðîâàòü èíèöèàëèçàöèîííûé àéë áàçû äàííûõ. Èçìåíèòü èíèöèàëèçàöèîííûå
ïàðàìåòðû ìîæíî, òîëüêî èìåÿ ïðàâà àäìèíèñòðàòîðà áàçû äàííûõ. Åñëè ñèñòåìà
Ora le ðàáîòàåò íà âàøåì êîìïüþòåðå, âû ìîæåòå ïðåäïðèíÿòü ïåðå÷èñëåííûå íèæå
äåéñòâèÿ, îäíàêî äàæå íå ïðîáóéòå âûïîëíèòü èõ äëÿ âçàèìîäåéñòâèÿ ñ ìàøèíîé,
êîíòðîëèðóåìîé äðóãèì àäìèíèñòðàòîðîì.

1. Çàïóñòèòå SQL*Plus è çàðåãèñòðèðóéòåñü, óêàçàâ sys/<ïàðîëü><ñåðâåð>as


sysdba. Óñòàíîâèòå ïàðàìåòð ìîíèòîðèíãà ñ ïîìîùüþ ñëåäóþùåé êîìàíäû:
CD158 ëàâà 12. Îáåñïå÷åíèå çàùèòû áàçû äàííûõ

ALTER SYSTEM set audit_trail=DB_EXTENDED SCOPE=SPFILE;


Ïàðàìåòð DB_EXTENDED ñîõðàíÿåò SQL-âûðàæåíèå, ÷òîáû áûëî ïðîùå àíàëèçè-
ðîâàòü àéë ïðîòîêîëà. Åñëè âû èñïîëüçóåòå ëèøü çíà÷åíèå DB, ðàçìåðû àéëà
ïðîòîêîëà áóäóò ìåíüøèìè, íî â íåì áóäåò ñîäåðæàòüñÿ òîëüêî òèï âûðàæåíèÿ,
à íå ðåàëüíàÿ êîìàíäà.
2. Âíåñåííûå èçìåíåíèÿ íå ïðîèçâåäóò íèêàêîãî ýåêòà äî òåõ ïîð, ïîêà âû íå
ïåðåçàïóñòèòå ñèñòåìó Ora le. Ïîïðîáóéòå âûïîëíèòü êîìàíäó SHUTDOWN. Ïîäî-
æäèòå íåñêîëüêî ìèíóò è ñ ïîìîùüþ èíñòðóìåíòà Windows Computer Management
óáåäèòåñü â òîì, ÷òî ñðåäñòâà Ora le ïðåêðàòèëè ðàáîòó.
3. Ïåðåçàïóñòèòå áàçó äàííûõ. Âû ìîæåòå ïîïðîáîâàòü âûïîëíèòü â SQL*Plus êî-
ìàíäó STARTUP, íî íå èñêëþ÷åíî, ÷òî âàì ïðèäåòñÿ ïåðåçàïóñòèòü ñåðâåð. Ïîñëå
òîãî êàê âñå ñëóæáû âîçîáíîâÿò ðàáîòó, çàðåãèñòðèðóéòåñü â SQL*Plus êàê sysdba
è óáåäèòåñü â òîì, ÷òî èçìåíåíèÿ ó÷òåíû.
Show parameter audit_trail

Åñëè âû ðàáîòàåòå íà ñîâìåñòíî èñïîëüçóåìîé ìàøèíå, êîòîðàÿ áûëà ñêîíèãó-


ðèðîâàíà äëÿ ìîíèòîðèíãà, òî ìîæåòå âûïîëíèòü î÷åðåäíûå äåéñòâèÿ. Óïðîùåííûé
îðìàò äëÿ èíèöèàëèçàöèè ïðîöåññà çàïèñè äåéñòâèé âûãëÿäèò ñëåäóþùèì îáðàçîì:
AUDIT <SQL-âûðàæåíèå>
[ON <îáúåêò ñõåìû> ℄ [BY <ïîëüçîâàòåëü> ℄
[WHENEVER [NOT℄ SUCCESSFUL℄
Ñóùåñòâóþò ðàçëè÷íûå ðåøåíèÿ, íàïðèìåð, çàïèñü ïðè êàæäîì âûïîëíåíèè âû-
ðàæåíèÿ (BY ACCESS) ëèáî çàïèñü îäèí ðàç â òå÷åíèå ñåàíñà (BY SESSION). Çàìåòüòå
òàêæå, ÷òî âû ìîæåòå óêàçàòü âûðàæåíèå èëè ãðóïïó âûðàæåíèé, íå çàäàâàÿ îáúåêò.
 ýòîì ñëó÷àå áóäåò ðåãèñòðèðîâàòüñÿ êàæäàÿ ïîïûòêà èñïîëüçîâàíèÿ âûðàæåíèÿ,
íåçàâèñèìî îò îáúåêòà. Ïðè òàêîì ïîäõîäå ðàçìåðû àéëîâ ïðîòîêîëîâ î÷åíü âå-
ëèêè, ïîýòîìó ïî âîçìîæíîñòè ñëåäóåò èçáåãàòü åãî. Îäíàêî îí äîïóñòèì äëÿ ðåä-
êî èñïîëüçóåìûõ êîìàíä, íàïðèìåð AUDIT ROLE èëè AUDIT ROLE WHENEVER NOT
SUCCESSFUL.

1. Çàïóñòèòå âòîðîé ýêçåìïëÿð SQL*Plus è çàðåãèñòðèðóéòåñü, èñïîëüçóÿ îáû÷íóþ


ó÷åòíóþ çàïèñü ïîëüçîâàòåëÿ Redwood. Ïðåäïîëîæèì, âàñ èíòåðåñóþò èçìåíåíèÿ
â òàáëèöå Agents, ïîýòîìó íàñòðîéòå ñðåäñòâà ìîíèòîðèíãà äëÿ ó÷åòà êîìàíä
âñòàâêè çàïèñåé â ýòó òàáëèöó èëè èõ óäàëåíèÿ.
AUDIT INSERT on Agents;
AUDIT DELETE on Agents;
Çàìåòüòå, ÷òî â ýòèõ êîìàíäàõ îòñóòñòâóåò âûðàæåíèå WHENEVER, ïîýòîìó ðåãè-
ñòðèðîâàòüñÿ áóäóò âñå êîìàíäû âêëþ÷åíèÿ è óäàëåíèÿ, ïðèìåíåííûå ê òàáëèöå
Agents, íåçàâèñèìî îò òîãî, óñïåøíî ëè îíè áûëè âûïîëíåíû.
2. Ñîçäàéòå íîâîãî àãåíòà è óäàëèòå ñòðîêó, ÷òîáû ïðîâåðèòü ñèñòåìó ìîíèòîðèíãà.
Îòñëåæèâàíèå äåéñòâèé ñ áàçîé äàííûõ CD159

INSERT INTO Agents(AgentID, Firstname, Lastname)


VALUES (99, 'Barbara', 'Feldon');
ommit;
DELETE FROM Agents
WHERE AgentID=99;
ommit;
Âðÿä ëè èìååò ñìûñë, ÷òîáû ìîíèòîðèíã âûïîëíÿëñÿ íà ìàøèíå ðàçðàáîò÷èêà,
ïîñêîëüêó ïðè ýòîì áóäåò ãåíåðèðîâàòüñÿ áîëüøîé îáúåì äàííûõ, à ñî âðåìåíåì
âû, âåðîÿòíî, áóäåòå çàáûâàòü óäàëÿòü èõ. Êðîìå òîãî, ýòè äàííûå äàëåêî íå âñåãäà
ìîãóò áûòü ïîëåçíû. Ïîýòîìó, åñëè âû ðàáîòàåòå íà ñâîåé ìàøèíå, îòêëþ÷èòå
ìîíèòîðèíã.
3. àáîòàÿ â êà÷åñòâå îáû÷íîãî ïîëüçîâàòåëÿ, âû ìîæåòå îòêëþ÷èòü êîíòðîëü. Äëÿ
ýòîãî íàäî èñïîëüçîâàòü êîìàíäó NoAudit.
NOAUDIT INSERT on Agents;
NOAUDIT DELETE on Agents;

Ïðîñìîòð ðåçóëüòàòîâ ìîíèòîðèíãà


Åñëè ñèñòåìà Ora le âûïîëíÿåòñÿ íà êîìïüþòåðå ïîä óïðàâëåíèåì Windows è âû
çàïèñûâàåòå ðåçóëüòàòû ìîíèòîðèíãà â ñèñòåìíûé àéë, âñå èíîðìàöèÿ ñîõðà-
íÿåòñÿ â ñòàíäàðòíîì àéëå ïðîòîêîëà Event Viewer. Ïðè íàëè÷èè äîñòàòî÷íûõ
ïðèâèëåãèé äëÿ ðàáîòû â îïåðàöèîííîé ñèñòåìå (íàïðèìåð, åñëè âû ïðèíàäëåæèòå
ãðóïïå Administrators) âû ìîæåòå ïðîñìîòðåòü èëè óäàëèòü çàïèñè, îáðàòèâøèñü
ê Start/Programs/AdministrativeTools/Event Viewer. Event Viewer ïðåäî-
ñòàâëÿåò ìèíèìàëüíûå âîçìîæíîñòè ñîðòèðîâêè è ïîèñêà, îäíàêî âû ìîæåòå ñîõðà-
íèòü èíîðìàöèþ î ñîáûòèÿõ â òåêñòîâîì àéëå è îáðàáàòûâàòü åãî ñ ïîìîùüþ
ëþáûõ äîñòóïíûõ ñðåäñòâ.
Åñëè âû ðåøèòå õðàíèòü ðåçóëüòàòû ìîíèòîðèíãà â áàçå äàííûõ, îíè áóäóò ïî-
ìåùåíû â òàáëèöó sys.aud$. Äëÿ ðàáîòû ñ çàïèñÿìè èç ýòîé òàáëèöû íàäî èìåòü
ïðèâèëåãèè SELECT. Âû ìîæåòå èñïîëüçîâàòü ëþáîå ñòàíäàðòíîå âûðàæåíèå SELECT
è âûáèðàòü ñòðîêè, ñòîëáöû èëè ñîðòèðîâàòü äàííûå.

1. ×òîáû ïðîñìîòðåòü èíîðìàöèþ îá îòñëåæèâàåìûõ ñîáûòèÿõ, íàäî îòîðìàòè-


ðîâàòü âûõîäíûå äàííûå è èñïîëüçîâàòü ñòàíäàðòíîå âûðàæåíèå SELECT.
SET linesize 150
COLUMN NTIMESTAMP# FORMAT DATETIME
COLUMN UserID FORMAT A15
COLUMN OBJ$NAME FORMAT A20
COLUMN SQLTEXT FORMAT A40
SELECT TO_CHAR(NTimeStamp#, 'YYYY-MM-DD HH24:MI:SS')
AS Time, UserID,
OBJ$NAME,
SQLTEXT FROM sys.aud$;
CD160 ëàâà 12. Îáåñïå÷åíèå çàùèòû áàçû äàííûõ

èñ. 12.9. åçóëüòàòû ìîíèòîðèíãà

Íà ðèñ. 12.9 ïîêàçàí ïðèìåð âûõîäíûõ äàííûõ. Çàìåòüòå, ÷òî âû, âîçìîæíî, íå
óâèäèòå âòîðîé çàïèñè î êîìàíäå DELETE äî òåõ ïîð, ïîêà íå çàâåðøèòå ñåàíñ ðà-
áîòû. Â ðåàëüíûõ ñèñòåìàõ, â çàâèñèìîñòè îò îáúåêòîâ è êîìàíä, âûáðàííûõ äëÿ
ìîíèòîðèíãà, ÷èñëî çàïèñåé ìîæåò äîñòèãàòü òûñÿ÷, à èíîãäà è ñîòåí òûñÿ÷.
Åñëè âû ïîëüçóåòåñü ñåðâåðîì åäèíîëè÷íî, ó âàñ åñòü âîçìîæíîñòü îòêëþ÷èòü
ïàðàìåòð ìîíèòîðèíãà. Çàðåãèñòðèðîâàâøèñü êàê sysdba, âû ìîæåòå î÷èñòèòü òàá-
ëèöó ñ ðåçóëüòàòàìè ñ ïîìîùüþ ñòàíäàðòíîé êîìàíäû óäàëåíèÿ äàííûõ. Èçìåíåíèÿ
íå ïðîÿâÿòñÿ äî òåõ ïîð, ïîêà âû íå ïåðåçàïóñòèòå êîìïüþòåð.
ALTER SYSTEM set audit_trail=NONE SCOPE=SPFILE;
DELETE FROM sys.aud$;
Commit;
Ïîäðîáíûé ìîíèòîðèíã ïðåäîñòàâëÿåò âàì äîïîëíèòåëüíûé êîíòðîëü íàä ñîáðàí-
íûìè äàííûìè. Îäíàêî ïîäîáíûå ñðåäñòâà íå ïîääåðæèâàþòñÿ ñ ïîìîùüþ AU-
DIT_TRAIL. Ïðàâà íà âêëþ÷åíèå è îòìåíó ïîëèòèêè ïîäðîáíîãî ìîíèòîðèíãà äà-
åò àäìèíèñòðàòîð áàçû äàííûõ. Äåòàëüíîå ðàññìîòðåíèå ýòîãî ïðîöåññà âûõîäèò çà
ðàìêè äàííîé êíèãè.

Ñîçäàíèå îáðàáîò÷èêîâ äëÿ ìîíèòîðèíãà


Êàê áûëî ñêàçàíî â ãëàâå 4, â íåêîòîðûõ ñëó÷àÿõ áûâàþò íóæíû äîïîëíèòåëüíûå
äàííûå, êîòîðûå íå èêñèðóþòñÿ ñòàíäàðòíûìè ñðåäñòâàìè ìîíèòîðèíãà. Áûâàþò
òàêæå ñèòóàöèè, êîãäà íåîáõîäèìî íåìåäëåííî ïðåäïðèíèìàòü îïðåäåëåííûå äåé-
ñòâèÿ â îòâåò íà âîçíèêíîâåíèå íåêîòîðûõ ñîáûòèé. Äëÿ òîãî ÷òîáû îáåñïå÷èòü
àäåêâàòíóþ ðåàêöèþ â ïîäîáíûõ ñëó÷àÿõ, ïðèõîäèòñÿ îðìèðîâàòü ñîáñòâåííóþ ñè-
Îòñëåæèâàíèå äåéñòâèé ñ áàçîé äàííûõ CD161

ñòåìó ìîíèòîðèíãà, èñïîëüçóÿ ñòàíäàðòíûé ìåõàíèçì îáðàáîò÷èêîâ ñîáûòèé. Îñíîâ-


íîå ïðåèìóùåñòâî äàííîãî ïîäõîäà ñîñòîèò â òîì, ÷òî âû êàê ðàçðàáîò÷èê ïîëó÷àåòå
ïîëíûé êîíòðîëü íàä ïðèëîæåíèåì. Âàì íå íóæíî âìåøàòåëüñòâî àäìèíèñòðàòîðà
áàç äàííûõ, è âû ìîæåòå ñîáèðàòü ëþáûå íåîáõîäèìûå âàì ñâåäåíèÿ.
Òèïè÷íûé ïðèìåð  îòñëåæèâàíèå èçìåíåíèé â çàðïëàòå ñîòðóäíèêîâ, êîíêðåòíî
â ñòîðîíó óâåëè÷åíèÿ. Åñëè íåäîáðîñîâåñòíûé ñëóæàùèé ñìîæåò îáîéòè çàùèòó,
èçìåíåíèÿ áóäóò çàèêñèðîâàíû è ñîõðàíåíû â îòäåëüíîé òàáëèöå. Àäìèíèñòðàòîð
ñìîæåò ïðîñìîòðåòü ñîäåðæèìîå òàáëèöû è âûÿâèòü ïðîáëåìó. Ó÷èòûâàÿ òîò àêò,
÷òî â áàçå äàííûõ åñòü òàáëèöà Employee, à â íåé  ñòîëáåö Salary, ñòðóêòóðà êîäà
îáðàáîò÷èêà ñòàíîâèòñÿ î÷åâèäíîé.

1. Äëÿ ïðîâåðêè êîäà ñîçäàéòå òàáëèöó Employee, ñîäåðæàùóþ êàê ìèíèìóì ñòîëá-
öû EmployeeID è Salary. Âêëþ÷èòå â òàáëèöó íåñêîëüêî çàïèñåé.
2. Ñîçäàéòå âòîðóþ òàáëèöó äëÿ õðàíåíèÿ ðåçóëüòàòîâ ìîíèòîðèíãà. Íàçîâèòå
åå Salary_Audit è ïðåäóñìîòðèòå â íåé ñòîëáöû EmployeeID, OldSalary,
NewSalary, User è ChangeDate.
CREATE TABLE Salary_Audit
( EmployeeID NUMBER,
OldSalary NUMBER(9,2),
NewSalary NUMBER(9,2),
Username VARCHAR2(50),
DateChanged Date,
onstraint pk_Salary_Audit
PRIMARY KEY(EmployeeID, DateChanged)
);
3. Ñ ïîìîùüþ SQL*Plus ñîçäàéòå íîâûé îáðàáîò÷èê.
CREATE OR REPLACE TRIGGER Audit_Salaries
AFTER UPDATE ON Redwood.Employee
FOR EACH ROW
BEGIN
IF (:NEW.Salary > :OLD.Salary*1.20) THEN
INSERT INTO Redwood.Salary_Audit (EmployeeID, OldSalary,
NewSalary, Username, DateChanged)
VALUES (:NEW.EmployeeID, :OLD.Salary,
:NEW.Salary, User, sysdate);
END IF;
END;
/
4. Òåïåðü èçìåíèòå îäíó èç çàðïëàò áîëåå ÷åì íà 20 ïðîöåíòîâ.
UPDATE Employee
SET Salary=Salary*2
WHERE EmployeeID=1;
Commit;
5. Ïðîâåðüòå òàáëèöó Salary_Audit è óáåäèòåñü â òîì, ÷òî èçìåíåíèÿ çàèêñèðî-
âàíû.
CD162 ëàâà 12. Îáåñïå÷åíèå çàùèòû áàçû äàííûõ

èñ. 12.10. Ñâåäåíèÿ îá èçìåíåíèÿõ

set linesize 150


COLUMN Username FORMAT A20
SELECT * FROM Salary_Audit;

Íà ðèñ. 12.10 ïîêàçàíû ñâåäåíèÿ îá èçìåíåíèÿõ, çàèêñèðîâàííûå â òàáëèöå. Åñ-


ëè âû íå ïîëó÷èòå àíàëîãè÷íûå ðåçóëüòàòû, òùàòåëüíî ïðîâåðüòå êîä îáðàáîò÷èêà.
Ïîìíèòå, ÷òî íà êîä îáðàáîò÷èêà íå äåéñòâóåò óòèëèòà wrap. Îäíàêî çàùèòèòü êîä
íåîáõîäèìî. åøåíèå çàêëþ÷àåòñÿ â òîì, ÷òîáû âûíåñòè âñå ðåàëüíûå äåéñòâèÿ â îò-
äåëüíóþ ïðîöåäóðó è ïðåîáðàçîâàòü åå ñ ïîìîùüþ òîé æå óòèëèòû wrap. Òåïåðü
â òåëå îáðàáîò÷èêà äîëæíà îñòàòüñÿ îäíà ñòðîêà  âûçîâ íîâîé ïðîöåäóðû.
Ïîìíèòå òàêæå, ÷òî âàì íàäî êîððåêòíî óñòàíîâèòü ïðàâà äîñòóïà ê òàáëèöàì
Employee è Salary_Audit. Æåëàòåëüíî ïðåäîñòàâèòü ïîëüçîâàòåëÿì ïðàâà Exe ute
äëÿ ïðîöåäóðû è ïðèíÿòü ìåðû, ÷òîáû îíè íå ìîãëè íàïðÿìóþ îáðàùàòüñÿ ê òàáëèöå.

Äåòàëüíûé ìîíèòîðèíã
Äåòàëüíûé ìîíèòîðèíã (Fine-Grained Auditing  FGA) äàåò ðåçóëüòàòû, àíàëîãè÷íûå
òåì, êîòîðûå ìîæíî ïîëó÷èòü ïóòåì íàïèñàíèÿ êîäà îáðàáîò÷èêîâ, íî òðåáóåò ìåíüøå
óñèëèé è ïðåäîñòàâëÿåò âîçìîæíîñòü äîïîëíèòåëüíîãî êîíòðîëÿ. åçóëüòàòû ìîíè-
òîðèíãà ìîæíî èçâëå÷ü èç ïðåäñòàâëåíèÿ DBA_FGA_AUDIT_TRAIL. Äëÿ íàñòðîéêè ïî-
ëèòèê FGA è ïðîñìîòðà ðåçóëüòàòîâ íåîáõîäèìî èìåòü ïîëíîìî÷èÿ àäìèíèñòðàòîðà
áàçû äàííûõ. Áîëüøèíñòâî îïåðàöèé ïîääåðæèâàåòñÿ ñ ïîìîùüþ ïàêåòà DBMS_FGA.
Íàïðèìåð, âû ìîæåòå ñîçäàòü ïîëèòèêó äëÿ îòñëåæèâàíèÿ ÷àñòî èñïîëüçóåìûõ SQL-
êîìàíä, ïðè âûïîëíåíèè êîòîðûõ ïðîèñõîäèò îáðàùåíèå ê òàáëèöå Employee. Âû
åçþìå CD163

äàæå ìîæåòå óêàçàòü â ïîëèòèêå, ÷òî ðåãèñòðèðîâàòü íàäî òîëüêî äåéñòâèÿ ïîëüçîâà-
òåëåé, íå ðàáîòàþùèõ â çàäàííîì âàìè îòäåëå.
DBMS_FGA.ADD_POLICY(
Obje t_s hema => 'HRM',
Obje t_name => 'Employee'
Poli y_name => 'Monitor_Employee_Table',
Audit_ ondition => 'Department <> "HRM"',
Audit_ olumn => 'Salary',
Statement_types => 'sele t, insert, update, delete');
Ìîæíî òàêæå ñîçäàòü ñïåöèàëüíóþ óíêöèþ îáðàáîòêè ñîáûòèÿ, êîòîðàÿ áóäåò
âûçûâàòüñÿ òîëüêî òîãäà, êîãäà ìîíèòîðèíã ðàçðåøåí. Ôóíêöèÿ UTIL_ALERT_PAGER
èñïîëüçóåòñÿ äëÿ ïåðåäà÷è àäìèíèñòðàòîðó ñòðàíèöû, ñîäåðæàùåé èíîðìàöèþ
î êðèòè÷åñêè âàæíûõ ñîáûòèÿõ.

. åçþìå
Ïîñêîëüêó ñèñòåìû, îñíîâàííûå íà áàçàõ äàííûõ, øèðîêî ðàñïðîñòðàíåíû è èñïîëü-
çóþòñÿ äëÿ ðåøåíèÿ âàæíûõ çàäà÷, ïåðâîñòåïåííîå çíà÷åíèå ïðèíèìàþò ñðåäñòâà
îáåñïå÷åíèÿ çàùèòû. Ñîçäàíèå çàùèùåííûõ áàç äàííûõ è ïðèëîæåíèé òðåáóåò êîîð-
äèíàöèè óñèëèé ðàçðàáîò÷èêîâ, àäìèíèñòðàòîðîâ áàç äàííûõ, àäìèíèñòðàòîðîâ, îò-
âåòñòâåííûõ çà áåçîïàñíîñòü è êîíå÷íûõ ïîëüçîâàòåëåé. Êîðïîðàòèâíûå áàçû è ïðè-
ëîæåíèÿ ðàçìåùàþòñÿ íà íåñêîëüêèõ ñåðâåðàõ, ïîýòîìó îáåñïå÷åíèå èõ áåçîïàñíîñòè
è îðãàíèçàöèÿ ìîíèòîðèíãà âûçûâàþò äîïîëíèòåëüíûå òðóäíîñòè.
Îäíà èç îñíîâíûõ çàäà÷, ñâÿçàííûõ ñ çàùèòîé,  ýòî èäåíòèèêàöèÿ ïîëüçîâàòå-
ëåé. Â íàñòîÿùåå âðåìÿ áîëüøèíñòâî ñèñòåì àóòåíòèèêàöèè áàçèðóåòñÿ íà ïàðîëÿõ.
Îäíàêî äàæå ïðè èñïîëüçîâàíèè ïåðåäîâûõ òåõíîëîãèé (íàïðèìåð, àóòåíòèèêàöèè
íà îñíîâå áèîìåòðè÷åñêèõ äàííûõ) æåëàòåëüíî ñâåñòè ê ìèíèìóìó ÷èñëî ïðîöå-
äóð ðåãèñòðàöèè, ïðîõîäèìûõ îäíèì ïîëüçîâàòåëåì. Ora le ïîääåðæèâàåò åäèíñòâåí-
íóþ ðåãèñòðàöèþ. Ýòà âîçìîæíîñòü îáåñïå÷èâàåòñÿ äàæå â êîðïîðàòèâíîé ñðåäå.
Ñ èäåíòèèöèðîâàííûì ïîëüçîâàòåëåì ìîæíî ñâÿçàòü íåñêîëüêî ðîëåé. îëè è íà-
áîðû ïîëíîìî÷èé ïðèìåíÿþòñÿ ê ãðóïïàì ïîëüçîâàòåëåé. îðàçäî óäîáíåå íàçíà÷èòü
ïîëíîìî÷èÿ ðîëè, à çàòåì ñâÿçàòü ðîëü ñ ïîëüçîâàòåëåì, ÷åì íàçíà÷àòü è èçìåíÿòü
ïðàâà êàæäîìó èç òûñÿ÷ ïîëüçîâàòåëåé èíäèâèäóàëüíî.
Åñòü âîçìîæíîñòü çàäàâàòü ïðàâà äëÿ äîñòóïà ê ñèñòåìíûì ñëóæáàì è îòäåëü-
íûì îáúåêòàì. Åñëè âàì íóæåí ïîäðîáíûé êîíòðîëü íàä ïîëíîìî÷èÿìè, âû ìîæåòå
èñïîëüçîâàòü õðàíèìûå ïðåäñòàâëåíèÿ è ïðîöåäóðû. Ïîëüçîâàòåëþ ïðåäîñòàâëÿåò-
ñÿ ïðàâî ðàáîòàòü ñ ýòèìè ïðåäñòàâëåíèÿìè è ïðîöåäóðàìè è çàïðåùàåòñÿ íåïî-
ñðåäñòâåííî îáðàùàòüñÿ ê òàáëèöàì, ñîäåðæàùèì èíîðìàöèþ. Îãðàíè÷èòü äîñòóï
ê ýëåìåíòàì îðìû ìîæíî, óñòàíàâëèâàÿ ñâîéñòâî Visible òàê, ÷òîáû ýëåìåíò îòîá-
ðàæàëñÿ òîëüêî â òîì ñëó÷àå, åñëè ñ íèì ðàáîòàåò ïîëüçîâàòåëü, ïðèíàäëåæàùèé
îïðåäåëåííîé ðîëè.
CD164 ëàâà 12. Îáåñïå÷åíèå çàùèòû áàçû äàííûõ

Øèðîâàíèå çàùèùàåò ïðè ïåðåäà÷å êðèòè÷åñêè âàæíûå äàííûå, íàïðèìåð, íîìå-


ðà ïëàòåæíûõ êàðò èëè èäåíòèèêàöèîííûå íîìåðà ãðàæäàí. Ñðåäñòâà îáåñïå÷åíèÿ
áåçîïàñíîñòè â ñèñòåìå Web ðàáîòàþò íåçàâèñèìî îò Ora le. Îíè ïðåäïîëàãàþò óñòà-
íîâêó öèðîâîãî ñåðòèèêàòà íà ñåðâåðå è àâòîìàòè÷åñêîå øèðîâàíèå ïðè ïåðåäà÷å
ñðåäñòâàìè SSL. Åñëè âàì íàäî çàøèðîâàòü îòäåëüíûå ðàãìåíòû äàííûõ, òî ñëåäó-
åò íàïèñàòü ñîáñòâåííóþ ïðîöåäóðó êîäèðîâàíèÿ. Íàäî òàêæå òùàòåëüíî ïðîäóìàòü
ðàçìåùåíèå êëþ÷à. Ïóòåì øèðîâàíèÿ ìîæíî çàùèòèòü äàííûå äàæå â òîì ñëó÷àå,
åñëè âñÿ áàçà áóäåò ïîõèùåíà çëîóìûøëåííèêîì.
Ìîíèòîðèíã äåéñòâèé ïîëüçîâàòåëåé  îäèí èç ñàìûõ äåéñòâåííûõ ñïîñîáîâ
âûÿâëåíèÿ ïðîáëåì. Âû ìîæåòå ðåãèñòðèðîâàòü ñâåäåíèÿ îá îáû÷íûõ òðàíçàêöèÿõ,
òðàíçàêöèÿõ, ïðåâûøàþùèõ íåêîòîðûé óðîâåíü, è î òðàíçàêöèÿõ, ïðè âûïîëíåíèè êî-
òîðûõ âîçíèêàþò îøèáêè. Ìîæíî òàêæå íàïèñàòü îáðàáîò÷èêè äëÿ ïîäðîáíîãî ìîíè-
òîðèíãà. Îíè ïîçâîëÿþò âûÿâëÿòü îáðàùåíèÿ ê îòäåëüíûì ñòîëáöàì äàííûõ èëè äåé-
ñòâèÿ, ïðåäïðèíèìàåìûå ïîëüçîâàòåëÿìè, ïðèíàäëåæàùèìè îïðåäåëåííûì ãðóïïàì.
Ïðè ýòîì íåîáõîäèìî, ñ îäíîé ñòîðîíû, îáåñïå÷èòü ïîëó÷åíèå ñâåäåíèé, äîñòàòî÷-
íûõ äëÿ òîãî, ÷òîáû ðåøèòü ïðîáëåìó, à ñ äðóãîé ñòîðîíû, ïðåäîòâðàòèòü ãåíåðàöèþ
ñëèøêîì áîëüøîãî îáúåìà äàííûõ, ñïîñîáíûõ ïåðåïîëíèòü äèñêîâîå ïðîñòðàíñòâî.

Îñíîâíûå òåðìèíû
• Ìîíèòîðèíã
• Äîñòóïíîñòü
• Êîíèäåíöèàëüíîñòü
• Öèðîâîé ñåðòèèêàò
• Øèðîâàíèå
• Ïîäðîáíûé ìîíèòîðèíã
• Öåëîñòíîñòü
• ðè ñåêðåòíîñòè
• Lightweight dire tory appli ation proto ol (LDAP)
• Îáúåêòíûå ïðèâèëåãèè
• Ora le Internet Dire tory (OID)
• Èíðàñòðóêòóðà îòêðûòîãî êëþ÷à
• Se ure so kets layer (SSL)
• àçäåëåíèå îáÿçàííîñòåé
• Åäèíñòâåííàÿ ðåãèñòðàöèÿ
• Ñèñòåìíûå ïðèâèëåãèè
• îëè ïîëüçîâàòåëåé
åçþìå CD165

• Âèðòóàëüíàÿ ÷àñòíàÿ áàçà äàííûõ (virtual private database  VPD)


• WITH ADMIN

Ïîâòîðåíèå ïðîéäåííîãî ìàòåðèàëà


Èñòèíà èëè ëîæü?

1. Øèðîâàíèå äàííûõ ïðåäñòàâëÿåò ñîáîé ýåêòèâíûé ìåõàíèçì, çàìåíÿþùèé


ñðåäñòâà êîíòðîëÿ äîñòóïà.
2. Êîìàíäà GRANT ïîçâîëÿåò íàçíà÷àòü ïðàâà UPDATE äëÿ îòäåëüíûõ ñòîëáöîâ òàá-
ëèöû.
3. Çàùèòà ïðèëîæåíèé Ora le íà áàçå Web ïóòåì êîäèðîâàíèÿ ïåðåäàâàåìûõ äàííûõ
ïðåäïîëàãàåò èñïîëüçîâàíèå SSL.
4. Êîìàíäà GRANT ïîçâîëÿåò îãðàíè÷èòü äîñòóï ê ñòðîêàì íà îñíîâå èäåíòèèêàöè-
îííûõ äàííûõ ïîëüçîâàòåëåé.
5. Ñèñòåìà áóäåò áîëåå çàùèùåííîé, åñëè âû íàçíà÷èòå ïðàâà íåïîñðåäñòâåííî êîí-
êðåòíûì ïîëüçîâàòåëÿì è íå áóäåòå ïðèáåãàòü ê ïîìîùè ðîëåé.

Çàïîëíèòü ïðîïóùåííîå

1. Ó âàñ ïîÿâèëèñü îñíîâàíèÿ ïîäîçðåâàòü, ÷òî êòî-òî ÷èòàåò äàííûå î çàêàçàõ è ïðî-
äàåò èõ âàøèì êîíêóðåíòàì. Äëÿ òîãî ÷òîáû ïîäòâåðäèòü èëè îïðîâåðãíóòü ïîäî-
çðåíèÿ, íàäî èñïîëüçîâàòü _____ .
2. Íàçíà÷àÿ ïîëíîìî÷èÿ ðîëÿì, íàäî ó÷èòûâàòü ïðàâèëî ___ , ÷òîáû íåçàêîííóþ
îïåðàöèþ ìîæíî áûëî ïðîâåñòè òîëüêî ïðè óñëîâèè ñãîâîðà íåñêîëüêèõ ñîòðóä-
íèêîâ.
3. Â îðìå ìîæíî çàïðàøèâàòü ïðåäñòàâëåíèå _____ , ÷òîáû ïðîâåðÿòü, ñâÿçàíà ëè
ñ òåêóùèì ïîëüçîâàòåëåì êîíêðåòíàÿ ðîëü, è ïðèíèìàòü ðåøåíèå îá îòîáðàæåíèè
èëè ñîêðûòèè ÷àñòè îðìû.
4. Åñëè àäìèíèñòðàòîð áàçû äàííûõ ïðåäîñòàâèò âàì äîïîëíèòåëüíûå ïðèâèëåãèè,
âû ñìîæåòå èñïîëüçîâàòü ïàêåò ___ äëÿ øèðîâàíèÿ äàííûõ ñ ïîìîùüþ ñòàí-
äàðòíîãî àëãîðèòìà.
5. åäàêöèÿ Enterprise ñèñòåìû Ora le îáåñïå÷èâàåò ïîääåðæêó åäèíñòâåííîé ðåãè-
ñòðàöèè ïîñðåäñòâîì èíñòðóìåíòà _____ .

Âàðèàíòû îòâåòîâ

1. ×òî èç ïåðå÷èñëåííîãî íèæå íå ÿâëÿåòñÿ öåëüþ èñïîëüçîâàíèÿ ñèñòåìû çàùèòû.


à) Îáåñïå÷åíèå êîíèäåíöèàëüíîñòè.
á) Îáåñïå÷åíèå öåëîñòíîñòè.
â) Îáåñïå÷åíèå äîñòóïà.
CD166 ëàâà 12. Îáåñïå÷åíèå çàùèòû áàçû äàííûõ

ã) Ïîâûøåíèå ïðîèçâîäèòåëüíîñòè.
ä) Âñå ïåðå÷èñëåííîå âûøå îòðàæàåò íàçíà÷åíèå ñèñòåìû çàùèòû.
2. Âû õîòèòå ïðåäîñòàâèòü ïîëüçîâàòåëÿì âîçìîæíîñòü îáðàùàòüñÿ ê òàáëèöå Em-
ployee è ïðîñìàòðèâàòü èìåíà è íîìåðà òåëåîíîâ äðóãèõ ñîòðóäíèêîâ, íî õîòè-
òå, ÷òîáû îñòàëüíûå äàííûå, ñîäåðæàùèåñÿ â òàáëèöå, îñòàâàëèñü íåäîñòóïíûìè.
Âàì òàêæå íóæíî ñäåëàòü íåêîòîðûå èìåíà íåäîñòóïíûìè. Íàèëó÷øèì ñïîñîáîì
ðåøèòü äàííóþ çàäà÷ó ÿâëÿåòñÿ:
à) Ñîçäàíèå ïðåäñòàâëåíèÿ è ïðèñâîåíèå ïîëüçîâàòåëþ ïðàâà SELECT ïî îòíîøå-
íèþ ê íåìó.
á) Íàïèñàíèå ïðîöåäóðû îáíîâëåíèÿ, êîòîðàÿ âêëþ÷àëà áû èäåíòèèêàöèîííûå
äàííûå ïîëüçîâàòåëÿ.
â) Ñîçäàíèå âèðòóàëüíîé ÷àñòíîé áàçû äàííûõ äëÿ îãðàíè÷åíèÿ èíîðìàöèè,
äîñòóïíîé ïîëüçîâàòåëþ òîëüêî ñòðîêàìè, ñîîòâåòñòâóþùèìè åãî îòäåëó.
ã) Øèðîâàíèå äàííûõ î ïðîäàæàõ.
ä) Ìîíèòîðèíã îáðàùåíèÿ ê òàáëèöå è îòêëþ÷åíèå òåõ ïîëüçîâàòåëåé, êòî îáðà-
ùàåòñÿ ê äàííûì î ïðîäàæàõ.
3. Âû õîòèòå çàùèòèòü îò÷åò òàê, ÷òîáû åãî âèäåëè òîëüêî ìåíåäæåðû. Íàèëó÷øèì
ðåøåíèåì ÿâëÿåòñÿ:
à) Ñîçäàíèå âèðòóàëüíîé ÷àñòíîé áàçû äàííûõ, êîòîðàÿ ïîçâîëÿëà áû ïîëüçîâà-
òåëÿì ïðîñìàòðèâàòü òîëüêî äàííûå, ñîçäàííûå èìè.
á) Ñîõðàíåíèå ïðåäñòàâëåíèÿ ñ íåîáõîäèìûìè äàííûìè, îãðàíè÷åíèå äîñòóïà
ê ïðåäñòàâëåíèþ è îðìèðîâàíèå îò÷åòà íà åãî áàçå.
â) Øèðîâàíèå âñåõ äàííûõ, èñïîëüçóåìûõ â îò÷åòå.
ã) Ìîíèòîðèíã èñïîëüçîâàíèÿ îò÷åòà; ïðè êàæäîì åãî âûïîëíåíèè àäìèíèñòðàòîð
äîëæåí ïîëó÷àòü ñòðàíèöó, ñîäåðæàùóþ èìÿ ïîëüçîâàòåëÿ.
ä) Èñïîëüçîâàíèå óòèëèòû wrap äëÿ ñîêðûòèÿ êîäà, îðìèðóþùåãî îò÷åò.
4. Äëÿ òîãî ÷òîáû ïðåäîòâðàòèòü èçìåíåíèå äàííûõ î çàêàçàõ ñîðìèðîâàííûõ äðó-
ãèìè ñîòðóäíèêàìè, íàäî ñäåëàòü ñëåäóþùåå:
à) Èñïîëüçîâàòü Ora le Internet Dire tory è ðåàëèçîâàòü ìåõàíèçì åäèíñòâåííîé
ðåãèñòðàöèè.
á) Èñïîëüçîâàòü ñðåäñòâà SSL äëÿ áåçîïàñíîé ïåðåäà÷è îáíîâëÿåìûõ äàííûõ.
â) Ñîçäàòü ïðîöåäóðó, ïîääåðæèâàþùóþ îáíîâëåíèÿ è àâòîìàòè÷åñêè âêëþ÷à-
þùóþ UserID; ïðîöåäóðà, âîçìîæíî, áóäåò ñîðìèðîâàíà ñ èñïîëüçîâàíèåì
ñðåäñòâ VPD.
ã) Çàøèðîâàòü âñå äàííûå â òàáëèöå Order.
ä) Ñîçäàòü ðîëü, êîòîðàÿ ïîçâîëèò îáíîâëÿòü äàííûå â òàáëèöå Order ëèøü îò-
äåëüíûì ïîëüçîâàòåëÿì.
åçþìå CD167

5. Äëÿ òîãî ÷òîáû ñðåäñòâàìè çàùèòû ñèñòåìû îáåñïå÷èòü ðàçäåëåíèå îáÿçàííîñòåé,


íàäî:
à) Ñîçäàòü ðàçëè÷íûå ðîëè äëÿ âûïîëíåíèÿ êàæäîãî ýòàïà è íå ñâÿçûâàòü âñå
ðîëè ñ îäíèì ñîòðóäíèêîì.
á) Çàøèðîâàòü âñå äàííûå â áàçå.
â) Ñîçäàòü ïðîöåäóðó, êîòîðàÿ ïðîâåðÿëà áû, êòî èç ïîëüçîâàòåëåé âûïîëíÿåò
ïîñëåäíèé ýòàï ïðîöåññà, è îòìåíÿëà áû ðåçóëüòàòû, åñëè ýòî äåëàåò òîò æå
ñîòðóäíèê, êîòîðûé ðàáîòàë íàä ïåðâûì ýòàïîì.
ã) Ñîçäàòü îáðàáîò÷èê äëÿ ïîäðîáíîãî ìîíèòîðèíãà, êîòîðûé îïîâåùàë áû àä-
ìèíèñòðàòîðà î òîì, ÷òî îäèí ïîëüçîâàòåëü ïûòàåòñÿ âûïîëíèòü äâà ýòàïà
ïðîöåññà.
ä) Ïðåäîñòàâèòü ñîîòâåòñòâóþùèå ñèñòåìíûå ïðèâèëåãèè òîëüêî îäíîìó ñîòðóä-
íèêó.

Óïðàæíåíèÿ
1. Readwood Realty

Âàì íåîáõîäèìî äîïîëíèòåëüíî ïîðàáîòàòü íàä êîíèãóðàöèåé ñðåäñòâ çàùèòû Red-


wood Realty. Áîëüøàÿ ÷àñòü ðàáîòû, çàòðàãèâàþùåé îñíîâíûå îò÷åòû, ïðåäñòàâëåíèÿ
è òàáëèöû, âûïîëíåíà â ðàìêàõ ïðèìåðîâ, ðàññìîòðåííûõ â äàííîé ãëàâå. Ïî êðàé-
íåé ìåðå, àãåíòû è ìåíåäæåðû èìåþò âîçìîæíîñòü èñïîëüçîâàòü îðìû. Íåîáõîäèìî
ðåøèòü, ñëåäóåò ëè óñèëèòü çàùèòó íåêîòîðûõ ýëåìåíòîâ; ïðè ýòîì ñëåäóåò ïîìíèòü,
÷òî ðàçìåðû êîìïàíèè íåâåëèêè, ìåíåäæåðû äîâåðÿþò àãåíòàì è áàçà äàííûõ íå
ñîäåðæèò êðèòè÷åñêè âàæíîé èíîðìàöèè.

1. Îöåíèòå óæå ïðèíÿòûå ìåðû çàùèòû, ïðèâåäåííûå â òàáë. 12.3, è ñïëàíèðóéòå èç-
ìåíåíèÿ. Íàïèøèòå íåáîëüøîé äîêóìåíò, îáúÿñíÿþùèé ïðåäëàãàåìûå èçìåíåíèÿ
è ïîòåíöèàëüíûå âûãîäû è ïîòåðè.
2. Âàì íåîáõîäèìî ñêîððåêòèðîâàòü îò÷åòû òàê, ÷òîáû îíè èçâëåêàëè äàííûå èç
ïðåäñòàâëåíèé, è íàçíà÷èòü ïðàâà íà èñïîëüçîâàíèå ýòèõ ïðåäñòàâëåíèé. Äàæå
åñëè îò÷åò äîñòóïåí àãåíòó, âñå ðàâíî åãî íàäî ñîçäàòü íà áàçå ïðåäñòàâëåíèÿ íà
ñëó÷àé, åñëè ìåíåäæåðû çàõîòÿò îãðàíè÷èòü äîñòóï â áóäóùåì. Îòðåäàêòèðóéòå
çàïðîñû äëÿ îò÷åòîâ AgentSales, CustomerList, ListingsAndOffers è Sales-
ByCityAndAgent. Ñîçäàéòå è ñîõðàíèòå ïðåäñòàâëåíèÿ äëÿ êàæäîãî çàïðîñà. Åñ-
ëè äëÿ îò÷åòîâ ïðåäóñìîòðåíû ïîëüçîâàòåëüñêèå ïàðàìåòðû, óáåäèòåñü, ÷òî â íèõ
óêàçàíî èìÿ ñõåìû. Íàçíà÷üòå ïðàâà äîñòóïà ê îò÷åòàì, îñíîâûâàÿñü íà äàííûõ
èç òàáë. 12.3, è ïðîòåñòèðóéòå îò÷åòû. Çàìåòüòå, ÷òî âàì íàäî ñêîððåêòèðîâàòü
ïðåäñòàâëåíèÿ è óáåäèòüñÿ, ÷òî èìåíà ñòîëáöîâ íå äóáëèðóþòñÿ. Çàòåì ñëåäóåò
ìîäèèöèðîâàòü çàïðîñ â ñîñòàâå îò÷åòà òàê, ÷òîáû îí âêëþ÷àë ïîëüçîâàòåëüñêèå
CD168 ëàâà 12. Îáåñïå÷åíèå çàùèòû áàçû äàííûõ

ïàðàìåòðû. Íàïðèìåð, çàïðîñ äëÿ AgentSales äîëæåí èìåòü ñëåäóþùèé âèä:


SELECT ALL AGENTID, LASTNAME, FIRSTNAME,
WORKPHONE, LISTINGID, BEGINLISTDATE,
ASKINGPRICE, SALESTATUS, CITY, BEDROOMS
FROM Redwood.AgentSales
WHERE (('All' = :LISTING_MONTH) OR
(TO_CHAR(BEGINLISTDATE,'MM') =
:LISTING_MONTH))
AND (TO_CHAR(BEGINLISTDATE,'YYYY') =
:LISTING_YEAR)
3. Çàìåòüòå, ÷òî èñõîäÿ èç äàííûõ, ñîäåðæàùèõñÿ â òàáë. 12.3, àãåíòû äîëæíû ïîëó-
÷àòü îò÷åòû, îòðàæàþùèå ñâåäåíèÿ î ïðîäàæàõ, âûïîëíåííûõ èìè. Äëÿ òîãî ÷òîáû
îáåñïå÷èòü òàêîé óðîâåíü çàùèòû, ñêîïèðóéòå îò÷åò AgentSales â AgentSelf-
Sales; ïîäîáíûì æå îáðàçîì ñêîïèðóéòå ïðåäñòàâëåíèÿ. Îòðåäàêòèðóéòå çàïðîñ
îò÷åòà òàê, ÷òîáû îí ññûëàëñÿ íà íåîáõîäèìîå ïðåäñòàâëåíèå. Çàìåíèòå ïðåäñòàâ-
ëåíèå òåì, êîòîðîå èçâëåêàåò äàííûå òîëüêî äëÿ òåêóùåãî ïîëüçîâàòåëÿ.
Create or Repla e View AgentSelfSales AS
SELECT ALL Redwood.AGENTS.AGENTID, Redwood.AGENTS.LASTNAME,
Redwood.AGENTS.FIRSTNAME, Redwood.AGENTS.WORKPHONE,
Redwood.LISTINGS.LISTINGID, Redwood.LISTINGS.BEGINLISTDATE,
Redwood.LISTINGS.ASKINGPRICE, Redwood.SALESTATUS.SALESTATUS,
Redwood.PROPERTIES.CITY, Redwood.PROPERTIES.BEDROOMS
FROM Redwood.AGENTS, Redwood.LISTINGS,
Redwood.PROPERTIES, Redwood.SALESTATUS
WHERE Redwood.SALESTATUS.SALESTATUS = 'For Sale'
AND ((Redwood.LISTINGS.LISTINGAGENTID =
Redwood.AGENTS.AGENTID)
AND (Redwood.LISTINGS.PROPERTYID =
Redwood.PROPERTIES.PROPERTYID)
AND (Redwood.LISTINGS.SALESTATUSID =
Redwood.SALESTATUS.SALESTATUSID))
AND (UPPER(Redwood.Agents.Username) = User)
ORDER BY Redwood.LISTINGS.ASKINGPRICE DESC ;
4. Ñîçäàéòå ïðåäñòàâëåíèå äëÿ îò÷åòà CustomerList è èçìåíèòå îò÷åò òàê, ÷òîáû
îí èñïîëüçîâàë ýòî ïðåäñòàâëåíèå. Êàê àãåíòû, òàê è ìåíåäæåðû äîëæíû èìåòü
âîçìîæíîñòü âûâîäèòü äàííûé îò÷åò íà ïå÷àòü. Ñäåëàéòå òî æå ñàìîå äëÿ äâóõ
çàïðîñîâ â îò÷åòå ListingsAndOffers. Åñëè âû ðàñïîëàãàåòå âðåìåíåì, âûïîë-
íèòå àíàëîãè÷íûå äåéñòâèÿ äëÿ îò÷åòà SalesByCityAndAgent, íî çàìåòüòå, ÷òî
âàì íàäî ñêîððåêòèðîâàòü ïðåäñòàâëåíèå è óñòðàíèòü äóáëèðîâàíèå ñòîëáöîâ.
Âíåñèòå íåîáõîäèìûå èçìåíåíèÿ è óáåäèòåñü, ÷òî èçâëåêàþòñÿ òîëüêî äàííûå,
íåîáõîäèìûå äëÿ îò÷åòà.
5. Íàéäèòå ñïèñîê ïîñëåäîâàòåëüíîñòåé äëÿ Redwood è íàçíà÷üòå èì ïðèâèëåãèè
SELECT äëÿ ðîëåé Agent è Manager. ×òîáû ïîëó÷èòü ñïèñîê, èñïîëüçóéòå âûðà-
æåíèå
SELECT sequen e_name FROM user_sequen es;
åçþìå CD169

6. Äîáàâüòå â èñõîäíóþ îðìó êíîïêó, ñ ïîìîùüþ êîòîðîé àãåíòû ñìîãëè áû îò-


êðûâàòü îò÷åò AgentSelfSales. Çàïóñòèòå èñõîäíóþ îðìó è çàðåãèñòðèðóéòåñü
îò èìåíè ïîëüçîâàòåëÿ Mar ouxK. Ïðîâåðüòå îò÷åò AgentSelfSales. Âûâåäèòå
èíîðìàöèþ, îòîáðàæàåìóþ íà ýêðàíå, íà ïðèíòåð è ïðåäúÿâèòå ïðåïîäàâàòåëþ.

2. Coffee Mer hant

×òîáû ñêîíèãóðèðîâàòü ñðåäñòâà çàùèòû äëÿ ñèñòåìû Coffee Mer hant, íàäî ñíà÷à-
ëà èäåíòèèöèðîâàòü îñíîâíûå îáúåêòû è ïîëüçîâàòåëüñêèå ðîëè. Ïîñêîëüêó êîì-
ïàíèÿ íåáîëüøàÿ, â íåé äëÿ ñîòðóäíèêîâ èñïîëüçóåòñÿ îäíà ðîëü. Îäíàêî èìååò
ñìûñë ñîçäàòü òàêæå ðîëü àäìèíèñòðàòîðà. Îíà áóäåò èñïîëüçîâàòüñÿ äëÿ ìîäèèêà-
öèè íåêîòîðûõ òàáëèö, êîòîðûå ðåäêî èçìåíÿþòñÿ, à èìåííî Countries, Employees
è Inventory.

1. Ñîçäàéòå íîâóþ ïàïêó. Ñêîïèðóéòå â íåå îðìû è îò÷åòû, ñîçäàííûå âàìè


â ïðåäûäóùèõ ãëàâàõ. Îòêðîéòå èñõîäíóþ îðìó è çàìåíèòå Appli ationPath
â îáðàáîò÷èêå èñõîäíîé îðìû.
2. Ñîçäàéòå äâå ðîëè: Clerk è CoffeeAdmin. Äëÿ ïðîâåðêè âû ìîæåòå ñîçäàòü òåõ
æå ïîëüçîâàòåëåé, ÷òî è â ñèñòåìå Redwood. Ñâÿæèòå ðîëü Clerk ñ Mar ouxK
è ðîëü CoffeeAdmin ñ CarlingT.
3. Ïðåäîñòàâüòå ðîëÿì ïîëíîìî÷èÿ, îáåñïå÷èâàþùèå äîñòóï ê òàáëèöàì. îëü Cof-
feeAdmin èìååò ñòàíäàðòíûé äîñòóï êî âñåì òàáëèöàì (SELECT, INSERT, UPDATE
è DELETE). îëü Clerk èìååò äîñòóï SELECT êî âñåì òàáëèöàì, çà èñêëþ÷å-
íèåì Employee. Ñîîòâåòñòâóþùèå ïîëüçîâàòåëè èìåþò ïðàâà INSERT, UPDATE
è DELETE ïî îòíîøåíèþ ê òàáëèöàì Orders è OrderLines.
4. Ñîòðóäíèêàì, ñîîòâåòñòâóþùèì ðîëè Clerk, íåîáõîäèìî èçâëåêàòü èç òàáëèöû
Employees äàííûå EmployeeID, FirstName è LastName äëÿ îðìû Orders.
Ñîçäàéòå ïðåäñòàâëåíèå è äàéòå ðîëè Clerk âîçìîæíîñòü äîñòóïà òîëüêî ê óêà-
çàííûì âûøå òðåì ñòîëáöàì. Èçìåíèòå ñïèñîê çíà÷åíèé â îðìå Orders äëÿ
ðàáîòû ñ ýòèì ïðåäñòàâëåíèåì.
5. Íå çàáûâàéòå, ÷òî âî âñåõ çàïðîñàõ îðìû íåîáõîäèìî óêàçàòü èìÿ ñõåìû èëè
ñîçäàòü ñèíîíèì äëÿ âñåõ îðì, ïðåäñòàâëåíèé èëè ïîñëåäîâàòåëüíîñòåé. Âàì
òàêæå íàäî íàçíà÷èòü îáåèì ðîëÿì ïðàâî äîñòóïà Sele t ê ïîñëåäîâàòåëüíîñòè
seq_Orders.
6.  îò÷åòå QuarterlySalesByState ïðåîáðàçóéòå çàïðîñ äëÿ ðàáîòû ñ ïðåäñòàâ-
ëåíèåì. Íà äàííûé ìîìåíò ïðàâà äëÿ ðàáîòû ñ ïðåäñòàâëåíèåì íàäî íàçíà÷èòü
îáåèì ðîëÿì: Clerk è Administrator.
7. Çàïóñòèòå èñõîäíóþ îðìó. Ïðîâåðüòå ðàáîòó êíîïîê è ïîâåäåíèå äðóãèõ îðì.
Ïðîòåñòèðóéòå îò÷åòû. Âûâåäèòå íà ïðèíòåð èíîðìàöèþ, îòîáðàæàåìóþ íà
ýêðàíå, è ïðåäúÿâèòå ïðåïîäàâàòåëþ.
CD170 ëàâà 12. Îáåñïå÷åíèå çàùèòû áàçû äàííûõ

3. Rowing Ventures

 ïðèëîæåíèè Rowing Ventures ñðåäñòâà çàùèòû îòíîñèòåëüíî ñëàáû, ïîñêîëüêó äàí-


íûå íå ÿâëÿþòñÿ êðèòè÷åñêè âàæíûìè è èíàíñîâàÿ èíîðìàöèÿ îòñóòñòâóåò. Íåëüçÿ
ëèøü äîïóñòèòü èçìåíåíèÿ ðåçóëüòàòîâ ãîíêè, íî â äåíü ñîðåâíîâàíèé ïðîâîäèòñÿ
òàê ìíîãî ïðîâåðîê, ÷òî âíåñòè èçìåíåíèÿ íåçàìåòíî ïðàêòè÷åñêè íåâîçìîæíî. å-
çóëüòàòû ñíà÷àëà èêñèðóþòñÿ ñóäüÿìè íà áóìàãå, ïîýòîìó â ñëó÷àå âîçíèêíîâåíèÿ
ñïîðíûõ âîïðîñîâ âñåãäà ìîæíî îáðàòèòüñÿ ê ýòèì äîêóìåíòàì. Âîçìîæíî, êîìó-
íèáóäü è óäàñòñÿ ñïóñòÿ ìåñÿö èçìåíèòü ýëåêòðîííóþ êîïèþ ðåçóëüòàòîâ, íî îò ýòîãî
âðÿä ëè âîçìîæíî ïîëó÷èòü âûãîäó. Ïîýòîìó äîñòàòî÷íî ñîçäàòü îäíó ðîëü è íàçíà-
÷èòü ïîëíîìî÷èÿ òàê, ÷òîáû ïîëüçîâàòåëè, ïðèíàäëåæàùèå ýòîé ðîëè, ìîãëè ðàáîòàòü
ñ òàáëèöàìè è ïðåäñòàâëåíèÿìè. Ïîñêîëüêó ÷èñëî òàáëèö è ïðåäñòàâëåíèé îòíîñè-
òåëüíî ìàëî, èìååò ñìûñë ñîçäàòü äëÿ íèõ îáùåäîñòóïíûå ñèíîíèìû. Åñëè âû èìååòå
ñîîòâåòñòâóþùèå ïðàâà, òî ìîæåòå ïîñòóïèòü ñëåäóþùèì îáðàçîì:
Create publi synonym Ra eTimes for <ñõåìà>.Ra eTimes;
Åñëè ó âàñ íåò íåîáõîäèìûõ ïðèâèëåãèé, âàì ïðèäåòñÿ ìîäèèöèðîâàòü çàïðîñû
â îðìàõ è îò÷åòàõ. Ìîæíî íàçíà÷èòü íîâóþ ðîëü Ra eClerk ïîëüçîâàòåëþ Mar-
ouxK, çàðåãèñòðèðîâàòüñÿ îò åãî èìåíè è âûïîëíèòü íåîáõîäèìûå ïðîâåðêè. Íå
çàáóäüòå ñêîððåêòèðîâàòü Appli ationPath. Òàêæå íàäî ïðîâåðèòü ïîñëåäîâàòåëü-
íîñòè è íàçíà÷èòü ñîîòâåòñòâóþùèå ïîëíîìî÷èÿ.
Åñëè âàñ áåñïîêîèò âîçìîæíîñòü èçìåíåíèÿ ñâåäåíèé î ðåçóëüòàòàõ ãîíêè ÷åðåç
äëèòåëüíîå âðåìÿ ïîñëå åå îêîí÷àíèÿ, òî ñëåäóåò ðåàëèçîâàòü ìîíèòîðèíã äåéñòâèé
ñ òàáëèöåé Ra eTimes. Åñëè ìîíèòîðèíã îòêëþ÷åí, âû ìîæåòå íàïèñàòü íåáîëüøîé
îáðàáîò÷èê, âûÿâëÿþùèé àêò âíåñåíèÿ èçìåíåíèé â òàáëèöó.

4. Broad loth Clothing

 ïðèëîæåíèè Broad loth èñïîëüçóåòñÿ íåñêîëüêî òàáëèö, ïðåäñòàâëåíèé è ïîñëå-


äîâàòåëüíîñòåé.  äàííîì ñëó÷àå âàì òàêæå íàäî ëèáî íàçíà÷èòü îáùåäîñòóïíûå
ñèíîíèìû, ëèáî èçìåíèòü îðìû è îò÷åòû è âêëþ÷èòü èìÿ ñõåìû. Ïîñêîëüêó ïðèëî-
æåíèå äîñòàòî÷íî ñëîæíîå, äëÿ ñîçäàíèÿ ðîëåé è íàçíà÷åíèÿ ïîëíîìî÷èé ïîòðåáóåòñÿ
çíà÷èòåëüíîå âðåìÿ. Âìåñòî òîãî ÷òîáû ïûòàòüñÿ ñîçäàòü âñå ðîëè, îãðàíè÷üòåñü ñî-
ñòàâëåíèåì ïëàíà. Ñîçäàéòå òàáëèöó, â êîòîðîé áóäóò ñîäåðæàòüñÿ âñå ïðåäëàãàåìûå
ðîëè è ïðàâà, êîòîðûå âû ïëàíèðóåòå íàçíà÷èòü ðàçëè÷íûì ðîëÿì ïî îòíîøåíèþ
ê ðàçíûì îáúåêòàì. Âûâåäèòå ïëàí íà ïå÷àòü è ïðåäúÿâèòå ïðåïîäàâàòåëþ. Ïðè
íåîáõîäèìîñòè ñîñòàâüòå íà îòäåëüíîé ñòðàíèöå ïîÿñíèòåëüíûé òåêñò.