AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 102066
Accepted
luqo33
luqo33
Asked: 2015-05-21 09:19:22 +0800 CST2015-05-21 09:19:22 +0800 CST 2015-05-21 09:19:22 +0800 CST

Ansible: Como alterar a senha raiz do servidor MySQL reprovisionando o servidor

  • 772

Eu provisionei meu servidor com o playbook Ansible. Eu usei o playbook root/bedrock-Ansible .

Uma das tarefas era configurar o servidor mysql junto com a senha do usuário root do mysql.

Agora preciso urgentemente alterar essa senha. Os passos que dei:

  1. Atualizei variáveis ​​para funções do Ansible
  2. Executei o comando ansible-playbook -i hosts/staging server.ymlpara reprovisionar o servidor

Todas as tarefas foram executadas conforme o esperado (sem alterações), mas o script falhou [mariadb | Set root user password]com esta mensagem:

msg: unable to connect to database, check login_user and login_password are correct or ~/.my.cnf has the credentials

Meu palpite é que uma vez que a senha de root do MySQL foi definida, o reprovisionamento do servidor não pode alterar essa senha.

É possível alterar a senha de root do MySQL reprovisionando o servidor com o Ansible? Quais são minhas opções?

mysql
  • 5 5 respostas
  • 41198 Views

