File: user_comment.test

package info (click to toggle)
mysql-8.0 8.0.43-3
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 1,273,924 kB
  • sloc: cpp: 4,684,605; ansic: 412,450; pascal: 108,398; java: 83,641; perl: 30,221; cs: 27,067; sql: 26,594; sh: 24,181; python: 21,816; yacc: 17,169; php: 11,522; xml: 7,388; javascript: 7,076; makefile: 2,194; lex: 1,075; awk: 670; asm: 520; objc: 183; ruby: 97; lisp: 86
file content (146 lines) | stat: -rw-r--r-- 8,243 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
SET @org_partial_revokes= @@partial_revokes;
SET @org_sql_mode= @@sql_mode;
CREATE USER u1;
SHOW CREATE USER u1;
ALTER USER u1 COMMENT 'free form text';
SELECT user,user_attributes FROM mysql.user WHERE user='u1';
ALTER USER u1 COMMENT 'changed the free form text';
SELECT user,user_attributes FROM mysql.user WHERE user='u1';
ALTER USER u1 ATTRIBUTE '{"uid" : "34234"}';
SELECT user,user_attributes FROM mysql.user WHERE user='u1';
ALTER USER u1 ATTRIBUTE '{"speed" : "9000"}';
SELECT user,user_attributes FROM mysql.user WHERE user='u1';
ALTER USER u1 ATTRIBUTE '{"speed" : null }';
--echo # should not contain the speed attribute!
SELECT user,user_attributes FROM mysql.user WHERE user='u1';
--echo # Should be NULL
SELECT user_attributes->>"$.metadata.speed" FROM mysql.user WHERE user= 'u1';
CREATE USER foo@localhost IDENTIFIED BY 'foo' FAILED_LOGIN_ATTEMPTS 4 PASSWORD_LOCK_TIME 6;
ALTER USER foo@localhost COMMENT 'password lock time';
SELECT user_attributes->>"$.metadata" FROM mysql.user WHERE user='foo';
ALTER USER foo@localhost ATTRIBUTE '{"flag":"red"}';
--replace_regex /AS '(.*)' REQUIRE/AS '<non-deterministic-password-hash>' REQUIRE/
SHOW CREATE USER foo@localhost;
SELECT user_attributes FROM mysql.user WHERE user='foo';
ALTER USER foo@localhost ATTRIBUTE '{"flag":null}';
SELECT user_attributes FROM mysql.user WHERE user='foo';

ALTER USER foo@localhost COMMENT 'zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz';
SELECT user_attributes FROM mysql.user WHERE user= 'foo';
ALTER USER foo@localhost COMMENT 'xxx';
--error ER_INVALID_USER_ATTRIBUTE_JSON
ALTER USER foo@localhost ATTRIBUTE 'not a valid object';
--error ER_PARSE_ERROR
ALTER USER foo@localhost ATTRIBUTE NULL;
--error ER_PARSE_ERROR
ALTER USER foo@localhost ATTRIBUTE;
--error ER_PARSE_ERROR
ALTER USER foo@localhost COMMENT;
--error ER_CANNOT_USER
ALTER USER u4@sdasd ATTRIBUTE '{}';
--error ER_CANNOT_USER
ALTER USER fff@asdasd COMMENT '';
--error ER_PARSE_ERROR 
ALTER USER USER() COMMENT 'test';

CREATE USER foo2@localhost IDENTIFIED BY 'foo' COMMENT 'xxx';
--replace_regex /AS '(.*)' REQUIRE/AS '<non-deterministic-password-hash>' REQUIRE/ 
SHOW CREATE USER foo2@localhost;
SELECT user,user_attributes FROM mysql.user WHERE user='foo2';
CREATE USER foo3 PASSWORD EXPIRE DEFAULT COMMENT 'abc';
CREATE USER foo4 ACCOUNT LOCK ATTRIBUTE '{"stuff":"ffuts"}';
ALTER USER foo4 ACCOUNT UNLOCK ATTRIBUTE '{"stuff":"unlocked"}';
--replace_regex /AS '(.*)' REQUIRE/AS '<non-deterministic-password-hash>' REQUIRE/
SHOW CREATE USER foo4;
SELECT user,user_attributes FROM mysql.user WHERE user like 'foo%';

SELECT * FROM INFORMATION_SCHEMA.USER_ATTRIBUTES WHERE USER like 'foo%';
SELECT `attribute`->>"$.comment" FROM INFORMATION_SCHEMA.USER_ATTRIBUTES WHERE USER like 'foo%';

