我正在开发一个项目,根据用户的用户组,用户对记录的访问权限受到限制。我创建了一个全局变量$ 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语句。
我将不胜感激一些指导!
致以最诚挚的问候,
埃里克
答案 0 :(得分:0)
您尝试的解决方案不起作用:它不仅仅是语法问题,您还必须使用动态SQL。即使你使用了动态sql,它也不是 管理访问权限的好方法。
更好的方法是在各种访问级别创建特定视图,然后授予对特定用户的适当访问权限并撤消对其他用户的访问权限:
GRANT SELECT ON MyDatabase.viewABC
TO 'someuser'@'somehost';
见