MySQL 不便于根据连接到数据库的 MySQL 用户使用权限来锁定某些行。
如果您有想要以这种方式限制的用户,最好不要让他们直接访问数据库,而是让他们通过另一层连接。
使用视图不是一个好主意——每个用户都必须使用不同的查询(引用他们自己的个人视图)来完成相同的事情。如果您只是限制用户可以看到的列(而不是行),那么视图将是一个很好的解决方案。
可以使用存储过程来完成您正在寻找的事情:
# This table already exists in your schema
CREATE TABLE `user` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `email` VARCHAR(50) NOT NULL,
  `instance` INT(10) UNSIGNED NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=INNODB;
INSERT INTO `user`(`id`,`email`,`instance`) 
    VALUES ( NULL,'wat@lol.com','1');
INSERT INTO `user`(`id`,`email`,`instance`) 
    VALUES ( NULL,'huh@bwu.com','2');
INSERT INTO `user`(`id`,`email`,`instance`) 
    VALUES ( NULL,'no@yes.lol','1');
# This would be a new table you would have to create
CREATE TABLE `user_instance` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `user` VARCHAR(20) NOT NULL,
  `instance` INT(10) UNSIGNED NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `user_instance` (`user`,`instance`)
) ENGINE=INNODB;
INSERT INTO `user_instance`(`user`,`instance`) VALUES ('user1','1');
INSERT INTO `user_instance`(`user`,`instance`) VALUES ('user2','2');
# This is a stored procedure that might accomplish what you want
DELIMITER $$
CREATE PROCEDURE `p_get_users`()
BEGIN
    SELECT `user`.`id`, `user`.`email`
    FROM `user`
    WHERE `user`.`instance` IN(
        SELECT `instance` 
        FROM `user_instance` 
        WHERE `user` = USER());
END$$
DELIMITER ;