有没有办法在MySQL中创建用户特定的表“指针”?

时间:2012-04-29 23:50:36

标签: mysql

问题:

有没有办法让用户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名称。如果这是使用观点的错误方式,那么有人可以帮助我指出正确的方向。

1 个答案:

答案 0 :(得分:2)

不,没有。表和视图有一个全局命名空间;无法创建具有相同名称的多个视图。

我相信你可以声明一个视图,其输出取决于当前用户:

CREATE VIEW limited_person AS
    SELECT * FROM person
    WHERE person.male = (USER() = 'jack@localhost')