ГЛАВА 1
Технологии администрирования баз данных
1.2
Система безопасности в базах данных
Как только дан­ные струк­ту­риро­ваны и све­дены в БД, воз­ни­ка­ет проб­ле­ма ор­га­низа­ции дос­ту­па к ним мно­жес­тва пользо­вате­лей. Оче­вид­но, что нельзя поз­во­лить всем без ис­клю­чения пользо­вате­лям бес­пре­пятс­твен­ный дос­туп ко всем эле­мен­там БД. В лю­бой БД су­щес­тву­ют кон­фи­ден­ци­альные дан­ные, дос­туп к ко­торым мо­жет быть раз­ре­шен лишь ог­ра­ничен­но­му кру­гу лиц. Так, в бан­ков­ской сис­те­ме осо­бо кон­фи­ден­ци­альны­ми мо­гут счи­таться, нап­ри­мер, све­дения о вы­дан­ных кре­дитах. Это только один из ас­пектов проб­ле­мы бе­зопас­ности в СУБД.
В са­мом об­щем ви­де тре­бова­ния к бе­зопас­ности ре­ляци­он­ных СУБД мож­но сфор­му­лиро­вать так:
  • дан­ные в лю­бой таб­ли­це дол­жны быть дос­тупны не всем пользо­вате­лям, а лишь не­кото­рым из них;
  • не­кото­рым пользо­вате­лям дол­жно быть раз­ре­шено об­новлять дан­ные в таб­ли­цах, в то вре­мя как для дру­гих до­пус­ка­ет­ся лишь вы­бор дан­ных из этих же таб­лиц;
  • для не­кото­рых таб­лиц не­об­хо­димо обес­пе­чить вы­бороч­ный дос­туп к ее столб­цам;
  • не­кото­рым пользо­вате­лям дол­жен быть зап­ре­щен не­пос­редс­твен­ный (че­рез зап­ро­сы) дос­туп к таб­ли­цам, но раз­ре­шен дос­туп к этим же таб­ли­цам в ди­ало­ге с прик­ладной прог­раммой.
Схе­ма дос­ту­па к дан­ным во всех ре­ляци­он­ных СУБД выг­ля­дит при­мер­но оди­нако­во и ба­зиру­ет­ся на трех прин­ци­пах.
1. Пользо­вате­ли СУБД рас­смат­ри­ва­ют­ся как ос­новные действу­ющие ли­ца, же­ла­ющие по­лучить дос­туп к дан­ным. Сис­те­ма уп­равле­ния ба­зами дан­ных от име­ни кон­крет­но­го пользо­вате­ля вы­пол­ня­ет опе­рации над БД, т.е. до­бав­ля­ет стро­ки в таб­ли­цы (INSERT), уда­ля­ет стро­ки (DELETE), об­новля­ет дан­ные в стро­ках таб­ли­цы (UPDATE). Она де­ла­ет это в за­виси­мос­ти от то­го, об­ла­да­ет ли кон­крет­ный пользо­ватель пра­вами на вы­пол­не­ние кон­крет­ных опе­раций над кон­крет­ным объек­том БД.
2. Объек­ты дос­ту­па — это эле­мен­ты ба­зы дан­ных, дос­ту­пом к ко­торым мож­но уп­равлять (раз­ре­шать дос­туп или за­щищать от дос­ту­па). Обыч­но объек­та­ми дос­ту­па яв­ля­ют­ся таб­ли­цы, од­на­ко ими мо­гут быть и дру­гие объек­ты БД — фор­мы, от­че­ты, при­клад­ные прог­раммы и т.д. Кон­крет­ный пользо­ватель об­ла­да­ет кон­крет­ны­ми пра­вами до­сту­па к кон­крет­но­му объек­ту.
3. При­виле­гии (priveleges) — это опе­рации, ко­торые раз­ре­шено вы­пол­нять пользо­вате­лю над кон­крет­ны­ми объек­та­ми. Нап­ри­мер, пользо­вате­лю мо­жет быть раз­ре­шено вы­пол­не­ние над таб­ли­цей опе­раций SELECT (ВЫБ­РАТЬ) и INSERT (ВКЛЮ­ЧИТЬ).
Та­ким об­ра­зом, в СУБД ав­то­риза­ция дос­ту­па осу­щест­вля­ет­ся с по­мощью при­виле­гий. Ус­та­нов­ле­ние и кон­троль при­виле­гий — пре­рога­тива ад­ми­нис­тра­тора БД.
При­виле­гии ус­та­нав­ли­ва­ют­ся и от­ме­ня­ют­ся спе­ци­альны­ми опе­рато­рами язы­ка SQL:
  • GRANT (РАЗ­РЕ­ШИТЬ).
  • REVOKE (ОТ­МЕ­НИТЬ).
