[МУЗЫКА]
[МУЗЫКА] Здравствуйте.
Сегодня мы поговорим о конкурентном доступе к данным.
Некоторые пользователи могут видеть данные лишь частично и иметь
ограниченную возможность изменения этих данных.
А некоторые пользователи обладают полным доступом ко всем данным,
которые хранятся в базе данных.
Для того чтобы у пользователя была возможность видеть или изменять данные,
ему должно быть дано на это право.
Это право называется привилегией.
Привилегии бываю системные и объектные.
Синтаксис предоставления этих привилегий отличается в зависимости от
выбранной СУБД.
Приведем примеры объектных привилегий.
Это может быть возможность делать выборку из таблицы,
она определяется словом SELECT.
Может быть дана возможность редактирования таблицы командой UPDATE.
Удаление — командой DELETE,
возможность исполнять процедуру задается командой EXECUTE.
Сейчас на экране вы видите примеры системных представлений.
Некоторые пользователи могут создавать новых пользователей,
могут создавать процедуры или удалять их, создавать индексы или таблицы.
То есть выполнять манипуляции с различными объектами базы данных.
Рассмотрим синтаксис предоставления прав доступа на объекты.
Для того чтобы предоставить пользователю доступ к какому-то объекту,
мы пишем команду GRANT, после этого указываем,
какие возможности мы даем ему, какое право доступа.
Потом указываем после слова ON объекты, к которым мы предоставляем доступ, потом
после ключевого слова TO мы указываем пользователя, которому эти права даются.
И может быть использована еще необязательно опция, которая позволяет
данному пользователю передавать такие же возможности другим пользователям.
Рассмотрим пример выдачи объектных привилегий.
В первом случае мы выдаем доступ на просмотр таблицы,
которая называется My table, пользователю по имени Oleg.
Во втором случае мы предоставляем аналогичный доступ с возможностью передачи
другим пользователям.
И в третьем случае мы даем пользователю Oleg возможность процедуры,
которая называется my_procedure.
Если нам нам нужно предоставить пользователю системные привилегии,
то они выполняются той же командой GRANT, но в конце указывается опция with
admin option, то есть с опцией администратора.
Выдавать права доступа может изначально администратор базы данных.
Рассмотрим примеры выдачи системных привилегий.
Мы даем доступ для создания процедуры пользователю по имени Kate,
даем ей же возможность удаления индекса и создания представлений.
Если нам нужно лишить кого-то ранее выданных привилегий,
то мы используем команду REVOKE.
Пример этой команды вы видите на экране.
На этом слайде вы видите,
как мы лишаем пользователя Oleg ранее выданных ему привилегий.
Если мы хотим удалить у кого-то системные привилегии,
то мы просто выполняем команду REVOKE, говорим, что удаляем и у кого.
С базой данных одновременно могут работать множество пользователей,
и у каждого пользователя может быть свой набор привилегий.
Часто нам требуется предоставить одни и те же привилегии множеству пользователей.
Делать это каждый раз достаточно трудоемко.
Как же сократить наши усилия?
Мы можем создать так называемую роль.
Что такое роль?
Роль — это набор привилегий, объединенных под одним именем.
Мы можем присваивать роли пользователю и давать ему тем самым все
сформированные в этой роли привилегии.
Какие возможности нам дают роли?
Во-первых, это возможность эффективного администрирования.
Кроме того, мы можем динамически управлять правами пользователя.
Например, нам нужно добавить множеству пользователей возможность
изменять какую-то таблицу.
Мы добавляем эту опцию в роль,
и все пользователи сразу получают эту привилегию.
Кто же может создавать роли?
Роли может создавать администратор базы данных, который имеет
системную привилегию, и создаются роли при помощи команды CREATE ROLE.
Роли очень распространены в множестве СУБД, но, к сожалению,
в MySQL, на примере которого мы работаем с базой данных в рамках нашего курса,
роли не поддерживаются.