4

Можно ли предоставить пользователю MySQL привилегии СОЗДАТЬ новые базы данных, чтобы у них был полный доступ к базам данных, которые они создают (включая возможность УДАЛИТЬ эти базы данных). Но кроме баз данных, которые они создают сами, они не должны иметь никаких прав на базы данных других пользователей.

Каким будет синтаксис CREATE USER/GRANT, чтобы это произошло?

РЕШЕНИЕ: (согласно ответу johnshen64 )

Допустим , вы хотели бы , чтобы пользователь AppServer , чтобы иметь возможность создавать и доступ к новым базам данных.

  1. В качестве пользователя 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 ;
  1. Предоставьте привилегию для выполнения этой процедуры пользователю appserver:
grant execute on CreateAppDB to appserver@localhost;
  1. Войдите как appserver и выполните эту процедуру. Например, чтобы создать базу данных с именем foo:
call CreateAppDB('foo');

Пользовательский сервер приложений будет иметь полные права на вновь созданную базу данных foo, включая возможность ее удаления, но не сможет получить доступ к любым другим пользовательским базам данных в MySQL.

1 ответ1

4

Хотя я не знаю таких SQL-операторов в MySQL, которые позволили бы вам сделать это, но вы можете написать хранимую процедуру для управления этим и предоставить хранимую процедуру пользователю. Внутри процедуры вы можете создать базу данных и предоставить все указанные привилегии пользователю.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .