mirror of
https://github.com/MariaDB/server.git
synced 2025-01-29 02:05:57 +01:00
MDEV-21194: mariadb-install-db doesn't properly grant proxy privileges to all created user accounts
mariadb-install-db --auth-root-authentication-method=normal created 4 root accounts by default, but only two of these had PROXY privilege granted. mariadb-install-db (default option --auth-root-authentication-method=socket) as non-root user also didn't grant PROXY priv to the created nonroot@localhost user. To fix this, in mysql_system_tables_data.sql, we re-use tmp_user_nopasswd as this contains the list of all root users. REPLACE INTO tmp_proxies_priv SELECT @current_hostname, IFNULL(@auth_root_socket, 'root') creates the $user@$current_host but will not error if @auth_root_socket is null. Note @current_hostname lines are filtered out with --cross-bootstrap in mariadb-install-db so it was needed to include this expression for consistency. Like the existing mysql_system_tables.sql is used to create teh $user@localhost proxies_priv. Test cases roles.acl_statistics, perfschema,privilege_table_io depends on the number of proxy users. After: --auth-root-authentication-method=normal: MariaDB [mysql]> select * from global_priv; +-----------+-------------+--------------------------------------------------------------------------------------------------------------------------+ | Host | User | Priv | +-----------+-------------+--------------------------------------------------------------------------------------------------------------------------+ | localhost | mariadb.sys | {"access":0,"plugin":"mysql_native_password","authentication_string":"","account_locked":true,"password_last_changed":0} | | localhost | root | {"access":18446744073709551615} | | bark | root | {"access":18446744073709551615} | | 127.0.0.1 | root | {"access":18446744073709551615} | | ::1 | root | {"access":18446744073709551615} | | localhost | | {} | | bark | | {} | +-----------+-------------+--------------------------------------------------------------------------------------------------------------------------+ 7 rows in set (0.001 sec) MariaDB [mysql]> select * from proxies_priv; +-----------+------+--------------+--------------+------------+---------+---------------------+ | Host | User | Proxied_host | Proxied_user | With_grant | Grantor | Timestamp | +-----------+------+--------------+--------------+------------+---------+---------------------+ | localhost | root | | | 1 | | 2023-07-10 12:12:24 | | 127.0.0.1 | root | | | 1 | | 2023-07-10 12:12:24 | | ::1 | root | | | 1 | | 2023-07-10 12:12:24 | | bark | root | | | 1 | | 2023-07-10 12:12:24 | +-----------+------+--------------+--------------+------------+---------+---------------------+ --auth-root-authentication-method=socket: MariaDB [mysql]> select * from proxies_priv; +-----------+------+--------------+--------------+------------+---------+---------------------+ | Host | User | Proxied_host | Proxied_user | With_grant | Grantor | Timestamp | +-----------+------+--------------+--------------+------------+---------+---------------------+ | localhost | root | | | 1 | | 2023-07-10 12:11:55 | | localhost | dan | | | 1 | | 2023-07-10 12:11:55 | | bark | dan | | | 1 | | 2023-07-10 12:11:55 | +-----------+------+--------------+--------------+------------+---------+---------------------+ 3 rows in set (0.017 sec) MariaDB [mysql]> select * from global_priv; +-----------+-------------+--------------------------------------------------------------------------------------------------------------------------------------------+ | Host | User | Priv | +-----------+-------------+--------------------------------------------------------------------------------------------------------------------------------------------+ | localhost | mariadb.sys | {"access":0,"plugin":"mysql_native_password","authentication_string":"","account_locked":true,"password_last_changed":0} | | localhost | root | {"access":18446744073709551615,"plugin":"mysql_native_password","authentication_string":"invalid","auth_or":[{},{"plugin":"unix_socket"}]} | | localhost | dan | {"access":18446744073709551615,"plugin":"mysql_native_password","authentication_string":"invalid","auth_or":[{},{"plugin":"unix_socket"}]} | | localhost | | {} | | bark | | {} | +-----------+-------------+--------------------------------------------------------------------------------------------------------------------------------------------+ 5 rows in set (0.000 sec) MariaDB [mysql]> show grants; +----------------------------------------------------------------------------------------------------------------------------------------+ | Grants for dan@localhost | +----------------------------------------------------------------------------------------------------------------------------------------+ | GRANT ALL PRIVILEGES ON *.* TO `dan`@`localhost` IDENTIFIED VIA mysql_native_password USING 'invalid' OR unix_socket WITH GRANT OPTION | | GRANT PROXY ON ''@'%' TO 'dan'@'localhost' WITH GRANT OPTION | +----------------------------------------------------------------------------------------------------------------------------------------+
This commit is contained in:
parent
18990f0073
commit
8bbe3a3cd2
4 changed files with 10 additions and 7 deletions
|
@ -108,6 +108,8 @@ wait/io/table/sql/handler handler.cc: TABLE mysql db fetch NULL
|
|||
wait/io/table/sql/handler handler.cc: TABLE mysql proxies_priv fetch NULL
|
||||
wait/io/table/sql/handler handler.cc: TABLE mysql proxies_priv fetch NULL
|
||||
wait/io/table/sql/handler handler.cc: TABLE mysql proxies_priv fetch NULL
|
||||
wait/io/table/sql/handler handler.cc: TABLE mysql proxies_priv fetch NULL
|
||||
wait/io/table/sql/handler handler.cc: TABLE mysql proxies_priv fetch NULL
|
||||
wait/io/table/sql/handler handler.cc: TABLE mysql roles_mapping fetch NULL
|
||||
wait/io/table/sql/handler handler.cc: TABLE mysql tables_priv fetch NULL
|
||||
wait/io/table/sql/handler handler.cc: TABLE mysql tables_priv fetch NULL
|
||||
|
|
|
@ -6,7 +6,7 @@ Acl_function_grants 0
|
|||
Acl_procedure_grants 0
|
||||
Acl_package_spec_grants 0
|
||||
Acl_package_body_grants 0
|
||||
Acl_proxy_users 2
|
||||
Acl_proxy_users 4
|
||||
Acl_role_grants 0
|
||||
Acl_roles 0
|
||||
Acl_table_grants 1
|
||||
|
@ -25,7 +25,7 @@ PROCEDURE_GRANTS
|
|||
0
|
||||
SELECT count(*) PROXY_USERS from mysql.proxies_priv;
|
||||
PROXY_USERS
|
||||
2
|
||||
4
|
||||
SELECT count(*) ROLE_GRANTS from mysql.roles_mapping;
|
||||
ROLE_GRANTS
|
||||
0
|
||||
|
@ -71,7 +71,7 @@ Acl_function_grants 3
|
|||
Acl_procedure_grants 2
|
||||
Acl_package_spec_grants 0
|
||||
Acl_package_body_grants 0
|
||||
Acl_proxy_users 3
|
||||
Acl_proxy_users 5
|
||||
Acl_role_grants 4
|
||||
Acl_roles 2
|
||||
Acl_table_grants 3
|
||||
|
@ -90,7 +90,7 @@ PROCEDURE_GRANTS
|
|||
2
|
||||
SELECT count(*) PROXY_USERS from mysql.proxies_priv;
|
||||
PROXY_USERS
|
||||
3
|
||||
5
|
||||
SELECT count(*) ROLE_GRANTS from mysql.roles_mapping;
|
||||
ROLE_GRANTS
|
||||
4
|
||||
|
|
|
@ -303,6 +303,7 @@ set @had_proxies_priv_table= @@warning_count != 0;
|
|||
-- and for upgrades
|
||||
CREATE TEMPORARY TABLE tmp_proxies_priv LIKE proxies_priv;
|
||||
INSERT INTO tmp_proxies_priv VALUES ('localhost', 'root', '', '', TRUE, '', now());
|
||||
REPLACE INTO tmp_proxies_priv SELECT 'localhost',IFNULL(@auth_root_socket, 'root'), '', '', TRUE, '', now() FROM DUAL;
|
||||
INSERT INTO proxies_priv SELECT * FROM tmp_proxies_priv WHERE @had_proxies_priv_table=0;
|
||||
DROP TABLE tmp_proxies_priv;
|
||||
|
||||
|
|
|
@ -47,9 +47,9 @@ IF @auth_root_socket is not null THEN
|
|||
|
||||
INSERT INTO global_priv SELECT * FROM tmp_user_nopasswd WHERE @had_user_table=0 AND @auth_root_socket IS NULL;
|
||||
INSERT INTO global_priv SELECT * FROM tmp_user_socket WHERE @had_user_table=0 AND @auth_root_socket IS NOT NULL;
|
||||
DROP TABLE tmp_user_nopasswd, tmp_user_socket;
|
||||
|
||||
CREATE TEMPORARY TABLE tmp_proxies_priv LIKE proxies_priv;
|
||||
INSERT INTO tmp_proxies_priv SELECT @current_hostname, 'root', '', '', TRUE, '', now() FROM DUAL WHERE @current_hostname != 'localhost';
|
||||
INSERT INTO tmp_proxies_priv SELECT Host, User, '', '', TRUE, '', now() FROM tmp_user_nopasswd WHERE Host != 'localhost' AND @auth_root_socket IS NULL;
|
||||
REPLACE INTO tmp_proxies_priv SELECT @current_hostname, IFNULL(@auth_root_socket, 'root'), '', '', TRUE, '', now() FROM DUAL WHERE @current_hostname != 'localhost';
|
||||
INSERT INTO proxies_priv SELECT * FROM tmp_proxies_priv WHERE @had_proxies_priv_table=0;
|
||||
DROP TABLE tmp_proxies_priv;
|
||||
DROP TABLE tmp_user_nopasswd, tmp_user_socket, tmp_proxies_priv;
|
||||
|
|
Loading…
Add table
Reference in a new issue