ビューに権限を付与し、テーブルの選択を拒否する


9

MySQLユーザーがいて、データベース内の他のテーブルではなく、必要なビューのみを表示したい。次のように、特定のビューでのみこのユーザー権限を付与しました。

GRANT SHOW VIEW ON `myDatabase`.`awesome_view` TO 'thisUser'@'%'

show grants;ステートメントを実行すると、期待どおりにこの権限しか表示されません。ただし、このユーザーに、これらのビューに関連するテーブルではなく、ビューだけをクエリしてもらいたいのですが、これを行う方法が見つかりません。ユーザーがビューで選択を行うようにしたい場合、テーブルに対しても選択を許可する必要がありますか、それとも間違っていますか?

select残りのテーブルのステートメントを拒否し、コマンドラインで選択を実行しようとすると、次のようになります。

SELECT * FROM myDatabase.fordibenForYouTable;
ERROR 1142 (42000): SELECT command denied to user 'thisUser'@'localhost' for table 'fordibenForYouTable'

それが本当に欲しいことですが、ビューデータを選択した場合も拒否されました。

テーブルではなくビューのみをユーザーが利用できるようにする方法はありますか?

回答:


6

ビューをテーブルとして扱う必要があります。information_schemaはすでに

走れば

SELECT table_name FROM information_schema.tables
WHERE engine IS NULL;

すべてのビューを取得します。

次のように、ビューのSELECTをユーザーに付与するだけです

GRANT SELECT ON `myDatabase`.`fordibenForYouTable` TO 'thisUser'@'localhost' ;

これを行うと、テーブルへのSELECTアクセス権が必要になります。

確認するには、 SHOW GRANTS FOR 'thisUser'@'localhost';

また、どのテーブルレベルのアクセス権が付与されているかを確認できるはずです。 'thisUser'@'localhost'

SELECT * FROM mysql.tables_priv
WHERE user='thisUser' and host='localhost'\G

また、テーブルレベルのアクセス権を持つユーザーを確認することもできます myDatabase.fordibenForYouTable

SELECT * FROM mysql.tables_priv
WHERE db='myDatabase' and table_name='fordibenForYouTable'\G

試してみる !!!


ねえ、あなたはそれをやった!ありがとう!自分で解決策を見つけることができませんでした!どうもありがとう!
Metafaniel 14

5

私はこれが古いことを知っていますが、これが私のためにこの問題を解決したものです...

答えは「SQL SECURITY」構文でした。

元のビュー定義では、SQL SECURITYが "INVOKER"に設定されていました。これは、ユーザーがビューとテーブルの両方で選択権限を持つことを余儀なくされたことを意味しました。

SQL SECURITYを "DEFINER"に変更したとき、ユーザーはビューに対してのみ選択権限を与えることができます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.