Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
232 changes: 232 additions & 0 deletions mysql-test/main/grant_cidr.result
Original file line number Diff line number Diff line change
@@ -0,0 +1,232 @@
# Valid CIDR prefixes
CREATE USER c01@'127.0.0.0/8' IDENTIFIED BY 'p';
CREATE USER c02@'127.0.0.0/24' IDENTIFIED BY 'p';
CREATE USER c03@'127.0.0.1/32' IDENTIFIED BY 'p';
CREATE USER c18@'127.0.0.0/31' IDENTIFIED BY 'p';
CREATE USER c19@'127.0.0.0/30' IDENTIFIED BY 'p';
CREATE USER c06@'0.0.0.0/1' IDENTIFIED BY 'p';
connect con1,127.0.0.1,c01,p,,$MASTER_MYPORT,;
connection con1;
SELECT CURRENT_USER();
CURRENT_USER()
c01@127.0.0.0/8
disconnect con1;
connection default;
connect con1,127.0.0.1,c02,p,,$MASTER_MYPORT,;
connection con1;
SELECT CURRENT_USER();
CURRENT_USER()
c02@127.0.0.0/24
disconnect con1;
connection default;
connect con1,127.0.0.1,c03,p,,$MASTER_MYPORT,;
connection con1;
SELECT CURRENT_USER();
CURRENT_USER()
c03@127.0.0.1/32
disconnect con1;
connection default;
connect con1,127.0.0.1,c18,p,,$MASTER_MYPORT,;
connection con1;
SELECT CURRENT_USER();
CURRENT_USER()
c18@127.0.0.0/31
disconnect con1;
connection default;
connect con1,127.0.0.1,c19,p,,$MASTER_MYPORT,;
connection con1;
SELECT CURRENT_USER();
CURRENT_USER()
c19@127.0.0.0/30
disconnect con1;
connection default;
connect con1,127.0.0.1,c06,p,,$MASTER_MYPORT,;
connection con1;
SELECT CURRENT_USER();
CURRENT_USER()
c06@0.0.0.0/1
disconnect con1;
connection default;
# Malformed masks are rejected at CREATE USER.
CREATE USER c08@'127.0.0.0/0' IDENTIFIED BY 'p';
ERROR HY000: Invalid masked host '127.0.0.0/0' for user 'c08'
CREATE USER c09@'127.0.0.1/0' IDENTIFIED BY 'p';
ERROR HY000: Invalid masked host '127.0.0.1/0' for user 'c09'
CREATE USER c10@'127.0.0.0/33' IDENTIFIED BY 'p';
ERROR HY000: Invalid masked host '127.0.0.0/33' for user 'c10'
CREATE USER c11@'127.0.0.0/-1' IDENTIFIED BY 'p';
ERROR HY000: Invalid masked host '127.0.0.0/-1' for user 'c11'
CREATE USER c12@'127.0.0.0/abc' IDENTIFIED BY 'p';
ERROR HY000: Invalid masked host '127.0.0.0/abc' for user 'c12'
CREATE USER c13@'127.0.0.0/' IDENTIFIED BY 'p';
ERROR HY000: Invalid masked host '127.0.0.0/' for user 'c13'
CREATE USER c14@'127.0.0.0/24x' IDENTIFIED BY 'p';
ERROR HY000: Invalid masked host '127.0.0.0/24x' for user 'c14'
# CIDR == netmask parity
CREATE USER n01@'127.0.0.0/255.0.0.0' IDENTIFIED BY 'p';
CREATE USER n02@'127.0.0.0/255.255.255.0' IDENTIFIED BY 'p';
CREATE USER n03@'127.0.0.1/255.255.255.255' IDENTIFIED BY 'p';
CREATE USER n04@'127.0.0.0/255.255.255.255' IDENTIFIED BY 'p';
CREATE USER n05@'127.0.0.0/0.0.0.0' IDENTIFIED BY 'p';
ERROR HY000: Invalid masked host '127.0.0.0/0.0.0.0' for user 'n05'
CREATE USER c04@'127.0.0.0/32' IDENTIFIED BY 'p';
connect con1,127.0.0.1,n01,p,,$MASTER_MYPORT,;
connection con1;
SELECT CURRENT_USER();
CURRENT_USER()
n01@127.0.0.0/255.0.0.0
disconnect con1;
connection default;
connect con1,127.0.0.1,n02,p,,$MASTER_MYPORT,;
connection con1;
SELECT CURRENT_USER();
CURRENT_USER()
n02@127.0.0.0/255.255.255.0
disconnect con1;
connection default;
connect con1,127.0.0.1,n03,p,,$MASTER_MYPORT,;
connection con1;
SELECT CURRENT_USER();
CURRENT_USER()
n03@127.0.0.1/255.255.255.255
disconnect con1;
connection default;
connect(127.0.0.1,n04,p,test,MASTER_PORT,MASTER_SOCKET);
connect con1,127.0.0.1,n04,p,,$MASTER_MYPORT,;
ERROR 28000: Access denied for user 'n04'@'localhost' (using password: YES)
connect(127.0.0.1,c04,p,test,MASTER_PORT,MASTER_SOCKET);
connect con1,127.0.0.1,c04,p,,$MASTER_MYPORT,;
ERROR 28000: Access denied for user 'c04'@'localhost' (using password: YES)
# The address must be the network address (no host bits set).
CREATE USER c05@'127.0.0.0/1' IDENTIFIED BY 'p';
ERROR HY000: Invalid masked host '127.0.0.0/1' for user 'c05'
CREATE USER c07@'127.0.0.1/24' IDENTIFIED BY 'p';
ERROR HY000: Invalid masked host '127.0.0.1/24' for user 'c07'
CREATE USER n07@'127.0.0.1/255.255.255.0' IDENTIFIED BY 'p';
ERROR HY000: Invalid masked host '127.0.0.1/255.255.255.0' for user 'n07'
# host specificity ordering
CREATE USER ord1@'127.0.0.0/8' IDENTIFIED BY 'p';
CREATE USER ord1@'127.0.0.0/24' IDENTIFIED BY 'p';
CREATE USER ord2@'127.0.0.0/8' IDENTIFIED BY 'p';
CREATE USER ord2@'127.0.0.0/16' IDENTIFIED BY 'p';
CREATE USER ord3@'127.0.0.0/9' IDENTIFIED BY 'p';
CREATE USER ord3@'127.0.0.1/32' IDENTIFIED BY 'p';
CREATE USER ord4@'127.0.0.0/255.255.255.0' IDENTIFIED BY 'p';
CREATE USER ord4@'127.0.0.0/8' IDENTIFIED BY 'p';
CREATE USER ord5@'127.0.0.0/255.0.0.0' IDENTIFIED BY 'p';
CREATE USER ord5@'127.0.0.0/24' IDENTIFIED BY 'p';
connect con1,127.0.0.1,ord1,p,,$MASTER_MYPORT,;
connection con1;
SELECT CURRENT_USER();
CURRENT_USER()
ord1@127.0.0.0/24
disconnect con1;
connection default;
connect con1,127.0.0.1,ord2,p,,$MASTER_MYPORT,;
connection con1;
SELECT CURRENT_USER();
CURRENT_USER()
ord2@127.0.0.0/16
disconnect con1;
connection default;
connect con1,127.0.0.1,ord3,p,,$MASTER_MYPORT,;
connection con1;
SELECT CURRENT_USER();
CURRENT_USER()
ord3@127.0.0.1/32
disconnect con1;
connection default;
connect con1,127.0.0.1,ord4,p,,$MASTER_MYPORT,;
connection con1;
SELECT CURRENT_USER();
CURRENT_USER()
ord4@127.0.0.0/255.255.255.0
disconnect con1;
connection default;
connect con1,127.0.0.1,ord5,p,,$MASTER_MYPORT,;
connection con1;
SELECT CURRENT_USER();
CURRENT_USER()
ord5@127.0.0.0/24
disconnect con1;
connection default;
# Non-contiguous masks, IPv6 prefixes and wildcards with '/' are rejected
CREATE USER x@'10.0.0.0/255.0.255.0';
ERROR HY000: Invalid masked host '10.0.0.0/255.0.255.0' for user 'x'
CREATE USER x@'2001:db8::/32';
ERROR HY000: Invalid masked host '2001:db8::/32' for user 'x'
CREATE USER x@'10.0.0.%/24';
ERROR HY000: Invalid masked host '10.0.0.%/24' for user 'x'
# GRANT must not auto-create an account with an invalid mask
GRANT SELECT ON test.* TO g1@'10.0.0.0/33' IDENTIFIED BY 'p';
ERROR HY000: Invalid masked host '10.0.0.0/33' for user 'g1'
GRANT SELECT ON test.* TO g1@'10.0.0.0/24' IDENTIFIED BY 'p';
DROP USER g1@'10.0.0.0/24';
# Hosts without '/' are never validated
CREATE USER w1@'%', w2@'10.0.0.%', w3@'127.0.0._', w4@'localhost', w5@'127.0.0.1', w6@'::1';
DROP USER w1@'%', w2@'10.0.0.%', w3@'127.0.0._', w4@'localhost', w5@'127.0.0.1', w6@'::1';
# The mask check is only reached when a row is about to be created,
# so ALTER USER and REVOKE keep their own errors
ALTER USER a1@'10.0.0.0/33' IDENTIFIED BY 'p';
ERROR HY000: Operation ALTER USER failed for 'a1'@'10.0.0.0/33'
REVOKE SELECT ON test.* FROM a1@'10.0.0.0/33';
ERROR 42000: There is no such grant defined for user 'a1' on host '10.0.0.0/33'
# RENAME USER validates the target host only
CREATE USER r1@'127.0.0.0/8' IDENTIFIED BY 'p';
RENAME USER r1@'127.0.0.0/8' TO r1@'10.1.2.3/24';
ERROR HY000: Operation RENAME USER failed for 'r1'@'10.1.2.3/24'
RENAME USER r1@'127.0.0.0/8' TO r1@'10.0.0.0/16';
DROP USER r1@'10.0.0.0/16';
# A pre-existing malformed row still loads, and stays usable for
# REVOKE, RENAME and DROP - acl_load() is deliberately lenient
CREATE USER leg@'10.0.0.0/24' IDENTIFIED BY 'p';
UPDATE mysql.global_priv SET Host='10.0.0.0/33' WHERE User='leg';
FLUSH PRIVILEGES;
RENAME USER leg@'10.0.0.0/33' TO leg@'10.0.0.0/16';
DROP USER leg@'10.0.0.0/16';
# Host strings are stored verbatim - neither spelling is normalised
SHOW GRANTS FOR c02@'127.0.0.0/24';
Grants for c02@127.0.0.0/24
GRANT USAGE ON *.* TO `c02`@`127.0.0.0/24` IDENTIFIED BY PASSWORD '*7B9EBEED26AA52ED10C0F549FA863F13C39E0209'
SHOW CREATE USER n02@'127.0.0.0/255.255.255.0';
CREATE USER for n02@127.0.0.0/255.255.255.0
CREATE USER `n02`@`127.0.0.0/255.255.255.0` IDENTIFIED BY PASSWORD '*7B9EBEED26AA52ED10C0F549FA863F13C39E0209'
# Matching and ordering survive a reload through acl_load()
FLUSH PRIVILEGES;
connect con1,127.0.0.1,c02,p,,$MASTER_MYPORT,;
connection con1;
SELECT CURRENT_USER();
CURRENT_USER()
c02@127.0.0.0/24
disconnect con1;
connection default;
connect con1,127.0.0.1,ord1,p,,$MASTER_MYPORT,;
connection con1;
SELECT CURRENT_USER();
CURRENT_USER()
ord1@127.0.0.0/24
disconnect con1;
connection default;
# Cleanup
DROP USER
c01@'127.0.0.0/8',
c02@'127.0.0.0/24',
c03@'127.0.0.1/32',
c04@'127.0.0.0/32',
c06@'0.0.0.0/1',
c18@'127.0.0.0/31',
c19@'127.0.0.0/30',
n01@'127.0.0.0/255.0.0.0',
n02@'127.0.0.0/255.255.255.0',
n03@'127.0.0.1/255.255.255.255',
n04@'127.0.0.0/255.255.255.255',
ord1@'127.0.0.0/8',
ord1@'127.0.0.0/24',
ord2@'127.0.0.0/8',
ord2@'127.0.0.0/16',
ord3@'127.0.0.0/9',
ord3@'127.0.0.1/32',
ord4@'127.0.0.0/255.255.255.0',
ord4@'127.0.0.0/8',
ord5@'127.0.0.0/255.0.0.0',
ord5@'127.0.0.0/24';
Loading