MXS-2494: Fix user loading queries for MariaDB 10.1+

The queries now properly check for the plugin.
This commit is contained in:
Markus Mäkelä
2019-05-16 10:41:04 +03:00
parent a3e9ce651f
commit 2cd4da32a7

View File

@ -61,12 +61,14 @@ const char* mariadb_102_users_query =
" u.is_role, u.default_role" " u.is_role, u.default_role"
" FROM mysql.user AS u LEFT JOIN mysql.db AS d " " FROM mysql.user AS u LEFT JOIN mysql.db AS d "
" ON (u.user = d.user AND u.host = d.host) " " ON (u.user = d.user AND u.host = d.host) "
" WHERE u.plugin IN ('', 'mysql_native_password') "
" UNION " " UNION "
" SELECT u.user, u.host, t.db, u.select_priv, " " SELECT u.user, u.host, t.db, u.select_priv, "
" IF(u.password <> '', u.password, u.authentication_string), " " IF(u.password <> '', u.password, u.authentication_string), "
" u.is_role, u.default_role " " u.is_role, u.default_role "
" FROM mysql.user AS u LEFT JOIN mysql.tables_priv AS t " " FROM mysql.user AS u LEFT JOIN mysql.tables_priv AS t "
" ON (u.user = t.user AND u.host = t.host)" " ON (u.user = t.user AND u.host = t.host)"
" WHERE u.plugin IN ('', 'mysql_native_password') "
"), users AS (" "), users AS ("
// Select the root row, the actual user // 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" " 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 " " 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 " " FROM mysql.user AS u LEFT JOIN mysql.db AS d "
" ON (u.user = d.user AND u.host = d.host) " " ON (u.user = d.user AND u.host = d.host) "
" WHERE u.plugin IN ('', 'mysql_native_password') "
" UNION " " UNION "
" SELECT u.user, u.host, t.db, u.select_priv, u.password AS password, u.is_role " " 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 " " FROM mysql.user AS u LEFT JOIN mysql.tables_priv AS t "
" ON (u.user = t.user AND u.host = t.host) " " ON (u.user = t.user AND u.host = t.host) "
" WHERE u.plugin IN ('', 'mysql_native_password') "
") AS t " ") AS t "
// Discard any users that are roles // Discard any users that are roles
"WHERE t.is_role <> 'Y' %s " "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 " " 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 " " FROM mysql.user AS u LEFT JOIN mysql.db AS d "
" ON (u.user = d.user AND u.host = d.host) " " ON (u.user = d.user AND u.host = d.host) "
" WHERE u.plugin IN ('', 'mysql_native_password') "
" UNION " " UNION "
" SELECT u.user, u.host, t.db, u.select_priv, u.password AS password, u.default_role " " 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 " " FROM mysql.user AS u LEFT JOIN mysql.tables_priv AS t "
" ON (u.user = t.user AND u.host = t.host) " " ON (u.user = t.user AND u.host = t.host) "
" WHERE u.plugin IN ('', 'mysql_native_password') "
") AS t " ") AS t "
// Join it to the roles_mapping table to only have users with roles // Join it to the roles_mapping table to only have users with roles
"JOIN mysql.roles_mapping AS r " "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 " " 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 " " FROM mysql.user AS u LEFT JOIN mysql.db AS d "
" ON (u.user = d.user AND u.host = d.host) " " ON (u.user = d.user AND u.host = d.host) "
" WHERE u.plugin IN ('', 'mysql_native_password') "
" UNION " " UNION "
" SELECT u.user, u.host, t.db, u.select_priv, u.password AS password, u.is_role " " 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 " " FROM mysql.user AS u LEFT JOIN mysql.tables_priv AS t "
" ON (u.user = t.user AND u.host = t.host) " " ON (u.user = t.user AND u.host = t.host) "
" WHERE u.plugin IN ('', 'mysql_native_password') "
") AS u " ") AS u "
"ON (u.user = r.role AND u.is_role = 'Y') " "ON (u.user = r.role AND u.is_role = 'Y') "
// We only care about users that have a default role assigned // We only care about users that have a default role assigned