Как «вычесть» привилегии в MySQL - PullRequest
4 голосов
/ 15 ноября 2011

Я хочу отозвать права на обновление из 2 столбцов таблицы "transact".Я хочу, чтобы у пользователя был весь доступ ко всем остальным таблицам и данным.

mysql> REVOKE UPDATE (system, consumer) ON ledger.transact FROM 'foo'@'localhost';
ERROR 1147 (42000): There is no such grant defined for user 'foo' on host 'localhost' on table 'transaction'

Вышеуказанное не работает.

Ответы [ 3 ]

6 голосов
/ 15 ноября 2011

Я согласен с Тило - вы могли бы отозвать те привилегии столбца, только если бы вы предоставили их ранее.Вы не можете предоставить на более высоком уровне (например, таблица), а затем отменить на более подробном уровне.Я думаю, что это описано в справочном руководстве по MySQL MySql 5.1, глава 12.7.1.3:

"Привилегии для базы данных, таблицы, столбца или процедуры формируются аддитивно как логическое ИЛИ привилегий вкаждый из уровней привилегий. Например, если у пользователя есть глобальная привилегия SELECT, эта привилегия не может быть отклонена отсутствием привилегии на уровне базы данных, таблицы или столбца. "

КомуПолучение избирательных привилегий уже описано Devart.

1 голос
/ 15 ноября 2011

Во-первых - удалить все привилегии (на уровне базы данных, таблицы, столбца).

  1. Предоставить привилегии UPDATE (... и другие) для каждой таблицы, кроме 'transact'.
  2. Предоставить привилегию UPDATE указанным полям в таблице 'transact'.
0 голосов
/ 15 ноября 2011

Полагаю, что 'ledger.transact' - это ваш стол? Должно работать так:

REVOKE UPDATE ON ledger.transact FROM 'foo'@'localhost';

смотрите также здесь для синтаксиса отзыва, используемого в MySQL.

...