From 1cf2ecce6dda0efa3f5fbff375537a7143a5acb8 Mon Sep 17 00:00:00 2001 From: WangXiuqiang Date: Thu, 13 Apr 2023 10:52:06 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3user@host=E4=B8=AD=E5=BD=93?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E5=90=8D=E8=BF=87=E9=95=BF=E6=97=B6=E7=9A=84?= =?UTF-8?q?=E6=8A=A5=E9=94=99=E4=BF=A1=E6=81=AF=E4=B8=8Emysql=E6=8A=A5?= =?UTF-8?q?=E9=94=99=E4=BF=A1=E6=81=AF=E4=B8=8D=E4=B8=80=E8=87=B4=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/common/backend/parser/gram.y | 6 ++++++ src/test/regress/input/user_host_test.source | 3 +++ src/test/regress/output/user_host_test.source | 7 +++++++ 3 files changed, 16 insertions(+) diff --git a/src/common/backend/parser/gram.y b/src/common/backend/parser/gram.y index 96e954cd7..bc29e008b 100644 --- a/src/common/backend/parser/gram.y +++ b/src/common/backend/parser/gram.y @@ -1692,6 +1692,9 @@ UserId: ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("syntax error at or near \"%s\"", $1), parser_errposition(@1))); if (strchr($1,'@')) ereport(ERROR,(errcode(ERRCODE_INVALID_NAME),errmsg("@ can't be allowed in username"))); + if (strlen($1) >= NAMEDATALEN) { + ereport(ERROR,(errcode(ERRCODE_INVALID_NAME),errmsg("String %s is too long for user name (should be no longer than 64)", $1))); + } $$ = $1; } | RoleId SET_USER_IDENT @@ -31352,6 +31355,9 @@ static char* GetValidUserHostId(char* userName, char* hostId) appendStringInfoString(&buf, userName); appendStringInfoString(&buf, "@"); appendStringInfoString(&buf, userHostId); + if (strlen(buf.data) >= NAMEDATALEN) { + ereport(ERROR,(errcode(ERRCODE_INVALID_NAME),errmsg("String %s is too long for user name (should be no longer than 64)", buf.data))); + } return buf.data; } diff --git a/src/test/regress/input/user_host_test.source b/src/test/regress/input/user_host_test.source index 12699dddd..e966eef47 100644 --- a/src/test/regress/input/user_host_test.source +++ b/src/test/regress/input/user_host_test.source @@ -17,6 +17,9 @@ create user 'test_user_host'@'127.0.%' password 'test123@'; create user 'test_user_host%' password 'test123@'; create user 'test_user_host'@'127.0.0.1' password 'test123@'; set b_compatibility_user_host_auth = on; +CREATE USER 'sssssssssssssskkdcjhshfedrfbberfheurfhefhhdfjdfhkdfjshdfk vjhsdkfuhc'@'%' PASSWORD 'test123@'; +CREATE USER 'sssssssssssssskkdcjhshfedrfbberfheurfhefhhdfjdfhkdfjshdfk vjhsdkfuhc' PASSWORD 'test123@'; +CREATE USER sssssssssssssskkdcjhshfedrfbberfheurfhefhhdfjdfhkdfjshdfkvjhsdkfu@127.0.0.1 PASSWORD 'test123@'; CREATE USER 'da@localhost'@'%' PASSWORD 'test123@'; create user if not exists 'test_user_host'@'%' password 'test123@'; alter user 'test_user_host'@'%' with account lock; diff --git a/src/test/regress/output/user_host_test.source b/src/test/regress/output/user_host_test.source index a150e999c..fe89b8201 100644 --- a/src/test/regress/output/user_host_test.source +++ b/src/test/regress/output/user_host_test.source @@ -48,6 +48,13 @@ LINE 1: create user 'test_user_host%' password 'test123@'; create user 'test_user_host'@'127.0.0.1' password 'test123@'; ERROR: user@host is only supported in b database when the b_compatibility_user_host_auth is on set b_compatibility_user_host_auth = on; +CREATE USER 'sssssssssssssskkdcjhshfedrfbberfheurfhefhhdfjdfhkdfjshdfk vjhsdkfuhc'@'%' PASSWORD 'test123@'; +ERROR: String sssssssssssssskkdcjhshfedrfbberfheurfhefhhdfjdfhkdfjshdfk vjhsdkfuhc@% is too long for user name (should be no longer than 64) +CREATE USER 'sssssssssssssskkdcjhshfedrfbberfheurfhefhhdfjdfhkdfjshdfk vjhsdkfuhc' PASSWORD 'test123@'; +ERROR: String sssssssssssssskkdcjhshfedrfbberfheurfhefhhdfjdfhkdfjshdfk vjhsdkfuhc is too long for user name (should be no longer than 64) +CREATE USER sssssssssssssskkdcjhshfedrfbberfheurfhefhhdfjdfhkdfjshdfkvjhsdkfu@127.0.0.1 PASSWORD 'test123@'; +NOTICE: identifier "sssssssssssssskkdcjhshfedrfbberfheurfhefhhdfjdfhkdfjshdfkvjhsdkfu" will be truncated to "sssssssssssssskkdcjhshfedrfbberfheurfhefhhdfjdfhkdfjshdfkvjhsdk" +ERROR: String sssssssssssssskkdcjhshfedrfbberfheurfhefhhdfjdfhkdfjshdfkvjhsdk@127.0.0.1 is too long for user name (should be no longer than 64) CREATE USER 'da@localhost'@'%' PASSWORD 'test123@'; ERROR: @ can't be allowed in username create user if not exists 'test_user_host'@'%' password 'test123@';