как предоставить MySQL привилегии только определенной строке c - PullRequest
1 голос
/ 02 февраля 2020

Представьте, что есть таблица учеников
ученик (идентификатор, имя, город)
Я хочу создать пользователя A и предоставить разрешение только на обновление записи, где id = 10.

CREATE USER A ;
GRANT UPDATE ON student TO A WHERE student.id=10;

Я пробовал это, и оно не работает.

1 Ответ

2 голосов
/ 02 февраля 2020

Нет не одной строки , а представления, которое содержит одну строку, которая, в свою очередь, обновит фактическую реальную таблицу.

Это можно сделать с помощью спецификаций c просмотр таблицы на одного учащегося (да, это будет грязная структура БД). Предоставьте доступ к представлению для этого пользователя только для выбора / обновлений только, и первичный ключ не будет обновляться. Основная таблица обновится при обновлении представления.

CREATE SCHEMA `example` ;

CREATE TABLE `example`.`student` (
      `id` INT NOT NULL,
      `name` VARCHAR(45) NULL,
      `email` VARCHAR(45) NULL,
      PRIMARY KEY (`id`));

INSERT INTO `example`.`student` (`id`, `name`, `email`) VALUES ('1', 'bob', 'bob@bob.com');


USE `example`;
CREATE 
     OR REPLACE SQL SECURITY DEFINER
VIEW `student_1` AS
    SELECT 
        `student`.`id` AS `id`,
        `student`.`name` AS `name`,
        `student`.`email` AS `email`
    FROM
        `student`
    WHERE
        (`student`.`id` = '1');

CREATE USER 'student_1_user'@'localhost' IDENTIFIED BY 'user_password';

    GRANT SELECT,UPDATE ON example.student_1 TO student_1_user@localhost IDENTIFIED BY 'user_password';

UPDATE example.student_1 SET email='newemail@bob.com'; // note no primary key needed or allowed
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...