2011-11-15 89 views
4

我想從表「交易」的2列撤銷更新權限。 我希望用戶能夠訪問所有其他表和數據。如何在MySQL中「減去」特權

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' 

以上似乎並不奏效。

+0

我不認爲有「負面的權限」,所以這是行不通的。您必須明確地授予他對所有其他表的權限,並省略您想要限制的那些表。 – Thilo

回答

5

我同意Thilo - 如果您之前已授予他們,您將只能撤消這些列權限。您無法授予更高級別(例如表格),然後撤銷更詳細的級別。我認爲這是在MySQL參考手冊的MySQL 5.1章節12.7.1.3描述:

「的一個數據庫,表,列,或例程特權形成 相加作爲邏輯OR的特權在每個例如,如果用戶具有全局SELECT 權限,則無法在數據庫,表或列級別缺少 權限來拒絕該權限。「

獲得選擇性權限已由Devart描述。

0

我猜'ledger.transact'是你的表嗎?它應該像這樣工作比:

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

的外觀也here爲撤銷語法在MySQL中使用。

1

首先 - 刪除所有權限(數據庫,表,列級別)。

  1. 將UPDATE(...和其他)權限授予每個表,除了'transact'。
  2. 將UPDATE特權授予表'transact'中的指定字段。