MySQL은 데이터베이스에 연결된 MySQL 사용자를 기반으로 특정 행을 잠그는 권한을 사용하는 것을 용이하게하지 않습니다.
그런 식으로 제한하려는 사용자가있는 경우 데이터베이스에 직접 액세스하지 않고 다른 계층을 통해 연결하도록하는 것이 가장 좋습니다.
보기를 사용하는 것은 좋은 생각이 아닙니다. 모든 사용자는 동일한 쿼리를 사용하여 자신의 개인보기를 참조해야합니다. 열을 사용자가 (행 대신) 볼 수 있도록 제한하는 경우보기가 좋은 해결책이됩니다.MySQL을 그냥 보안을 강화하는 응용 프로그램 팀이 쿼리에 인스턴스 =의 X를 추가 돌보는되어 있기 때문에
# 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,'[email protected]','1');
INSERT INTO `user`(`id`,`email`,`instance`)
VALUES (NULL,'[email protected]','2');
INSERT INTO `user`(`id`,`email`,`instance`)
VALUES (NULL,'[email protected]','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 ;
:
당신을 위해 무엇을 찾고있는 것처럼 뭔가를 달성하기 위해 저장 프로 시저를 사용할 수있다 쿼리에 실수로 instance = x이없는 경우 – iDev247
코드를 테스트하기 만하면 코딩시 '실수로'같은 것이 없습니다 –
모든 답변과 오랜 토론을 해 주셔서 감사합니다. 나는 해결책을 고찰하고 그것을 적절히 수여 할 것이다. @pyrate 실수로 인한 코드가 없다는 것에 동의합니다. 여러 개발자가있는 경우 장기적으로 이런 종류의 것을 추적하기가 어렵습니다. 문제의 또 다른 이유는 사이트간에 사용자 정보에 액세스하는 기술적 보안 경계/제한이 있다는 것을 거래하는 회사에 안심시키는 것입니다. 다시 한 번 감사드립니다! – iDev247