--echo # Verify that comments can be added along with other json-attributes
SET GLOBAL partial_revokes=ON;
GRANT SELECT ON *.* TO foo@localhost;
REVOKE SELECT ON mysql.* FROM foo@localhost;
SELECT user, user_attributes FROM mysql.user WHERE user='foo';
ALTER USER foo@localhost ATTRIBUTE '{"key":"value"}';
ALTER USER foo@localhost COMMENT 'Added key/value pair';
SELECT user,user_attributes FROM mysql.user WHERE user='foo';
GRANT SELECT ON mysql.* TO foo@localhost;
SELECT user,user_attributes FROM mysql.user WHERE user='foo';

CREATE USER redqueen@localhost IDENTIFIED BY 'shoo';
ALTER USER redqueen@localhost IDENTIFIED BY 'madness' RETAIN CURRENT PASSWORD;
SELECT user,char_length(user_attributes->>"$.additional_password") FROM mysql.user WHERE user='redqueen';
ALTER USER redqueen@localhost DISCARD OLD PASSWORD COMMENT 'Dropped old password';
SELECT user,char_length(user_attributes->>"$.additional_password") as length_password,user_attributes->>"$.metadata.comment" as comment FROM mysql.user WHERE user='redqueen';

SET GLOBAL partial_revokes=OFF;

DROP USER foo@localhost, u1, foo3, foo2@localhost, foo4, redqueen@localhost;

--echo **** NO_BACKSLASH_ESCAPES changes quoting of JSON
--echo +++++ NO_BACKSLASH_ESCAPES = OFF
CREATE USER u1 COMMENT 'Hello "Smith"';
let $result=`SHOW CREATE USER u1`;
DROP USER u1;
eval $result;
DROP USER u1;
--echo +++++ NO_BACKSLASH_ESCAPES = ON
CREATE USER u1 COMMENT 'Hello "Smith"';
SET @@sql_mode='NO_BACKSLASH_ESCAPES';
let $result=`SHOW CREATE USER u1`;
DROP USER u1;
eval $result;
DROP USER u1;
SET @@sql_mode = @org_sql_mode;

--echo *
--echo * Check privileges
--echo * 
CREATE USER u1@localhost IDENTIFIED BY 'foo' COMMENT 'Not permitted to change this';
GRANT SELECT ON *.* to u1@localhost;
connect(con1,localhost,u1,foo);
--error ER_SPECIFIC_ACCESS_DENIED_ERROR
ALTER USER u1@localhost COMMENT 'I comment what I want';
--error ER_SPECIFIC_ACCESS_DENIED_ERROR
ALTER USER u1@localhost ATTRIBUTE '{"key": "value"}';
connection default;
DROP USER u1@localhost;
disconnect con1;

--echo *
--echo * Partial revokes and user comments
--echo *
CREATE USER u1@localhost IDENTIFIED BY 'foo',u2@localhost IDENTIFIED BY 'foo' COMMENT "Works with partial restrictions";
GRANT CREATE USER,SELECT ON *.* TO u2@localhost;
GRANT INSERT, CREATE ON *.* TO u1@localhost;
SET GLOBAL partial_revokes=ON;
REVOKE INSERT ON mysql.* FROM u1@localhost;
SELECT user_attributes FROM mysql.user WHERE user='u1';
connect (con1, localhost, u2,foo);
ALTER USER CURRENT_USER() COMMENT 'test';
SELECT user_attributes->>"$.metadata.comment" FROM mysql.user WHERE user='u2';
ALTER USER CURRENT_USER() ATTRIBUTE '{ "comment" : null }';
--error ER_DBACCESS_DENIED_ERROR
REVOKE CREATE ON mysql.* FROM u1@localhost;
SHOW GRANTS FOR u1@localhost;
--echo #
--echo # Add a fake Restrictions key as a metadata attribute. This should have no effect
--echo # on the existing restrictions.
--echo #
ALTER USER u1@localhost ATTRIBUTE '{"Restrictions": [{"Database":"mysql","Privileges": [ "CREATE" ]}]}';
SHOW GRANTS FOR u1@localhost;
--echo # Above privilege should be REVOKE INSERT 
--echo # 
--echo # Below we should see both the fake Restrictions-key under the metadata key and 
--echo # the real Restrictions-key in the top of the hierarchy.
SELECT user_attributes FROM mysql.user WHERE user='u1';

DROP USER u1@localhost, u2@localhost;
connection default;
disconnect con1;

--error ER_INVALID_USER_ATTRIBUTE_JSON 
CREATE USER u1@localhost ATTRIBUTE "this is a string";
SET GLOBAL partial_revokes=@org_partial_revokes;