146 lines
8 KiB
Text
146 lines
8 KiB
Text
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;
|
|
|