1

问题:

有没有办法让PERSON用户的视图jack指向某个主要的人员表,让我们调用它MAIN_PERSONPERSON为用户创建一个视图jill并让它指向同一个MAIN_PERSON表,不同之处在于,例如,jack只能访问男性,并且jill只能访问女性。

细节:

这是我想设置我的表/视图的方式

人表:

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;

查看吉尔:

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名称。如果这是使用视图的错误方式,请有人指出我正确的方向。

4

1 回答 1

2

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

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

CREATE VIEW limited_person AS
    SELECT * FROM person
    WHERE person.male = (USER() = 'jack@localhost')
于 2012-04-30T01:02:54.180 回答