Mysql
MySQL/MariaDB 使用者帳戶名中允許使用哪些字元?
我不清楚 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)
檢查系統中的類型,我想它可能會根據版本/供應商而改變,或者在未來/過去會有所不同。