0

ユーザーのユーザー グループに基づいてユーザーのレコードへのアクセスが制限されているプロジェクトに取り組んでいます。グローバル変数 $usr_sec_group を作成しました。いくつかのアプリケーションの SELECT ステートメントの WHERE 句に、$usr_sec_group の値に基づいて異なるフィルターを適用する CASE ステートメントを追加したいと考えています。私は mySQL に関して比較的「初心者」であり、そのようなステートメントを作成しようとしてもうまくいきませんでした。基本的なロジックは次のとおりです。

SELECT 
   field1,
   field2,
   etc
FROM
  Organizations
CASE $user_sec_group
  WHEN 1 THEN 'filter_statement_1'
  WHEN 2 THEN 'filter_statement_2'
  WHEN 3 THEN 'filter_statement_3'
  ELSE 'filter_statement_else'
END CASE
ORDER By
   field1

「filter_statements」は、次のような有効なフィルターにすることができます。

'oName => 'a' AND oName < 'g'

問題は比較的単純な構文の問題だと思いますが、これまでのところ、機能する CASE ステートメントを書くことができませんでした。

いくつかのガイダンスに感謝します!

よろしくお願いします、

エリック

4

1 に答える 1

0

試みた解決策は機能しません。構文の問題だけではなく、動的SQLを使用する必要があります。動的 SQL を使用したとしても、アクセス許可を管理するのには適していません。

より良い方法は、さまざまなレベルのアクセスで特定のビューを作成し、特定のユーザーに適切なアクセスを許可し、他のユーザーのアクセスを取り消すことです。

GRANT SELECT ON MyDatabase.viewABC 
    TO 'someuser'@'somehost';

見る

于 2013-04-02T00:15:54.013 に答える