Опе­ратор GRANT ука­зыва­ет кон­крет­но­го пользо­вате­ля, ко­торый по­луча­ет кон­крет­ные при­виле­гии дос­ту­па к ука­зан­ной таб­ли­це.
Нап­ри­мер, опе­ратор GRANT SELECT, INSERT ON Bills TO bit123 ус­та­нав­ли­ва­ет при­виле­гии пользо­вате­лю c ло­гином bit123 на вы­пол­не­ние опе­раций вы­бора и вклю­чения над таб­ли­цей Bills. Как вид­но из при­мера, опе­ратор GRANT ус­та­нав­ли­ва­ет со­от­ветс­твие меж­ду опе­раци­ями, пользо­вате­лем и объек­том БД (таб­ли­цей в дан­ном слу­чае).
При­виле­гии лег­ко ус­та­новить, но лег­ко и от­ме­нить. От­ме­на при­виле­гий вы­пол­ня­ет­ся опе­рато­ром REVOKE. Пусть, нап­ри­мер, пользо­ватель, име­ющий ло­гин bit123, ут­ра­тил до­верие ад­ми­нис­тра­тора БД, и пос­ледний ре­шил ли­шить его при­виле­гий на вклю­чение строк в таб­ли­цу Bills. Он сде­ла­ет это, вы­пол­нив опе­ратор REVOKE INSERT ON Bills FROM bit123.
Не­кото­рые СУБД (Oracle, Sybase) ис­пользу­ют собс­твен­ную сис­те­му па­ролей, в дру­гих (Ingres, Informix) иден­ти­фика­тор пользо­вате­ля и его па­роль бе­рут­ся из опе­раци­он­ной сис­те­мы. Для MS SQL Server су­щес­тву­ет воз­можность ре­али­зации обе­их по­литик иден­ти­фика­ции пользо­вате­лей: Windows authentication и SQL Server authentication.
Для сов­ре­мен­ных БД с большим ко­личес­твом пользо­вате­лей ак­ту­альна проб­ле­ма их объеди­нения в груп­пы. Тра­дици­он­но при­меня­ют два спо­соба оп­ре­деле­ния групп пользо­вате­лей:
  • по пер­во­му спо­собу один и тот же иден­ти­фика­тор ис­пользу­ет­ся для дос­ту­па к БД це­лой груп­пы фи­зичес­ких лиц (нап­ри­мер, сот­рудни­ков од­но­го от­де­ла). Это уп­ро­ща­ет за­дачу ад­ми­нис­тра­тора БД, так как дос­та­точ­но один раз ус­та­новить при­виле­гии для это­го «обоб­щенно­го» пользо­вате­ля. Од­на­ко та­кой спо­соб в ос­новном пред­по­лага­ет раз­ре­шение на прос­мотр, мо­жет быть на вклю­чение, но ни в ко­ем слу­чае — на уда­ление и об­новле­ние. Как только иден­ти­фика­тор (и па­роль) ста­новит­ся из­вестен большо­му чис­лу лю­дей, воз­ни­ка­ет опас­ность не­санк­ци­они­рован­но­го дос­ту­па к дан­ным пос­то­рон­них лиц;
  • вто­рой спо­соб зак­лю­ча­ет­ся в том, что кон­крет­но­му фи­зичес­ко­му ли­цу прис­ва­ива­ет­ся уни­кальный иден­ти­фика­тор. В этом слу­чае ад­ми­нис­тра­тор БД дол­жен по­забо­титься о том, что­бы каж­дый пользо­ватель по­лучил собс­твен­ные при­виле­гии. Ес­ли ко­личес­тво пользо­вате­лей БД воз­раста­ет, то ад­ми­нис­тра­тору ста­новит­ся все труд­нее кон­тро­лиро­вать при­виле­гии. В ор­га­низа­ции, нас­чи­тыва­ющей бо­лее 100 пользо­вате­лей, ре­шение этой за­дачи пот­ре­бу­ет от не­го мно­го вни­мания.
