-
-
Notifications
You must be signed in to change notification settings - Fork 888
Issue #223: Generate a random default root password #465
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
base: master
Are you sure you want to change the base?
Changes from 3 commits
5de72c8
daaea32
254fdf1
055e6e1
cf4d144
b6a2c40
9e251a0
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -36,38 +36,56 @@ | |
| check_mode: false | ||
| when: mysql_install_packages | bool or mysql_root_password_update | ||
|
|
||
| - name: Set the .my.cnf file path. | ||
| set_fact: | ||
| mysql_root_cnf_path: "{{ mysql_root_home }}/.my.cnf" | ||
|
|
||
| - name: Copy .my.cnf file with root password credentials. | ||
| template: | ||
|
Owner
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. In terms of backwards compatibility, could this break that for existing installs?
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. What I think you're mostly concerned about here, and rightly so, is if there's a password already there (for example, the old default one). I tested that by changing it (and leaving the rest of the file alone). Both <5.7 and 5.7+ were skipped so we're all good there. |
||
| src: "root-my.cnf.j2" | ||
| dest: "{{ mysql_root_cnf_path }}" | ||
| owner: root | ||
| group: root | ||
| mode: 0600 | ||
| when: mysql_install_packages | bool or mysql_root_password_update | ||
| register: mysql_root_password_setting | ||
|
|
||
| - name: Fetch the .my.cnf file containing the root password | ||
| slurp: | ||
| src: "{{ mysql_root_cnf_path }}" | ||
| register: mysql_root_cnf_file | ||
|
|
||
| # It would be cleaner to use the `ini` lookup plugin, but that only works | ||
| # locally so we'd have to copy the file first, which we'd rather not do because | ||
| # it contains secrets. | ||
| - name: Extract the root password from .my.cnf | ||
| set_fact: | ||
| mysql_root_password_generated: "{{ mysql_root_cnf_file['content'] | b64decode | regex_findall('password=\"(.+)\"') | first }}" | ||
|
|
||
| # Note: We do not use mysql_user for this operation, as it doesn't always update | ||
| # the root password correctly. See: https://goo.gl/MSOejW | ||
| # Set root password for MySQL >= 5.7.x. | ||
| - name: Update MySQL root password for localhost root account (5.7.x). | ||
| shell: > | ||
| mysql -u root -NBe | ||
| 'ALTER USER "{{ mysql_root_username }}"@"{{ item }}" | ||
| IDENTIFIED WITH mysql_native_password BY "{{ mysql_root_password }}"; FLUSH PRIVILEGES;' | ||
| IDENTIFIED WITH mysql_native_password BY "{{ mysql_root_password_generated }}"; FLUSH PRIVILEGES;' | ||
| with_items: "{{ mysql_root_hosts.stdout_lines|default([]) }}" | ||
| when: > | ||
| ((mysql_install_packages | bool) or mysql_root_password_update) | ||
| and ('5.7.' in mysql_cli_version.stdout or '8.0.' in mysql_cli_version.stdout) | ||
| and (mysql_root_password_setting.changed is true) | ||
| # Set root password for MySQL < 5.7.x. | ||
| - name: Update MySQL root password for localhost root account (< 5.7.x). | ||
| shell: > | ||
| mysql -NBe | ||
| 'SET PASSWORD FOR "{{ mysql_root_username }}"@"{{ item }}" = PASSWORD("{{ mysql_root_password }}"); FLUSH PRIVILEGES;' | ||
| 'SET PASSWORD FOR "{{ mysql_root_username }}"@"{{ item }}" = PASSWORD("{{ mysql_root_password_generated }}"); FLUSH PRIVILEGES;' | ||
| with_items: "{{ mysql_root_hosts.stdout_lines|default([]) }}" | ||
| when: > | ||
| ((mysql_install_packages | bool) or mysql_root_password_update) | ||
| and ('5.7.' not in mysql_cli_version.stdout and '8.0.' not in mysql_cli_version.stdout) | ||
| # Has to be after the root password assignment, for idempotency. | ||
| - name: Copy .my.cnf file with root password credentials. | ||
| template: | ||
| src: "root-my.cnf.j2" | ||
| dest: "{{ mysql_root_home }}/.my.cnf" | ||
| owner: root | ||
| group: root | ||
| mode: 0600 | ||
| when: mysql_install_packages | bool or mysql_root_password_update | ||
| and (mysql_root_password_setting.changed is true) | ||
| - name: Get list of hosts for the anonymous user. | ||
| command: mysql -NBe 'SELECT Host FROM mysql.user WHERE User = ""' | ||
|
|
||
Uh oh!
There was an error while loading. Please reload this page.