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

MySQL grant语句中的用户名区分大小写

  •  1
  • techfan  · 技术社区  · 2 年前

    我的印象是MySQL通常不区分大小写,尤其是在MS Windows中。在MySQL 8.0.34中,我运行了以下语句,最后一条语句出现错误。错误消息为“错误代码:1141。没有为主机“%”上的用户“USER1”定义这样的授予。一旦我将“USER1“更改为“USER1”,它就会工作。“在DB1.TABLE1上授予SELECT to USER1;“也不起作用。你能解释一下为什么吗?非常感谢。”。

    DROP SCHEMA IF EXISTS db1;
    CREATE SCHEMA db1;
    USE db1;
    CREATE TABLE Table1(
      productID INT primary key
    );
    DROP USER IF EXISTS user1;
    CREATE USER user1 IDENTIFIED BY 'password111';
    SHOW GRANTS FOR USER1;
    

    我的系统的字符集和排序规则分别为“utf8mb4”和“utf8mb4_0900_ai_ci”。

    1 回复  |  直到 2 年前
        1
  •  0
  •   Bill Karwin    2 年前

    https://dev.mysql.com/doc/refman/8.0/en/account-names.html

    出于访问检查的目的,用户值的比较区分大小写。Host值的比较不区分大小写。

    这个 mysql.user 表有一列 user ,将用户名存储在定义为使用二进制排序规则的列中。因此,它区分大小写。

    mysql> show create table mysql.user\G
    *************************** 1. row ***************************
           Table: user
    Create Table: CREATE TABLE `user` (
      ...
      `User` char(32) COLLATE utf8mb3_bin NOT NULL DEFAULT '',
      ...