Usuário do banco de dados MySQL: Quais privilégios são necessários?

52

As instruções curtas de instalação do WordPress ( "5 minutos" ) afirmam que:

Crie um banco de dados para o WordPress em seu servidor web, bem como um usuário do MySQL que tenha todos os privilégios para acessá-lo e modificá-lo.

Ao configurar um novo blog profissionalmente, fiquei pensando como isso é mapeado para o que a configuração de privilégios / permissões de usuário do banco de dados MySQL me oferece:

  • Dados: SELECT , INSERT, UPDATE,DELETE
  • Definição: CREATE , ALTER,DROP
  • Extra: INDEX
  • Mais:
    1. LOCK TABLES
    2. REFERENCES
    3. CREATE TEMPORARY TABLES
    4. CREATE VIEW
    5. SHOW VIEW
    6. CREATE ROUTINE
    7. EXECUTE
    8. ALTER ROUTINE

Tenho certeza de que, nos três primeiros grupos, os nomeiei Dados, Definição e Extra aqui. Mas e os outros abaixo da entrada Mais ? Normalmente eu diria que isso não é necessário, mas eu gostaria de ter uma segunda opinião.

hakre
fonte

Respostas:

13

Os outros não são necessários, como você aponta.

Btw, o que você poderia fazer é definir condicionalmente o usuário / passe com base na página solicitada. Como não privilegiado em selecionar / inserir / atualizar / excluir para uso normal, e privilegiado por itens relacionados à definição / índice, além de visitar a página de atualização.

Denis de Bernardy
fonte
11
Existe alguma referência sobre como definir condicionalmente o usuário / passe com base na página solicitada em um ambiente WordPress? TA
superjos 24/01
@superjos: Não que eu esteja ciente de tudo, mas o essencial seria definir o usuário normal do banco de dados, selecionar / inserir / atualizar / excluir no wp-config e, quando o URL corresponder ao / páginas wp-admin (provável atualização, ativar tema e ativar plug-in), para definir um usuário alternativo que possa fazer todo o resto.
Denis de Bernardy
34

"Todos os privilégios" geralmente significa que você deve dar tudo de bom para o usuário. Contudo ...

Encontrei pelo menos um artigo que afirma que o usuário do MySQL só precisa:

  • SELECT
  • INSERIR
  • ATUALIZAR

Indo mais fundo , descobri que, para operar totalmente (atualizações automatizadas, instalação / desinstalação de plug-ins etc.), o WordPress requer algumas permissões adicionais:

  • EXCLUIR
  • ALTER (para atualizações)
  • CRIAR A TABELA
  • DROP TABLE

Além disso, não é referenciado, mas faz sentido:

  • ÍNDICE

Mas essas são as únicas duas referências sólidas que posso encontrar apoiadas por opiniões postadas em outros lugares. Eu ainda o encorajo a continuar com GRANT ALL, mas se você absolutamente deve limitar o uso do seu banco de dados, comece com esses 7 privilégios e faça o teste completo para garantir que as coisas funcionem conforme o esperado.

EAMann
fonte
Obrigado por compartilhar seus pensamentos. Para esse site instalado, eu NÃO CONCEDI TUDO, pois este não é um site de desenvolvimento e, em vez disso, atenha-se a todos, incl. ÍNDICE. Parece bom até agora, acho que o mantenho rastreado nos próximos dias, é um site da vida real incl. muito uso de plugins e afins. Para o INDEX, eu poderia procurar um pouco no core e no manual do mysql também.
hakre
11
Lembre-se de que os plug-ins de terceiros podem chamar praticamente qualquer instrução SQL que desejarem ... portanto, verifique-os adequadamente antes de instalar as coisas dependentes dos privilégios que você revogou.
precisa saber é o seguinte
12

Aqui está o que o Codex tem a dizer sobre a restrição de privilégios de usuário do banco de dados:

Para operações normais do WordPress, como postagem de posts, upload de arquivos de mídia, postagem de comentários, criação de novos usuários do WordPress e instalação de plugins do WordPress, o usuário do banco de dados MySQL precisa apenas de privilégios de leitura e gravação de dados no banco de dados MySQL; SELECT, INSERT, UPDATE e DELETE.

Portanto, qualquer outra estrutura de banco de dados e privilégios de administração, como DROP, ALTER e GRANT, podem ser revogados. Ao revogar esses privilégios, você também está aprimorando as políticas de contenção.