5 respostas

  • Voted
  1. Best Answer
    ydaetskcoR
    2015-05-21T16:43:52+08:002015-05-21T16:43:52+08:00

    O problema que você tem é que o Ansible está tentando usar a mesma senha de root para fazer login, pois você deseja alterá-la para:

    - name: Set root user password
      mysql_user: name=root
                  host="{{ item }}"
                  password="{{ mysql_root_password }}"
                  check_implicit_admin=yes
                  login_user="{{ mysql_user }}"
                  login_password="{{ mysql_root_password }}"
                  state=present
    

    Obviamente, isso nunca funcionará se você quiser usar esse jogo para alterá-lo.

    Em vez disso, você deve alterar o jogo acima para algo como:

    - name: Set root user password
      mysql_user: name=root
                  host="{{ item }}"
                  password="{{ mysql_root_password }}"
                  check_implicit_admin=yes
                  login_user="{{ mysql_user }}"
                  login_password="{{ mysql_old_root_password }}"
                  state=present
    

    E, em seguida, atualize os arquivos de inventário relevantes para adicionar essa nova variável.

    Então o seu group_vars/productionagora deve conter:

    mysql_old_root_password: productionpw
    mysql_root_password: newproductionpw
    

    Parece que este manual usa a senha de root no roles/mariadb/tasks/main.ymlmanual e também roles/wordpress-setup/tasks/database.yml, então, você pode querer executar o manual inteiro server.ymlpara garantir que ele esteja configurado corretamente.

    • 16
  2. Markus Schulte
    2016-04-28T08:20:41+08:002016-04-28T08:20:41+08:00

    Você pode fazer mau uso de ~/.my.cnf para poder alterar a senha-raiz do mysql.

    O truque é ter uma tarefa "Set root password" (nr.1), que irá definir a senha. Depois, você tem uma tarefa, que cria um ~/.my.cnf com as credenciais corretas (nr.2).

    Em um novo sistema, ~/.my.cnf não está presente. A tarefa nr.1 criará mysql-root-user com as credenciais fornecidas. Em um sistema atual, as credenciais de ~/.my.cnf são usadas para fazer login e definir a senha para mysql_root_password . A tarefa nr.2 criará ~/.my.cnf , ou substituirá as credenciais antigas existentes ~/.my.cnf por novas.

    A grande vantagem desta abordagem é ter apenas uma variável "mysql_root_password", que é sempre a correta do ponto de vista de um playbook. No(s) sistema(s) atual(is), ~/.my.cnf é um tipo de armazenamento para credenciais mysql locais atuais.

    - name: Set root user password
      # If .my.cnf already exists, this will cause an mysql-root-password update.
      mysql_user:
        name: root
        password: "{{ mysql_root_password}}"
        check_implicit_admin: true
    
    - name: Create .my.cnf
      template:
       src: "client.my.cnf.j2"
       dest: "/root/.my.cnf"
       owner: root
       group: root
       mode: 0600
    

    com client.my.cnf.j2:

    [client]
    user=root
    password={{ mysql_root_password }}
    

    Leitura adicional

    Notas relevantes de ansible-mysql_user_module-documentation :

    • Nota 1:

      Para proteger esse usuário como parte de um playbook idempotente, você deve criar pelo menos duas tarefas: a primeira deve alterar a senha do usuário root, sem fornecer detalhes de login_user/login_password. O segundo deve descartar um arquivo ~/.my.cnf contendo as novas credenciais raiz. As execuções subsequentes do manual serão bem-sucedidas lendo as novas credenciais do arquivo. ansible-mysql_user_module, notas

    • Nota 2:

      Ambos login_password e login_user são necessários quando você está passando credenciais. Se nenhum estiver presente, o módulo tentará ler as credenciais de ~/.my.cnf e, finalmente, voltará a usar o login padrão do MySQL de 'root' sem senha. ansible-mysql_user_module, notas

    • 12
  3. eco
    2016-05-18T16:41:57+08:002016-05-18T16:41:57+08:00

    Para a próxima pessoa que vier à procura de respostas por aqui. Embora a resposta aceita seja verdadeira, você deve ser mais diligente se estiver usando o MySQL 5.7 porque não há login anônimo permitido no mysqld no modo daemonizado (serviço). Em vez disso, você DEVE raspar o /var/log/mysqld.log para obter uma senha TEMPORÁRIA que alguém decidiu criar e usá-la no login_password=ydaetskcoR. Esse foi um recurso que eles decidiram implementar na versão 5.7 do repositório dev, portanto, se você quiser evitá-lo, use uma versão mais antiga (5.6).

    Documentação aqui: https://dev.mysql.com/doc/refman/5.7/en/server-options.html#option_mysqld_initialize-insecure

    http://mysqlserverteam.com/initialize-your-mysql-5-7-instances-with-ease/

    • 2
  4. Eslam.Gomaa
    2020-03-19T06:51:08+08:002020-03-19T06:51:08+08:00

    Dê uma olhada neste Módulo Ansible, ele fornece uma maneira fácil e idempotente para mysql_secure_installationo Ansible


    Exemplo - com uma nova instalação do MySQL

    - name: test mysql_secure_installation
      mysql_secure_installation:
        login_password: ''
        new_password: password22
        user: root
        login_host: localhost
        hosts: ['localhost', '127.0.0.1', '::1']
        change_root_password: true
        remove_anonymous_user: true
        disallow_root_login_remotely: true
        remove_test_db: true
      register: mysql_secure
    
    # To see detailed output
    - debug:
        var: mysql_secure
    

    Exemplo - Alterar uma senha de root existente

    - name: test mysql_secure_installation
      mysql_secure_installation:
        login_password: password22
        new_password: password23
        user: root
        login_host: localhost
        hosts: ['localhost', '127.0.0.1', '::1']
    

    Para uso : Tudo o que você precisa fazer é criar um diretório chamado libraryno seu playbooks or role's dire copiar mysql_secure_installation.pypara ele,

    você pode encontrar um exemplo completo no seguinte Link

    https://github.com/eslam-gomaa/mysql_secure_installation_Ansible

    • 2
  5. ww12z
    2016-06-29T00:00:01+08:002016-06-29T00:00:01+08:00

    Existe um playbook Ansible usado para proteger o MySQL.

    https://github.com/dev-sec/ansible-mysql-hardening

    Isso não apenas alterou a senha do root, mas também executa algumas etapas adicionais para proteger o servidor.

    Dê uma olhada no arquivo leia-me.

    • 1

relate perguntas

  • Existem ferramentas de benchmarking do MySQL? [fechado]

  • Onde posso encontrar o log lento do mysql?

  • Como posso otimizar um mysqldump de um banco de dados grande?

  • Quando é o momento certo para usar o MariaDB em vez do MySQL e por quê?

  • Como um grupo pode rastrear alterações no esquema do banco de dados?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve