Conceda ao usuário do MySQL a capacidade de criar bancos de dados e permitir apenas que eles acessem esses bancos de dados

4

É possível conceder ao usuário do MySQL os privilégios para criar novos bancos de dados, de modo que eles tenham acesso total aos bancos de dados que criam (incluindo a capacidade de DROP esses bancos de dados). Mas além dos bancos de dados criados por eles mesmos, eles não devem ter privilégios nos bancos de dados de qualquer outro usuário.

Qual seria a sintaxe CREATE USER / GRANT para fazer isso acontecer?

SOLUTION: (conforme resposta de johnshen64 )

Digamos que você queira que o usuário appserver possa criar e acessar novos bancos de dados.

  1. Como root , crie o seguinte procedimento armazenado:
DROP PROCEDURE IF EXISTS CreateAppDB;
DELIMITER //
CREATE PROCEDURE CreateAppDB(
    IN db_name VARCHAR(50))
BEGIN
    -- Create database

    SET @s = CONCAT('CREATE DATABASE ', db_name);
    PREPARE stmt FROM @s;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;

    -- Grant permissions

    SET @s = CONCAT('GRANT ALL ON ', db_name, '.* TO appserver@localhost');
    PREPARE stmt FROM @s;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
END//
DELIMITER ;
  1. Conceda o privilégio para executar este procedimento para o usuário appserver :
grant execute on CreateAppDB to appserver@localhost;
  1. Faça login como appserver e execute este procedimento. Por exemplo, para criar um banco de dados chamado foo :
call CreateAppDB('foo');

O usuário appserver terá direitos totais no banco de dados recém-criado foo , incluindo a capacidade de soltá-lo, mas não poderá acessar nenhum outro banco de dados de usuários MySQL.

    
por Gene Goykhman 14.05.2012 / 22:10

1 resposta

4

Embora eu não saiba de nenhuma instrução sql no MySQL para permitir que você faça isso, mas você pode escrever um procedimento armazenado para gerenciar isso e conceder o procedimento armazenado para o usuário. Dentro do procedimento, você pode criar o banco de dados e conceder todos os privilégios ao usuário.

    
por 14.05.2012 / 22:38