我在SQL上使用钻头撞击作为用户权限,就像UNIX权限一样:
1-001-执行 2- 010 -写 4- 100读
因此,如果我有权利6( 2+4或110),我可以写和读,但我不能执行。在我的情况下,我有更多的权利,所以我的用户可以有价值"128“的权利。
我如何进行查询并询问所有使用的权限(如UNIX示例中的2)
SELECT * from user WHERE user_right ?? '2'使用者的权利必须是2 (010),3 (011),6 (110)或7 (111) ?!
谢谢大家,为我的英语道歉:/
发布于 2013-10-28 21:22:57
128意味着共有7项用户权利:
1 1 1 1 1 1 1 = 0177 = 0x7F = 127MySQL已经为其提供了一个抽象,称为类型,它本质上将您的命名/可见值映射为一个二进制值。因此,如果您有一个set列user_right:
('Execute', 'Write', 'Read')它们实际上将存储在服务器后端,如下所示:
(1, 2, 4)这允许正常的查询,例如:
SELECT * FROM user WHERE user_right LIKE '%Write%';或者使用FIND_IN_SET
SELECT * FROM user WHERE FIND_IN_SET('Write',user_right) > 0;或直接位集操作:
SELECT * from user WHERE user_right & 2;举几个例子。如果将ORDER BY user_right添加到select查询中,它将按数字(而不是字母顺序)返回查询,但否则您可以通过以下方式快速确定用户的值:
SELECT user_name, user_right FROM user;并且看到返回的值是:
'some user' | Read,Write虽然仍然可以使用按位操作进行非常快速的筛选,例如:
SELECT user_name, user_right FROM user WHERE user_right & ~1;若要返回所有没有执行权限的读取和写入权限的用户,请执行以下操作。
https://stackoverflow.com/questions/19644743
复制相似问题