# Connection delay tests for valid user accounts
# ----------------------------------------------------------------------
# Setup
# Install connection_control plugin
INSTALL PLUGIN connection_control SONAME 'CONNECTION_CONTROL_LIB';
INSTALL PLUGIN connection_control_failed_login_attempts SONAME 'CONNECTION_CONTROL_LIB';
# Create user accounts for testing
CREATE USER u1@localhost IDENTIFIED BY 'abcd';
CREATE USER u2@localhost IDENTIFIED BY 'abcd';
CREATE USER u3@localhost IDENTIFIED BY 'abcd';
# Save original values of connection_control variables
SET @saved_connections_threshold = @@global.connection_control_failed_connections_threshold;
# Avoid triggering delay
SET @@global.connection_control_failed_connections_threshold = 100;
# ----------------------------------------------------------------------
connect(localhost,u1,,test,MASTER_PORT,MASTER_SOCKET);
ERROR 28000: Access denied for user 'u1'@'localhost' (using password: NO)
connect(localhost,u1,haha,test,MASTER_PORT,MASTER_SOCKET);
ERROR 28000: Access denied for user 'u1'@'localhost' (using password: YES)
connect(localhost,u2,efgh,test,MASTER_PORT,MASTER_SOCKET);
ERROR 28000: Access denied for user 'u2'@'localhost' (using password: YES)
# connection_control_failed_login_attempts should contain entries
# for u1@localhost and u2@localhost
SELECT * FROM INFORMATION_SCHEMA.connection_control_failed_login_attempts;
USERHOST FAILED_ATTEMPTS
'u1'@'localhost' 2
'u2'@'localhost' 1
connect(localhost,u3,,test,MASTER_PORT,MASTER_SOCKET);
ERROR 28000: Access denied for user 'u3'@'localhost' (using password: NO)
connect(localhost,u2,haha,test,MASTER_PORT,MASTER_SOCKET);
ERROR 28000: Access denied for user 'u2'@'localhost' (using password: YES)
connect(localhost,u3,efgh,test,MASTER_PORT,MASTER_SOCKET);
ERROR 28000: Access denied for user 'u3'@'localhost' (using password: YES)
# connection_control_failed_login_attempts should contain entries
# for u1@localhost, u2@localhost and u3@localhost
SELECT * FROM INFORMATION_SCHEMA.connection_control_failed_login_attempts;
USERHOST FAILED_ATTEMPTS
'u1'@'localhost' 2
'u2'@'localhost' 2
'u3'@'localhost' 2
connect(localhost,u2,,test,MASTER_PORT,MASTER_SOCKET);
ERROR 28000: Access denied for user 'u2'@'localhost' (using password: NO)
connect(localhost,u1,haha,test,MASTER_PORT,MASTER_SOCKET);
ERROR 28000: Access denied for user 'u1'@'localhost' (using password: YES)
connect(localhost,u3,efgh,test,MASTER_PORT,MASTER_SOCKET);
ERROR 28000: Access denied for user 'u3'@'localhost' (using password: YES)
# failed connection counts should have increased for all users
SELECT * FROM INFORMATION_SCHEMA.connection_control_failed_login_attempts;
USERHOST FAILED_ATTEMPTS
'u1'@'localhost' 3
'u2'@'localhost' 3
'u3'@'localhost' 3
connect(localhost,u2,,test,MASTER_PORT,MASTER_SOCKET);
ERROR 28000: Access denied for user 'u2'@'localhost' (using password: NO)
connect(localhost,u1,haha,test,MASTER_PORT,MASTER_SOCKET);
ERROR 28000: Access denied for user 'u1'@'localhost' (using password: YES)
connect(localhost,u3,efgh,test,MASTER_PORT,MASTER_SOCKET);
ERROR 28000: Access denied for user 'u3'@'localhost' (using password: YES)
connect(localhost,u1,haha,test,MASTER_PORT,MASTER_SOCKET);
ERROR 28000: Access denied for user 'u1'@'localhost' (using password: YES)
connect(localhost,u3,efgh,test,MASTER_PORT,MASTER_SOCKET);
ERROR 28000: Access denied for user 'u3'@'localhost' (using password: YES)
connect(localhost,u1,haha,test,MASTER_PORT,MASTER_SOCKET);
ERROR 28000: Access denied for user 'u1'@'localhost' (using password: YES)
# Try various queries
SELECT * FROM INFORMATION_SCHEMA.connection_control_failed_login_attempts
WHERE USERHOST = '\'u1\'@\'localhost\'';
USERHOST FAILED_ATTEMPTS
'u1'@'localhost' 6
SELECT * FROM INFORMATION_SCHEMA.connection_control_failed_login_attempts
WHERE USERHOST LIKE '%u2%';
USERHOST FAILED_ATTEMPTS
'u2'@'localhost' 4
SELECT * FROM INFORMATION_SCHEMA.connection_control_failed_login_attempts
WHERE FAILED_ATTEMPTS > 4;
USERHOST FAILED_ATTEMPTS
'u1'@'localhost' 6
'u3'@'localhost' 5
SELECT * FROM INFORMATION_SCHEMA.connection_control_failed_login_attempts
WHERE FAILED_ATTEMPTS > 5;
USERHOST FAILED_ATTEMPTS
'u1'@'localhost' 6
SELECT * FROM INFORMATION_SCHEMA.connection_control_failed_login_attempts
WHERE FAILED_ATTEMPTS < 5;
USERHOST FAILED_ATTEMPTS
'u2'@'localhost' 4
# After successful login, corresponding entry should disappear
# from the view
SELECT * FROM INFORMATION_SCHEMA.connection_control_failed_login_attempts;
USERHOST FAILED_ATTEMPTS
'u3'@'localhost' 5
# A user without privileges should not be able to any information
SELECT * FROM INFORMATION_SCHEMA.connection_control_failed_login_attempts;
USERHOST FAILED_ATTEMPTS
connect(localhost,u1,,test,MASTER_PORT,MASTER_SOCKET);
ERROR 28000: Access denied for user 'u1'@'localhost' (using password: NO)
connect(localhost,u3,haha,test,MASTER_PORT,MASTER_SOCKET);
ERROR 28000: Access denied for user 'u3'@'localhost' (using password: YES)
connect(localhost,u2,efgh,test,MASTER_PORT,MASTER_SOCKET);
ERROR 28000: Access denied for user 'u2'@'localhost' (using password: YES)
# Subsequent failed attempts should put entries back in the view
SELECT * FROM INFORMATION_SCHEMA.connection_control_failed_login_attempts;
USERHOST FAILED_ATTEMPTS
'u1'@'localhost' 1
'u2'@'localhost' 1
'u3'@'localhost' 1
connect(localhost,u4,,test,MASTER_PORT,MASTER_SOCKET);
ERROR 28000: Access denied for user 'u4'@'localhost' (using password: NO)
connect(localhost,u5,haha,test,MASTER_PORT,MASTER_SOCKET);
ERROR 28000: Access denied for user 'u5'@'localhost' (using password: YES)
connect(localhost,u6,efgh,test,MASTER_PORT,MASTER_SOCKET);
ERROR 28000: Access denied for user 'u6'@'localhost' (using password: YES)
# Attempts by invalid accounts should be shown in the view
SELECT * FROM INFORMATION_SCHEMA.connection_control_failed_login_attempts;
USERHOST FAILED_ATTEMPTS
'u1'@'localhost' 1
'u2'@'localhost' 1
'u3'@'localhost' 1
'u4'@'localhost' 1
'u5'@'localhost' 1
'u6'@'localhost' 1
# ----------------------------------------------------------------------
# Cleanup
# Restore original values of conenction_control variables
SET @@global.connection_control_failed_connections_threshold = @saved_connections_threshold;
# Remove user accounts created for the test
DROP USER u1@localhost;
DROP USER u2@localhost;
DROP USER u3@localhost;
# Uninstall connection_control plugin
UNINSTALL PLUGIN connection_control;
UNINSTALL PLUGIN connection_control_failed_login_attempts;
# ----------------------------------------------------------------------