Сов­ре­мен­ные СУБД поз­во­ля­ют ис­пра­вить эти не­удобс­тва, пред­ла­гая тре­тий спо­соб ад­ми­нис­три­рова­ния (Ingres, Informix, MS SQL Server). Суть его сос­то­ит в под­дер­жке по­мимо иден­ти­фика­тора пользо­вате­ля еще и иден­ти­фика­тора груп­пы пользо­вате­лей. Каж­дый пользо­ватель кро­ме собс­твен­но­го иден­ти­фика­тора име­ет так­же иден­ти­фика­тор груп­пы, к ко­торой он при­над­ле­жит. Ча­ще все­го груп­па пользо­вате­лей со­от­ветс­тву­ет струк­турно­му под­разде­лению ор­га­низа­ции, до­пус­тим, от­де­лу. При­виле­гии ус­та­нав­ли­ва­ют­ся не только для от­дельных пользо­вате­лей, но и для их груп­пы.
Не­об­хо­димость за­пус­ка прик­ладных прог­рамм пользо­вате­лями, ко­торые об­ла­да­ют раз­личны­ми пра­вами дос­ту­па к дан­ным, так­же при­водит к на­руше­нию схе­мы бе­зопас­ности.
Од­но из ре­шений проб­ле­мы зак­лю­ча­ет­ся в том, что­бы прик­ладной прог­рамме бы­ли при­даны не­кото­рые при­виле­гии дос­ту­па к объек­там БД. В этом слу­чае пользо­ватель, не об­ла­да­ющий спе­ци­альны­ми при­виле­ги­ями дос­ту­па к не­кото­рым объек­там БД, мо­жет за­пус­тить прик­ладную прог­рамму, ко­торая име­ет та­кие при­виле­гии.
В ря­де СУБД это ре­шение обес­пе­чива­ет­ся ме­ханиз­мом ро­лей (role). Роль пред­став­ля­ет со­бой име­нован­ный объект, хра­нящийся в БД. Роль свя­зыва­ет­ся с кон­крет­ной при­клад­ной прог­раммой для при­дания пос­ледней при­виле­гий дос­ту­па к БД, таб­ли­цам, пред­став­ле­ни­ям и про­цеду­рам БД. Роль соз­да­ет­ся и уда­ля­ет­ся ад­ми­нис­тра­тором БД; для ро­ли мо­жет быть оп­ре­делен па­роль. Как только роль соз­да­на, ей мож­но пре­дос­та­вить при­виле­гии дос­ту­па к объек­там БД.
Пусть, нап­ри­мер, в не­кото­рой ор­га­низа­ции ра­бота­ет слу­жащий, име­ющий имя пользо­вате­ля bit123. По ха­рак­те­ру сво­ей ра­боты он час­то об­ра­ща­ет­ся к таб­ли­це «За­работ­на­яП­ла­та», он так­же яв­ля­ет­ся чле­ном груп­пы «Учет». Для пользо­вате­лей этой груп­пы раз­ре­шено вы­пол­не­ние опе­рации SELECT над таб­ли­цей «За­работ­на­яП­ла­та». Каж­дый раз, ког­да ему не­об­хо­димо вы­пол­нить опе­рацию вы­бор­ки из таб­ли­цы, он дол­жен для на­чала се­ан­са ввес­ти иден­ти­фика­тор сво­ей груп­пы.
Од­на­ко ни один из пользо­вате­лей груп­пы «Учет» не мо­жет не­пос­редс­твен­но вы­пол­нить опе­рацию UPDATE. Для это­го он дол­жен за­пус­тить прог­рамму «Кон­трольЗа­работ­нойПла­ты», ко­торая име­ет при­виле­гии об­новле­ния этой таб­ли­цы и вы­пол­ня­ет спе­ци­альные про­вер­ки для кор­рек­тно­го вы­пол­не­ния об­новле­ния. С этой целью ад­ми­нис­тра­тором БД соз­да­ет­ся и по­меща­ет­ся в БД роль «Об­но­витьЗа­работ­ну­юП­ла­ту». Для это­го он ис­пользу­ет сле­ду­ющий опе­ратор:
CREATE ROLE Об­но­витьЗа­работ­ну­юП­ла­ту WITH PASSWORD='DT3110';
Опе­ратор
GRANT SELECT, UPDATE ON За­работ­на­яП­ла­та TO ROLE Об­но­витьЗа­работ­ну­юП­ла­ту;

пре­дос­тавля­ет но­вой ро­ли при­виле­гии на вы­пол­не­ние опе­раций вы­бор­ки и об­новле­ния таб­ли­цы «За­работ­на­яП­ла­та». Ког­да пользо­ватель за­пус­ка­ет прог­рамму «Кон­трольЗа­работ­нойПла­ты», она по­луча­ет при­виле­гии ро­ли «Об­но­витьЗа­работ­ну­юП­ла­ту». Та­ким об­ра­зом, дан­ный пользо­ватель, сам не об­ла­дая при­виле­ги­ями на об­новле­ние таб­ли­цы, мо­жет вы­пол­нить эту опе­рацию, но только за­пус­тив прик­ладную прог­рамму. Она же, в свою оче­редь, дол­жна иг­рать оп­ре­делен­ную роль, ко­торой при­даны со­от­ветс­тву­ющие при­виле­гии дос­ту­па к таб­ли­це

This site was made on Tilda — a website builder that helps to create a website without any code
Create a website