38

この質問は元々MySQL5.1.44を使用していましたが、MySQL8.0以降にも当てはまります。

アプリケーションのさまざまなユーザーによって挿入されたレコードを含むテーブルがあるとします。特定のユーザーに、そのテーブル内の自分のレコードのみを表示するためのアクセス権を与えるにはどうすればよいですか?彼/彼女のレコードを使用してを作成することを考えましたVIEWが、それしか表示できないMySQLユーザーを作成する方法がわかりませんVIEW

では、単一のアクセス権しか持たないMySQLユーザーを作成することは可能VIEWですか?このユーザーは、読み取り専用でアクセスできるようにすることもできますVIEWか?

ありがとう!

PS:私の例でユーザーと呼んでいるのは、実際には、独自のアプリケーションを使用してレコードにアクセスしたい子会社です。

4

5 に答える 5

50

GRANT SELECT ON database1.view1 TO 'someuser'@'somehost';

于 2010-06-24T09:28:50.983 に答える
13

その上

GRANT SELECT ON <database_name>.<view_name>
TO <user>@<host>

またする方が良いです

GRANT SHOW VIEW
ON <database_name>.<view_name> TO <user>@<host>

多くのSQLUIツールがビュー定義を取得し、ビューに対して適切に機能できるようにします。

于 2013-06-26T23:29:29.743 に答える
5
GRANT SELECT ON <database name>.<view name>
TO <user>@<host> IDENTIFIED BY '<password>'

出典:MySQLドキュメント

于 2010-06-24T09:33:59.937 に答える
5

元の質問は、実際には、特定のユーザーが所有する行に行を制限する方法を尋ねていると思います。(ユーザーごとに1つのビューを作成し、それだけを許可するというアイデアは、回避策のようです。)

これを行うには、user()参照をデータテーブルに挿入し、それをフィルタリングします。

MySQL5.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;
于 2013-12-11T00:15:30.333 に答える
0

ビューを読み取り専用にしたい場合は、そうしていると思います。次に、ALGORITHM=TEMPTABLE句を使用してビューを作成する必要があります。

これにより、一時テーブルを作成する必要があるため、ビューは読み取り専用になります。

読み取り専用を実現するもう1つの方法は、データによって異なりますが、集計関数を固定することです。たとえば、テーブルに基づいてすべての列を表示するビューがある場合は、選択に個別のものを貼り付けることができます。

于 2015-04-22T13:41:47.193 に答える