有没有办法让用户PERSON
的视图jack
指向某个主要人员表,让我们调用它MAIN_PERSON
并为用户创建一个视图PERSON
jill
并指出相同的MAIN_PERSON
表,不同之处在于,jack
只能访问这些人,jill
只能访问妇女。
以下是我要设置表格/视图的方法
PERSON表:
CREATE TABLE IF NOT EXISTS person
(
id INT NOT NULL auto_increment,
male BOOLEAN,
PRIMARY KEY(id)
)
engine=innodb;
查看杰克:
CREATE VIEW person_for_jacks_eyes_only
AS
SELECT * FROM person
WHERE
person.male = TRUE;
查看jill:
CREATE VIEW person_for_jills_eyes_only
AS
SELECT * FROM person
WHERE
person.male = false;
创建用户并授予权限:
GRANT SELECT ON DB.person_for_jacks_eyes_only TO jack@'localhost' IDENTIFIED BY '1234';
GRANT SELECT ON DB.person_for_jills_eyes_only TO jill@'localhost' IDENTIFIED BY '1234';
我想让不同的用户只能访问行的子集。根据我的理解,这是视图的目的之一(另一个是将多个表组合在一起)。但是,我不想拥有像person_for_jacks_eyes_only
那样模糊的视图名称,因此我想制作用户特定的local
名称。如果这是使用观点的错误方式,那么有人可以帮助我指出正确的方向。
答案 0 :(得分:2)
不,没有。表和视图有一个全局命名空间;无法创建具有相同名称的多个视图。
我相信你可以声明一个视图,其输出取决于当前用户:
CREATE VIEW limited_person AS
SELECT * FROM person
WHERE person.male = (USER() = 'jack@localhost')