2011-11-15 9 views
4

テーブル "transact"の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に記述されていると思いますたとえば、ユーザがグローバルなSELECT 特権を持っている場合、特権はデータベース、テーブル、またはカラムレベルで 特権がないことによって拒否できません。

選択権限を取得するには、Devartが既に説明しています。

0

私は 'ledger.transact'があなたのテーブルだと思いますか? MySQLで使用REVOKEの構文について

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

も見here:それはこれ以上のように動作するはずです。

1

まず、すべての特権を削除します(データベース、テーブル、カラムレベル)。

  1. 'transact'を除く、各テーブルに対してUPDATE(...と他の)権限を付与します。
  2. テーブル 'トランザクション'の指定されたフィールドにUPDATE権限を与えます。
関連する問題