2

1つを除くすべての列を更新する権限をユーザーに付与したいupdate-私の場合はID(IDを変更するとデータや既存のURLなどが混乱する可能性があります-外部キーは解決策ではありません)。他のすべての列をリストせずにmysqlで可能ですか?たとえば、次のように言ってください。

grant update on db.table to user;
NOT grant update id on db.table to user;

またはそのようなもの?

すべての列をリストしたくない理由:

  1. より堅牢です-後でテーブルにいくつかの列を追加することがよくありますが、このルールも更新する必要があることをおそらく忘れてしまいます。

  2. 私にはgrant権限がないので、ホスティングプロバイダーにすべてのgrantコマンドを実行するように依頼する必要があります。したがって、これらのリクエストは標準を超えるサービスであるため、最小限に抑えたいと思います(これは私にとっての恵みです)。

特にmysqlの場合ですが、私はgerericsqlソリューションにも興味があります。

4

5 に答える 5

2

外部キーについてだけでなく、データベースの整合性についてさらに学ぶ必要があります。

外部キーは、Dabaseリレーショナルシステムが人為的なものなしで整合性を維持する方法です。mySql FKドキュメントから:

「RESTRICT:親テーブルの削除または更新操作を拒否します。」

外部キーによる破損を回避することにはいくつかの利点があります:

  • 組み込みの機能です。パフォーマンスは、トリガーや他のシステムよりも優れています。
  • これを行うための標準的な方法です。他の開発者はあなたが何をしているかを理解できます。
  • レポートソリューションおよびその他のアプリケーションは、リレーションシップデータベースディクショナリについて学習できます。

OPコメントによる編集

オブジェクトに高レベルの特権を付与してから低レベルの特権を取り消し、MySQLの選択的な特権を確認する(そして回答に投票する)ことはできません。

つまり、テーブルに対する挿入権限を付与し、すべてのフィールドに対して権限を選択し、非IDフィールドに対してのみ更新する必要があります。これを行うスクリプトを作成できます。

これが最終的にあなたの質問に答えることを願っています。

于 2012-01-26T08:21:07.103 に答える
1

データに対して(選択、挿入、更新、削除)操作を実行するストアドプロシージャを作成します。

テーブルではなく、プロシージャのみへのアクセスをユーザーに許可します。

于 2012-01-26T09:20:31.397 に答える
1

データベースの整合性を恐れている場合は、データベースの整合性を維持するために外部キー制約を使用する必要があります。

于 2012-01-26T08:28:58.710 に答える
1

私はこれがうまくいくかもしれないと思います:-

revoke update (id) on db.table from user;
于 2012-01-26T08:31:38.923 に答える
0

それは不可能です-詳細については、この質問を参照してください。

于 2013-06-15T19:22:40.773 に答える