Nota: Alguns plugins, temas e as principais atualizações do WordPress podem exigir alterações estruturais no banco de dados, como adicionar novas tabelas ou alterar o esquema. Nesse caso, antes de instalar o plug-in ou atualizar um software, permita temporariamente ao usuário do banco de dados os privilégios necessários.

http://codex.wordpress.org/Hardening_WordPress

redburn
fonte
2
Tento praticar o princípio do menor privilégio, sempre que possível. As informações (úteis) citadas não estão mais no artigo vinculado do Codex, portanto, obrigado por copiá-las aqui.
Anthony G - justice para Monica
2

Em relação à "Nota" no post de redburn, o Wordpress Codex também possui um Aviso que você também deve ler sobre atualizações e alterações de esquema do banco de dados ...

(Editar: notei, no entanto, que NÃO VEJO "CONCESSÃO" na lista de privilégios ao criar ou atualizar um usuário. Talvez "CREATE" deva ser adicionado à lista? Alguém tem informações sobre isso? - usando Hostgator cPanel , Março de 2016 -)

AVISO:
Tentando atualizações sem ter esses privilégios [ SELECT, INSERT, UPDATE, DELETE, DROP, ALTER e GRANT] pode causar problemas quando ocorrem alterações no esquema do banco de dados. Portanto, NÃO é recomendável revogar esses privilégios. Se você sentir necessidade de fazer isso por razões de segurança, verifique se possui um plano de backup sólido em primeiro lugar, com os backups regulares regulares do banco de dados que você testou são válidos e que podem ser facilmente restaurados. Uma falha na atualização do banco de dados geralmente pode ser resolvida restaurando o banco de dados novamente para uma versão antiga, concedendo as permissões adequadas e permitindo que o WordPress tente a atualização do banco de dados novamente. A restauração do banco de dados retornará à versão antiga e as telas de administração do WordPress detectarão a versão antiga e permitirão a execução dos comandos SQL necessários. A maioria das atualizações do WordPress não altera o esquema, mas algumas o fazem. Somente grandes atualizações de pontos (3,7 a 3,8, por exemplo) alterará o esquema. Pequenas atualizações (3.8 a 3.8.1) geralmente não. No entanto, mantenha um backup regular.

Codex: http://codex.wordpress.org/Hardening_WordPress

Jerry9
fonte
0

Minha opinião é a mesma do @EAMann acima, bem como as fontes que ele referenciou: GRANT ALL é necessário para garantir que seu site seja funcional e à prova de futuro. Mesmo em um local de produção, você deve tentar seguir o manual do usuário.

Como alguém que contribui com o código para o núcleo do WordPress e alguns plug-ins, recomendo que você mantenha os privilégios de banco de dados padrão, conforme sugerido no manual do usuário (CONCEDE TODOS OS PRIVILÉGIOS NO wpdatabasename. * TO "wordpressusername" @ "hostname").

O código-fonte do WordPress (presente e futuro) pressupõe que o usuário do banco de dados do WordPress tenha todos os privilégios de banco de dados para o banco de dados WordPress fornecido. Se sua configuração perder algum privilégio de banco de dados, você poderá encontrar problemas ao atualizar o WordPress e adicionar mais plug-ins.

Portanto, você realmente não deve usar privilégios de banco de dados diferentes dos privilégios de banco de dados padrão recomendados pelo manual, a menos que saiba o que está fazendo, tenha necessidades muito específicas e não esqueça que possui privilégios de banco de dados personalizados.

A página do Codex foi atualizada sobre como fazer isso com exemplos em vários sistemas e capturas de tela. https://codex.wordpress.org/Installing_WordPress#Step_2:_Create_the_Database_and_a_User

Criando um nome e um usuário do Databse (via PHPMyAdmin): https://codex.wordpress.org/Installing_WordPress#Using_phpMyAdmin

Criando um nome e um usuário do Databse (via cliente de linha de comando MySQL): https://codex.wordpress.org/Installing_WordPress#Using_the_MySQL_Client

mysql> CREATE DATABASE wpdatabasename;
Query OK, 1 row affected (0.00 sec)

mysql> GRANT ALL PRIVILEGES ON wpdatabasename.* TO "wordpressusername"@"hostname"
    -> IDENTIFIED BY "password";
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)

mysql> EXIT
Steven Lin
fonte