Chcę odwołać aktualizacje privie z 2 kolumn tabeli "transakcja". Chcę, aby użytkownik miał dostęp do wszystkich innych tabel i danych.
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"
Powyższe wydaje się nie działać.
Odpowiedzi:
6 dla odpowiedzi № 1Zgadzam się z Thilo - mógłbyś tylkoodwołać te uprawnienia do kolumn, jeśli wcześniej je przyznałeś. Nie można przyznać na wyższym poziomie (np. Tabela), a następnie odwołać na bardziej szczegółowym poziomie. Myślę, że jest to opisane w podręczniku użytkownika MySQL 5.1 rozdział 12.7.1.3:
"Uprawnienia do bazy danych, tabeli, kolumny lubrutyna się tworzy dodatkowo jako logiczne OR uprawnień w każdym z nich poziomy przywilejów. Na przykład, jeśli użytkownik ma globalne WYBIERANIE przywileju, przywileju nie można odmówić przez brak przywilej na poziomie bazy danych, tabeli lub kolumny. "
Aby uzyskać selektywne przywileje jest już opisany przez Devarta.
1 dla odpowiedzi nr 2
Po pierwsze - usuń wszystkie uprawnienia (w bazie danych, tabeli, poziomach kolumn).
- Przyznaj uprawnienia UPDATE (... i inne) do KAŻDEJ tabeli, z wyjątkiem "transakcji".
- Nadaj uprawnienie UPDATE do określonych pól w tabeli "transakcja".
0 dla odpowiedzi № 3
Domyślam się, że "ledger.transact" to twój stół? Powinno to działać w następujący sposób:
REVOKE UPDATE ON ledger.transact FROM "foo"@"localhost";
patrz również tutaj dla odwołania Składnia używana w mysql.