Можно ли предоставить пользователю MySQL привилегии СОЗДАТЬ новые базы данных, чтобы у них был полный доступ к базам данных, которые они создают (включая возможность УДАЛИТЬ эти базы данных). Но кроме баз данных, которые они создают сами, они не должны иметь никаких прав на базы данных других пользователей.
Каким будет синтаксис CREATE USER/GRANT, чтобы это произошло?
РЕШЕНИЕ: (согласно ответу johnshen64 )
Допустим , вы хотели бы , чтобы пользователь AppServer , чтобы иметь возможность создавать и доступ к новым базам данных.
- В качестве пользователя root создайте следующую хранимую процедуру:
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 ;
- Предоставьте привилегию для выполнения этой процедуры пользователю appserver:
grant execute on CreateAppDB to appserver@localhost;
- Войдите как appserver и выполните эту процедуру. Например, чтобы создать базу данных с именем foo:
call CreateAppDB('foo');
Пользовательский сервер приложений будет иметь полные права на вновь созданную базу данных foo, включая возможность ее удаления, но не сможет получить доступ к любым другим пользовательским базам данных в MySQL.