0

我正在开展一个项目,在该项目中,用户对记录的访问受到基于用户的用户组的限制。我创建了一个全局变量 $usr_sec_group,并且我想在几个应用程序的 SELECT 语句中的 WHERE 子句中添加一个 CASE 语句,该语句根据 $usr_sec_group 的值应用不同的过滤器。关于 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 回答