Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PUBLIC-role breaks mysql-hardening #648

Closed
rndmh3ro opened this issue Mar 7, 2023 · 1 comment
Closed

PUBLIC-role breaks mysql-hardening #648

rndmh3ro opened this issue Mar 7, 2023 · 1 comment
Labels

Comments

@rndmh3ro
Copy link
Member

rndmh3ro commented Mar 7, 2023

Description

There's a new feature in mariadb 10.1 (https://mariadb.org/grant-to-public-in-mariadb/) and mysql 8 (need to verify).

MariaDB has quite a complex privilege system. Most of it is based on the SQL Standard spec; however we do have some specific MariaDB extensions. GRANT ... TO PUBLIC (MDEV-5215) is a standard feature that is now available as a preview in MariaDB 10.11.0. It is related to ROLES and DEFAULT ROLE, but it covers a different use case.

ROLES are effectively “privilege packages” that you can enable and disable as a user. One can also set which “privilege package” will be enabled at connect time by setting a DEFAULT ROLE per user. This is all quite useful, however it is missing one key feature. For a DBA, it would be quite useful to state only once that all users need to have a certain set of privileges. This is where GRANT ... TO PUBLIC comes in.

Some more information here: https://mariadb.org/wp-content/uploads/2018/07/MariaDB-Roles-Tampere-Unconference-2018.pdf

This role is shown as a user, it has however a new is_role-flag.

MariaDB [(none)]> select user, host, is_role from mysql.user;
+-----------------------+-----------+---------+
| User                  | Host      | is_role |
+-----------------------+-----------+---------+
| mariadb.sys           | localhost | N       |
| root                  | localhost | N       |
| mysql                 | localhost | N       |
| PUBLIC                |           | Y       |
| monitoring            | %         | N       |
| monitoring            | localhost | N       |
| galera_mariadb_backup | %         | N       |
+-----------------------+-----------+---------+

Since this "user" does not have a password or authentication_string, the ansible-role tries to delete it but fails.

Reproduction steps

run role against mariadb 10.11.

Current Behavior

Cannot execute SQL 'DROP USER 'PUBLIC'@''' args [None]: (1396, \"Operation DROP USER failed for 'PUBLIC'@'%'\")"}

Expected Behavior

The role does not fail

OS / Environment

centos 8 with mariadb 10.11.2

Ansible Version

-

Collection Version

-

Additional information

...

@rndmh3ro rndmh3ro added the bug label Mar 7, 2023
@rndmh3ro
Copy link
Member Author

fixed by #649

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant