以下の質問はMySQL 5.1.44に関係します
アプリケーションのさまざまなユーザーによって挿入されたレコードを持つテーブルがあるとしましょう。特定のユーザーにそのテーブルのレコードのみを表示するアクセス権を付与するにはどうすればよいですか?自分のレコードでVIEW
を作成することを考えましたが、VIEW
しか表示できないmysqlユーザーを作成する方法がわかりません。
したがって、単一のVIEW
にのみアクセスできるmysql-userを作成することは可能ですか?このユーザーを作成して、そのVIEW
への読み取り専用アクセスを許可することもできますか?
ありがとう!
PS:私の例ではsersは、本当に自分のアプリケーションでレコードにアクセスしたい子会社です。
GRANT SELECT ON database1.view1 TO 'someuser'@'somehost';
ほかに
GRANT SELECT ON <database_name>.<view_name>
TO <user>@<Host>
IDENTIFIED BY '<password>'
またする方が良い
GRANT SHOW VIEW
ON <database_name>.<view_name> TO <user>@<Host>
IDENTIFIED BY '<password>'
多くのSQL UIツールがビュー定義を取得し、ビューに対して適切に機能できるようにします。
GRANT SELECT ON <database name>.<view name>
TO <user>@<Host> IDENTIFIED BY '<password>'
ソース: MySQLドキュメント
元の質問は、実際には、特定のユーザーが所有する行に制限する方法を尋ねていることだと思います。 (ユーザーごとに1つのビューを作成し、それだけを許可するという考え方は、回避策のようです。)
これを行うには、データテーブルにuser()参照を挿入し、それをフィルタリングします。
MySQL 5.6を使用します。 SELECTを現在のユーザーが所有するレコードのみに制限するビューを作成します。
-- check the current user
select user();
create table t1 (myId int, mydata varchar(200), myName varchar(200));
insert t1 select 1, 'my data yes', user();
insert t1 select 2, 'my data yes2', user();
insert t1 select 3, 'my data no', 'joe';
select * from t1;
create or replace view v1 AS
select * from t1 where myName = user();
select * from v1;
ビューを読み取り専用にしたい場合は、それを行うと思われます。次に、ALGORITHM = TEMPTABLE句を使用してビューを作成する必要があります。
これにより、一時テーブルを作成する必要があるため、ビューは読み取り専用になります。
読み取り専用を実現する別の方法であり、これはデータに依存しますが、集約関数を使用します。たとえば、テーブルに基づいており、すべての列を表示するビューがある場合は、選択に個別のスティックを貼り付けることができます。