代码之家  ›  专栏  ›  技术社区  ›  AbcAeffchen

缺少“insert[…]on duplicate key update”语句的特权,但足够分别用于“insert”和“update”

  •  1
  • AbcAeffchen  · 技术社区  · 6 年前

    我试图将数据库用户拥有的权限减少到所需的最低限度。我注意到以下情况:

    我有数据库 test user 拥有以下特权:

    REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'user'@'%';
    GRANT SELECT, INSERT ON test.test TO 'user'@'%';
    GRANT UPDATE (y) ON test.test TO 'user'@'%';
    

    这个 测试

    create table test
    (
        x int null,
        y int null
    );
    
    create unique index test_x_uindex on test (x);
    

    insert update

    INSERT INTO test (x,y) VALUES (1,1), (2,2);
    UPDATE test SET y = 3 WHERE x = 1;
    

    但是跑步

    INSERT INTO test (x,y) VALUES (2,4) ON DUPLICATE KEY UPDATE y = VALUES(y);
    

    错误1143(42000):表“test”中列“x”的更新命令被拒绝给用户“sap”@“localhost”

    older for MySQL (已关闭,但有人说实际上没有修复。我没有测试)。在 documentation of MySQL 8.0 提到更新特权只需要更改的列。这个 MariaDB documentation 没有提到任何特权要求。

    所有这些都在MariaDB 10.2.16上进行了测试。

    0 回复  |  直到 6 年前