Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Fornecendo aos usuários do MySQL apenas os privilégios mínimos


Eu discordo de Bill aqui e a linha de pensamento do Atomix é mais adequada. A menos que possa ser demonstrado o contrário, a resposta de Bill aumenta muito o risco de o banco de dados ser comprometido.

Talvez para desenvolvedores muito experientes haja outra segurança em vigor, mas para outros desenvolvedores, dar a um script acesso total e irrestrito para fazer ~qualquer coisa~ em um banco de dados é pedir problemas, quando não há necessidade.

O princípio do privilégio mínimo deve ser usado aqui. Para MySQL, tenha um superusuário com todos os privilégios que é usado para criar tabelas, descartar banco de dados e assim por diante. Idealmente, esse nome de usuário e senha nunca são vistos em nenhum arquivo PHP ou em nenhum arquivo no servidor web. (Estou usando o PHP como exemplo, mas se aplica a outros aplicativos da web). Você só usaria esse nome de usuário e senha com algo como PHPMyAdmin ou MySQL Workbench.

Então, para scripts PHP, tenha um com o mínimo necessário, como apenas INSERT, SELECT, UPDATE, talvez nem mesmo DELETE, dependendo do seu script PHP. Isso estaria nos arquivos PHP, ou seja, na verdade apenas UM arquivo FORA da raiz do documento, como é recomendado pela maioria.

A razão é a seguinte:sim, você não precisa de um usuário MySQL para cada usuário de aplicação web. Mas o princípio do privilégio mínimo ( http://en.wikipedia.org/wiki/Principle_of_least_privilege ) deve ser aplicado. Se de alguma forma seu superusuário do MySQL está comprometido porque você acidentalmente nomeou seu script de conexão do MySQL como .txt em vez de .php, ou alguém obteve acesso aos arquivos do servidor web, pelo menos o "pior" que eles podem fazer é SELECT, UPDATE e INSERT. .. O que pode causar grandes problemas de qualquer maneira, não é tão ruim quanto dar a eles DROP DATABASE, DROP TABLES e coisas muito piores.

Além disso, em meu projeto atual devido às práticas de desenvolvimento ágil (não trabalho, mas recomendo http://www.agilealliance .org/ ), um ou dois membros da equipe "não técnicos" estão usando diretamente o PHPMyAdmin para fazer alterações diretas no banco de dados MySQL. Isso ocorre porque a criação de um CMS para entrada direta de dados simples não é necessária. Neste caso, um terceiro usuário do MySQL com privilégios razoáveis, mas novamente, "apenas o suficiente" é adequado para eles. Não queremos prejudicar o membro da equipe com poucos privilégios, mas é claro que eles não devem poder excluir ou alterar coisas acidentalmente.

Como o MySQL não possui FUNÇÕES (no momento em que a pergunta original foi feita e de acordo com Bill), permitir que qualquer script da Web acesse o MySQL com apenas um superusuário é muito arriscado.