diff --git a/server/modules/authenticator/MySQLAuth/dbusers.c b/server/modules/authenticator/MySQLAuth/dbusers.c index baa4893e8..8d614a049 100644 --- a/server/modules/authenticator/MySQLAuth/dbusers.c +++ b/server/modules/authenticator/MySQLAuth/dbusers.c @@ -61,12 +61,14 @@ const char* mariadb_102_users_query = " u.is_role, u.default_role" " FROM mysql.user AS u LEFT JOIN mysql.db AS d " " ON (u.user = d.user AND u.host = d.host) " + " WHERE u.plugin IN ('', 'mysql_native_password') " " UNION " " SELECT u.user, u.host, t.db, u.select_priv, " " IF(u.password <> '', u.password, u.authentication_string), " " u.is_role, u.default_role " " FROM mysql.user AS u LEFT JOIN mysql.tables_priv AS t " " ON (u.user = t.user AND u.host = t.host)" + " WHERE u.plugin IN ('', 'mysql_native_password') " "), users AS (" // Select the root row, the actual user " SELECT t.user, t.host, t.db, t.select_priv, t.password, t.default_role AS role FROM t" @@ -89,10 +91,12 @@ const char* mariadb_users_query = " SELECT u.user, u.host, d.db, u.select_priv, u.password AS password, u.is_role " " FROM mysql.user AS u LEFT JOIN mysql.db AS d " " ON (u.user = d.user AND u.host = d.host) " + " WHERE u.plugin IN ('', 'mysql_native_password') " " UNION " " SELECT u.user, u.host, t.db, u.select_priv, u.password AS password, u.is_role " " FROM mysql.user AS u LEFT JOIN mysql.tables_priv AS t " " ON (u.user = t.user AND u.host = t.host) " + " WHERE u.plugin IN ('', 'mysql_native_password') " ") AS t " // Discard any users that are roles "WHERE t.is_role <> 'Y' %s " @@ -103,10 +107,12 @@ const char* mariadb_users_query = " SELECT u.user, u.host, d.db, u.select_priv, u.password AS password, u.default_role " " FROM mysql.user AS u LEFT JOIN mysql.db AS d " " ON (u.user = d.user AND u.host = d.host) " + " WHERE u.plugin IN ('', 'mysql_native_password') " " UNION " " SELECT u.user, u.host, t.db, u.select_priv, u.password AS password, u.default_role " " FROM mysql.user AS u LEFT JOIN mysql.tables_priv AS t " " ON (u.user = t.user AND u.host = t.host) " + " WHERE u.plugin IN ('', 'mysql_native_password') " ") AS t " // Join it to the roles_mapping table to only have users with roles "JOIN mysql.roles_mapping AS r " @@ -117,10 +123,12 @@ const char* mariadb_users_query = " SELECT u.user, u.host, d.db, u.select_priv, u.password AS password, u.is_role " " FROM mysql.user AS u LEFT JOIN mysql.db AS d " " ON (u.user = d.user AND u.host = d.host) " + " WHERE u.plugin IN ('', 'mysql_native_password') " " UNION " " SELECT u.user, u.host, t.db, u.select_priv, u.password AS password, u.is_role " " FROM mysql.user AS u LEFT JOIN mysql.tables_priv AS t " " ON (u.user = t.user AND u.host = t.host) " + " WHERE u.plugin IN ('', 'mysql_native_password') " ") AS u " "ON (u.user = r.role AND u.is_role = 'Y') " // We only care about users that have a default role assigned