Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有办法创建用户特定的表;“指针”;在MySQL中? 问题:_Mysql - Fatal编程技术网

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

有没有办法创建用户特定的表;“指针”;在MySQL中? 问题:,mysql,Mysql,有没有一种方法可以让用户的视图PERSON指向某个主要的PERSON表,让我们称之为main\u PERSON,也可以为用户jill创建一个视图PERSON,并让它指向同一个main\u PERSON表,区别在于,杰克只能接近男人,吉尔只能接近女人 细节: 下面是我想如何设置我的表/视图 人员表: CREATE TABLE IF NOT EXISTS person ( id INT NOT NULL auto_increment, male B

有没有一种方法可以让用户的视图
PERSON
指向某个主要的PERSON表,让我们称之为
main\u PERSON
,也可以为用户
jill
创建一个视图
PERSON
,并让它指向同一个
main\u 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;
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';
杰克的视图:

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';
吉尔的视图:

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';
创建用户并授予特权:

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';
动机:
我想让不同的用户只访问行的子集。据我所知,这是视图的目的之一(另一个目的是将多个表组合在一起)。一、 但是,我不希望使用模糊的视图名称,例如仅用于_jacks\u eyes\u的,因此我希望使用特定于用户的本地名称。如果这是使用视图的错误方式,请有人帮我指出正确的方向。

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

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

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

谢谢,这将是我的下一个问题:
USER()。