Mysql
 sql >> Datenbank >  >> RDS >> Mysql

wie man MySQL-Privilegien nur für eine bestimmte Zeile gewährt

Nein, keine einzige Zeile aber eine Ansicht, die eine einzelne Zeile enthält, die wiederum die eigentliche reale Tabelle aktualisiert.

Dies kann über eine spezifische Tabellenansicht pro Schüler erfolgen (ja, es wird eine chaotische DB-Struktur sein). Gewähren Sie diesem Benutzer nur Zugriff auf die Ansicht, wenn Sie nur auswählen/aktualisieren, und der Primärschlüssel ist nicht aktualisierbar. Die Haupttabelle aktualisiert sich selbst, wenn die Ansicht aktualisiert wird.

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', '[email protected]');


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 [email protected] IDENTIFIED BY 'user_password';

UPDATE example.student_1 SET email='[email protected]'; // note no primary key needed or allowed