Permissões do Phabricator e MySQL

Ao configurar um usuário de banco de dados para uma instalação do Phabricator , você deve estar ciente de que o Phabricator muda bastante sua estrutura de banco de dados. A storageferramenta de gerenciamento Phabricator (que você precisa executar na atualização do Phabricator) gerencia a criação e exclusão dos bancos de dados necessários, mas não controla a atualização das permissões para o usuário do banco de dados. Infelizmente, o REVOKEcomando no MySQL não removerá as permissões de um banco de dados inexistente. Phabricator usa um único namespace para armazenar todos os seus bancos de dados, entretanto, a melhor maneira de lidar com o acesso aos seus bancos de dados é com permissões de curinga.

Neste post, estou usando phabriccomo meu usuário de banco de dados MySQL e o phabricator_namespace para todos os meus bancos de dados Phabricator. Também estou supondo que você tenha uma conta de usuário com permissões de acesso ao mysqlbanco de dados. O usuário do banco de dados MySQL que você está usando para o Phabricator deve ter apenas acesso básico aos bancos de dados com namespace do Phabricator. A administração (como o uso da storageferramenta) deve ser feita com outro usuário MySQL que tenha permissões de nível superior.

Corrigindo permissões anteriores

Se você já concedeu permissões a um usuário MySQL para Phabricator, você deve removê-los. Como mencionado acima, o REVOKEcomando não funciona bem com bancos de dados inexistentes, então você terá que executar um comando para editar manualmente o mysqlbanco de dados e removê-los. O comando a seguir remove TODAS as permissões do usuário MySQL.

DELETE FROM mysql.db WHERE USER='phabric';

Ótimo, agora estamos prontos para configurar permissões de curinga para esse usuário.

Configurando novas permissões

A nova estrutura de permissões é simples. Em vez de criar uma nova permissão GRANTpara cada banco de dados, vamos apenas para GRANTo acesso básico do usuário ao namespace. O MySQL possui dois caracteres curinga: _e %. Se você precisa que eles sejam interpretados literalmente, apenas escape deles com . O comando a seguir concederá as permissões necessárias ao usuário MySQL para acessar e atualizar todos os bancos de dados no phabricator_namespace.

GRANT SELECT, INSERT, UPDATE, DELETE, EXECUTE, SHOW VIEW ON `phabricator_%`.* TO 'phabric'@'localhost';

Ótimo, agora, sempre que surge uma nova atualização do Phabricator que altera a estrutura do banco de dados, não deve haver muito a ser feito em termos de concessão e exclusão de permissões.