2017-01-05 2 views
0

私は、ユーザー、アイテム、user_itemsなどのような "サービス"テーブルを持つLaravelでアプリケーションを作成しています。ユーザーがLaravelでクエリを実行できるDB内のテーブルを制限する

また、ユーザーがクエリを実行できるようにするためのテーブルがあります。つまり、ユーザーは自分のクエリーをサーバーに送信し、そこで実行されます。

問題は次のとおりです。ユーザーにSELECTクエリのみを実行させ、UPDATE、INSERTおよびDELETEを実行させないようにします。 また、これらのクエリを特定のテーブルに対してのみ実行できるようにする必要があります。つまり、ユーザーはユーザー表から選択することはできません。

ユーザーは生のクエリを実行します。つまり、DB:raw()が使用されます。

Laravelでどうすればいいですか?

解決策の1つは、MYSQLとsqliteという2つのデータベースを作成し、ユーザーがクエリを実行するためにsqliteのみを使用できるようにすることですが、この場合はテストに問題があります。

+0

一部のユーザーはテーブルを使用でき、一部のユーザーは使用できません。 –

+0

いいえ。私のアプリのすべてのユーザーは、独自のクエリをアプリに送信できます。ユーザーがタスクを正しく照会したかどうかを確認するアプリです。たとえば、ユーザーはテーブルから商品を選択する作業を行います。彼はクエリ "SELECT * FROM goods"を送信し、サーバーはそれが正しく行われたかどうかをチェックします。 –

+0

まず、ユーザーがこの機能を使用する権限を持っているかどうかを確認してから、クエリを実行します。クエリを実行して、ユーザーがこの機能を使用するためのアクセス許可を持っているかどうかを確認するにはどうすればよいですか。 –

答えて

1

GRANTコマンドとREVOKEコマンドを使用する必要があります。そして、あなたが各テーブルの上にこれを行う必要があります1

REVOKE SELECT ON db1.tablename FROM 'jeffrey'@'localhost' 

によって余分なものを取り消す文書

CREATE USER 'jeffrey'@'localhost' IDENTIFIED BY 'mypass'; 
GRANT SELECT ON db1.* TO 'jeffrey'@'localhost'; 

に概説されているよう最初にユーザーを作成します。したがって、ループ内で実行するPHPスクリプトを書くことが1つの選択肢です。

+0

あなたの答えをありがとうが、私はデータベースを変更せずにプログラム的にやりたいと思います。 –

+0

これは不可能で、これを行う正しい方法です。これは解決された問題です。あなたは、同じユーザー名とパスワードを使って誰かがコンソールを使ってデータベースに変更を加えたり、laravelを渡したりするのをどうやって防ぐのですか? – e4c5

関連する問題