По соображениям безопасности не каждому пользователю прикладной системы может быть разрешено получать информацию из какой-либо таблицы, а тем более изменять в ней данные. Для определения прав пользователей относительно объектов базы данных (таблицы, представления, индексы) в SQL определена пара команд GRANT и REVOKE. Синтаксис операции передачи прав на таблицу:
GRANT <тип_права_на_таблицу>
ON <имя_таблицы> [<список_столбцов>]
TO <имя_пользователя>
Права пользователя на уровне таблицы определяются следующими ключевыми словами (как мы увидим чуть позже эти ключевые слова совпадают с командами выборки и изменения данных):
SELECT - получение информации из таблицы
UPDATE - изменение информации в таблице
INSERT - добавление записей в таблицу
DELETE - удаление записей из таблицы
INDEX - индексирование таблицы
ALTER - изменение схемы определения таблицы
ALL - все права
В поле <тип_права_на_таблицу> может быть указано либо ключевое слово ALL или любая комбинация других ключевых слов. Например, предоставим все права на таблицу students пользователю kirill:
GRANT ALL ON students TO kirill;
Пользователю dima предоставим права на извлечение и добавление записей на эту же таблицу:
GRANT SELECT INSERT ON students TO dima;
В том случае, когда одинаковые права надо предоставить сразу всем пользователям, вместо выполнения команды GRANT для каждого из них, можно вместо имени пользователя указать ключевое слово PUBLIC:
GRANT SELECT ON students TO PUBLIC;
Отмена прав осуществляется командой REVOKE:
REVOKE <тип_права_на_таблицу>
ON <имя_таблицы> [<список_столбцов>]
FROM <имя_пользователя>
Все ключевые слова данной команды эквивалентны оператору GRANT. Большинство систем поддерживают также команду GRANT для назначения привилегий на базу данных в целом. В этом случае формат команды:
GRANT <тип_права_на_базу_данных>
ON <имя_базы данных>
TO <имя_пользователя>
Отмена прав на базу данных осуществляется командой:
REVOKE <тип_права_на_базу_данных> FROM <имя_пользователя>
К этой группе относятся операторы добавления, изменения и удаления записей.
Добавить новую запись в таблицу:
INSERT INTO <имя_таблицы> [(<имя_столбца>,<имя_столбца>,...)]
VALUES (<значение>,<значение>,..)
Список столбцов в данной команде не является обязательным параметром. В этом случае должны быть указаны значения для всех полей таблицы в том порядке, как эти столбцы были перечислены в команде CREATE TABLE, например:
INSERT INTO students VALUES (16, “Фролов М.А.”, 1981, 33);
Пример с указанием списка столбцов:
INSERT INTO students (FIO, id) VALUES (“Поточинский Е.В.”, 17);
Модификация записей:
UPDATE <имя_таблицы> SET <имя_столбца>=<значение>,...
[WHERE <условие>]
Если задано ключевое слово WHERE и условие, то команда UPDATE применяется только к тем записям, для которых оно выполняется. Если условие не задано, UPDATE применяется ко всем записям. Пример:
UPDATE students SET FIO=”Фролов А.А.” WHERE pub_id=16;
В качестве условия используются логические выражения над константами и полями. В условиях допускаются:
§ операции сравнения: >, <, >=, <=, =, <>, !=. В SQL эти операции могут применяться не только к числовым значениям, но и к строкам ( «<» означает раньше, а «>» позже в алфавитном порядке) и датам ( «<» раньше и «>» позже в хронологическом порядке).
§ операции проверки поля на значение NULL: IS NULL, IS NOT NULL
§ операции проверки на вхождение в диапазон: BETWEEN и NOT BETWEEN.
§ операции проверки на вхождение в список: IN и NOT IN
§ операции проверки на вхождение подстроки: LIKE и NOT LIKE
§ отдельные операции соединяются связями AND, OR, NOT и группируются с помощью скобок.
Подробно все эти ключевые слова будут описаны и проиллюстрированы в параграфе, посвященном оператору SELECT. Здесь мы ограничимся приведением несложного примера:
UPDATE students SET FIO=”Без имени” WHERE FIO IS NULL;
Эта команда находит в таблице students все неопределенные значения столбца FIO и заменяет их строкой «Без имени».
Удаление записей
DELETE FROM <имя_таблицы> [ WHERE <условие> ]
Удаляются все записи, удовлетворяющие указанному условию. Если ключевое слово WHERE и условие отсутствуют, из таблицы удаляются все записи. Пример:
DELETE FROM students WHERE FIO = “Фролов А.А.”;
Эта команда удаляет запись о студенте с ФИО “Фролов А.А.”.