5

mysql で特定の行だけに権限を与えたい。表: メッセージ 列: from、to、メッセージ

GRANT ALL ON db.messages TO 'jeffrey'@'localhost' WHERE messages.from = 'jeffrey' OR messages.to = 'jeffrey' ;

このようなものでは、ユーザーは自分のメッセージのみにアクセスできます。

問題を解決する方法を知っていますか?

4

3 に答える 3

4

コマンドごとに、GRANT行ごとに許可レベルを設定する機能はありません (テーブル/列、はい - ただし、個々の行ではありません)。

ただし、これを処理するようにビューをセットアップし、代わりにビューにアクセスする権限をユーザーに付与することができます。

次のようなビューでは、現在のユーザーに基づいてメッセージが表示されます。

CREATE VIEW user_messages AS
    SELECT *
    FROM messages
    WHERE
        messages.from = user() OR messages.to = user();

grant-statement は次のようになります。

GRANT ALL ON db.user_messages TO 'jeffrey'@'localhost';
于 2012-07-27T18:39:49.357 に答える
1

MySQL には行レベルの権限がありません。データベース、テーブル、および列があります。行ではありません。行レベルの場合、ビューおよび/または適切なwhere句を使用します。

于 2012-07-27T18:38:37.413 に答える
0

行レベルの権限が必要な場合は、独自のメカニズムを追加する必要があります。通常、これは整数であり、ビットパターンとして使用されます

たとえば、0x0002はスーパーバイザーレベルのアクセスです

ユーザーFredはスーパーバイザーであるため、権限は0x0002であり、UserIdは23です。

次に、

Select * From SomeTable
inner Join myUsers On MyUsers.UserID = 23 and (SomeTable.PermissionID & MyUsers.PermissionID) > 0

したがって、Fredは、ビット1(ビッグエンディアン!)が設定されているpermissionIdを持つ行にのみアクセスできます。

維持するのは主要なPIAですが、深く考えてください。

于 2012-07-27T18:59:08.160 に答える