mirror of
https://github.com/ansible-collections/community.mysql.git
synced 2025-07-22 12:50:24 -07:00
Fix column uppercasing (#569)
* Add integrations tests for column case sensitive name * add a warning when column_case_sensitive in not set * add announce default will change in in 4.0.0 * fix tests for engine that don't wrap column in backticks * add filter because only MySQL 5.7 is case sensitive for users privs * add kmarse and myself to the authors * add kmarse to the contributors list --------- Co-authored-by: Laurent Indermühle <laurent.indermuehle@epfl.ch> Co-authored-by: Andrew Klychkov <aklychko@redhat.com>
This commit is contained in:
parent
8c2b6b0b3c
commit
033b4c74f9
10 changed files with 389 additions and 8 deletions
|
@ -286,3 +286,7 @@
|
|||
- include_tasks: test_user_grants_with_roles_applied.yml
|
||||
|
||||
- include_tasks: test_revoke_only_grant.yml
|
||||
|
||||
- name: Mysql_user - test column case sensitive
|
||||
ansible.builtin.import_tasks:
|
||||
file: test_column_case_sensitive.yml
|
||||
|
|
|
@ -0,0 +1,134 @@
|
|||
---
|
||||
|
||||
- vars:
|
||||
mysql_parameters: &mysql_params
|
||||
login_user: '{{ mysql_user }}'
|
||||
login_password: '{{ mysql_password }}'
|
||||
login_host: '{{ mysql_host }}'
|
||||
login_port: '{{ mysql_primary_port }}'
|
||||
|
||||
block:
|
||||
|
||||
# ========================= Prepare =======================================
|
||||
# We use query to prevent our module of changing the case
|
||||
- name: Mysql_user Column case sensitive | Create a test table
|
||||
community.mysql.mysql_query:
|
||||
<<: *mysql_params
|
||||
query:
|
||||
- CREATE DATABASE mysql_user_column_case
|
||||
- >-
|
||||
CREATE TABLE mysql_user_column_case.t1
|
||||
(a int, B int, cC int, Dd int)
|
||||
- >-
|
||||
INSERT INTO mysql_user_column_case.t1
|
||||
(a, B, cC, Dd) VALUES (1,2,3,4)
|
||||
|
||||
# ================= Reproduce failure =====================================
|
||||
|
||||
- name: Mysql_user Column case sensitive | Create test user
|
||||
community.mysql.mysql_user:
|
||||
<<: *mysql_params
|
||||
name: column_case_sensitive
|
||||
host: '%'
|
||||
password: 'msandbox'
|
||||
priv:
|
||||
'mysql_user_column_case.t1': 'SELECT(a, B, cC, Dd)'
|
||||
|
||||
- name: Mysql_user Column case sensitive | Assert user privileges are all caps
|
||||
community.mysql.mysql_query:
|
||||
<<: *mysql_params
|
||||
query:
|
||||
- SHOW GRANTS FOR column_case_sensitive@'%'
|
||||
register: column_case_insensitive_grants
|
||||
failed_when:
|
||||
# Column order may vary, thus test each separately
|
||||
- >-
|
||||
column_case_insensitive_grants.query_result[0][1]
|
||||
is not search("A", ignorecase=false)
|
||||
or column_case_insensitive_grants.query_result[0][1]
|
||||
is not search("B", ignorecase=false)
|
||||
or column_case_insensitive_grants.query_result[0][1]
|
||||
is not search("CC", ignorecase=false)
|
||||
or column_case_insensitive_grants.query_result[0][1]
|
||||
is not search("DD", ignorecase=false)
|
||||
|
||||
- name: Mysql_user Column case sensitive | Assert 1 column is accessible on MySQL 5.7
|
||||
community.mysql.mysql_query:
|
||||
<<: *mysql_params
|
||||
login_user: column_case_sensitive
|
||||
query:
|
||||
- DESC mysql_user_column_case.t1
|
||||
register: assert_1_col_accessible
|
||||
failed_when:
|
||||
- assert_1_col_accessible.rowcount[0] | int != 1
|
||||
when:
|
||||
- db_engine == 'mysql' and db_version is version('5.7', '<=')
|
||||
|
||||
- name: Mysql_user Column case sensitive | Assert 4 column are accessible on MariaDB and MySQL 8+
|
||||
community.mysql.mysql_query:
|
||||
<<: *mysql_params
|
||||
login_user: column_case_sensitive
|
||||
query:
|
||||
- DESC mysql_user_column_case.t1
|
||||
register: assert_4_col_accessible
|
||||
failed_when:
|
||||
- assert_4_col_accessible.rowcount[0] | int != 4
|
||||
when:
|
||||
- >-
|
||||
db_engine == 'mariadb'
|
||||
or (db_engine == 'mysql' and db_version is version('8.0', '>='))
|
||||
|
||||
# ======================== Test fix ======================================
|
||||
|
||||
- name: Mysql_user Column case sensitive | Create users with case sensitive
|
||||
community.mysql.mysql_user:
|
||||
<<: *mysql_params
|
||||
name: column_case_sensitive
|
||||
host: '%'
|
||||
password: 'msandbox'
|
||||
priv:
|
||||
'mysql_user_column_case.t1': 'SELECT(a, B, cC, Dd)'
|
||||
column_case_sensitive: true
|
||||
|
||||
- name: Mysql_user Column case sensitive | Assert user privileges are case sensitive
|
||||
community.mysql.mysql_query:
|
||||
<<: *mysql_params
|
||||
query:
|
||||
- SHOW GRANTS FOR column_case_sensitive@'%'
|
||||
register: column_case_sensitive_grants
|
||||
failed_when:
|
||||
# Column order may vary, thus test each separately
|
||||
- >-
|
||||
column_case_sensitive_grants.query_result[0][1]
|
||||
is not search("a", ignorecase=false)
|
||||
or column_case_sensitive_grants.query_result[0][1]
|
||||
is not search("B", ignorecase=false)
|
||||
or column_case_sensitive_grants.query_result[0][1]
|
||||
is not search("cC", ignorecase=false)
|
||||
or column_case_sensitive_grants.query_result[0][1]
|
||||
is not search("Dd", ignorecase=false)
|
||||
|
||||
- name: Mysql_user Column case sensitive | Assert 4 columns are accessible
|
||||
community.mysql.mysql_query:
|
||||
<<: *mysql_params
|
||||
login_user: column_case_sensitive
|
||||
query:
|
||||
- DESC mysql_user_column_case.t1
|
||||
register: assert_4_col_accessible
|
||||
failed_when:
|
||||
- assert_4_col_accessible.rowcount[0] | int != 4
|
||||
|
||||
# ========================= Teardown ======================================
|
||||
|
||||
- name: Mysql_user Column case sensitive | Delete test users
|
||||
community.mysql.mysql_user:
|
||||
<<: *mysql_params
|
||||
name: column_case_sensitive
|
||||
host_all: true
|
||||
state: absent
|
||||
|
||||
- name: Mysql_user Column case sensitive | Delete test database
|
||||
community.mysql.mysql_db:
|
||||
<<: *mysql_params
|
||||
name: mysql_user_column_case
|
||||
state: absent
|
Loading…
Add table
Add a link
Reference in a new issue