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

为什么此INSERT语句需要SELECT授权?

  •  2
  • Thanatos  · 技术社区  · 7 年前

    INSERT INTO a_table
        (file_hash, p, c)
    VALUES
        (%(hash)s, %(p)s, %(c)s)
    ON DUPLICATE KEY UPDATE
        p = %(p)s,
        c = %(c)s
    ;
    

    使用这些参数,尽管我屏蔽了这些值:

    [parameters: {'hash': -, 'p': -, 'c': -}]
    

    MySQL给了我以下错误:

    SELECT command denied to user 'our_user'@'10.1.1.2' for column 'p' in table 'a_table'"
    

    为什么?

    这个 SELECT 其他读取列值的语句也需要特权。例如, 选择 中col_name=expr赋值右侧引用的列需要 UPDATE

    但我们不是指那个专栏( p 在任何地方 在这里我可以看到。)

    架构:

    CREATE TABLE `a_table` (
      `file_hash` binary(16) NOT NULL,
      `p` tinyint(4) DEFAULT NULL,
      `c` smallint(6) DEFAULT NULL,
      PRIMARY KEY (`file_hash`),
      KEY `idx_p` (`p`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1
    

    (编辑:在我的实时环境之外复制它也有一些困难;这发生在一个AWS MySQL Aurora实例上。)

    0 回复  |  直到 7 年前