Mysql

MySQL/MariaDB 使用者帳戶名中允許使用哪些字元?

  • October 15, 2018

我不清楚 MySQL/MariaDB 使用者帳戶名中可以出現哪些字元,哪些是非法的。我已閱讀 MySQL 文件中的第6.3.1 節“使用者名和密碼”。本節包括有關字元編碼和最大名稱長度的資訊,但它沒有說明可以在帳戶名稱中使用的字元是否受到限制(或者我可能錯過了那部分?)。

那麼,MySQL/MariaDB 中是否有不能用於使用者帳戶名的特殊字元?例如,控製字元(如換行符)或萬用字元(如星號)是非法字元嗎?

使用者名儲存在 mysql.user 表中。在我的系統(mariadb 10.3)上,該表被創建為具有 utf8 字元集的 CHAR(80)。您可以通過執行檢查您的:

MariaDB [(none)]> SHOW CREATE TABLE mysql.user\G
*************************** 1. row ***************************
      Table: user
Create Table: CREATE TABLE `user` (
 `Host` char(60) COLLATE utf8_bin NOT NULL DEFAULT '',
 `User` char(80) COLLATE utf8_bin NOT NULL DEFAULT '',

這意味著,對於我的版本,使用者名可以是 0 到 80 個字元,它們是有效的 utf8 字元串,但不能超出基本的多語言平面(只有 3 字節字元)。

所以控制和萬用字元是有效的,但例如,不是表情符號:

MariaDB [(none)]> CREATE USER 'a*b';
Query OK, 0 rows affected (0.001 sec)

MariaDB [(none)]> CREATE USER 'a
   '> b';
Query OK, 0 rows affected (0.001 sec)

MariaDB [(none)]> CREATE USER '💩';
ERROR 1470 (HY000): String '????' is too long for user name (should be no longer than 80)

MariaDB [(none)]> CREATE USER 'Robert\'); DROP TABLE Students;-- ';
Query OK, 0 rows affected (0.001 sec)

MariaDB [(none)]> SELECT user FROM mysql.user;
+----------------------------------+
| user                             |
+----------------------------------+
| Robert'); DROP TABLE Students;-- |
| a
b                              |
| a*b                              |
| root                             |
| root                             |
| root                             |
| root                             |
+----------------------------------+
7 rows in set (0.000 sec)

檢查系統中的類型,我想它可能會根據版本/供應商而改變,或者在未來/過去會有所不同。

引用自:https://dba.stackexchange.com/questions/209123