用户名存储在 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 '',
Run Code Online (Sandbox Code Playgroud)
这意味着,对于我的版本,用户名可以介于 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)
Run Code Online (Sandbox Code Playgroud)
检查系统中的类型,我想它可能会根据版本/供应商的不同而改变,或者在未来/过去会有所不同。
归档时间: |
|
查看次数: |
6448 次 |
最近记录: |