mysql で特定の行だけに権限を与えたい。表: メッセージ 列: from、to、メッセージ
GRANT ALL ON db.messages TO 'jeffrey'@'localhost' WHERE messages.from = 'jeffrey' OR messages.to = 'jeffrey' ;
このようなものでは、ユーザーは自分のメッセージのみにアクセスできます。
問題を解決する方法を知っていますか?
コマンドごとに、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';
MySQL には行レベルの権限がありません。データベース、テーブル、および列があります。行ではありません。行レベルの場合、ビューおよび/または適切なwhere
句を使用します。
行レベルの権限が必要な場合は、独自のメカニズムを追加する必要があります。通常、これは整数であり、ビットパターンとして使用されます
たとえば、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ですが、深く考えてください。