it-swarm-ja.com

MySQLユーザーにデータベースを作成する機能を付与し、それらのデータベースへのアクセスのみを許可します

MySQLユーザーに新しいデータベースを作成する権限を付与して、作成したデータベースへのフルアクセス(それらのデータベースを削除する機能を含む)を取得することは可能ですか?ただし、自分で作成したデータベースを除いて、他のユーザーのデータベースに対する特権を持ってはなりません。

それを実現するためのCREATEUSER/GRANT構文は何でしょうか?

解決策:johnshen64の応答による)

appserverユーザーが新しいデータベースを作成してアクセスできるようにしたいとします。

  1. rootとして、次のストアドプロシージャを作成します。
 DROP PROCEDURE IF EXISTS CreateAppDB; 
 DELIMITER//
CREATEPROCEDURE CreateAppDB(
 IN db_name VARCHAR(50))
 BEGIN 
-データベースを作成します
 
 SET @s = CONCAT( 'CREATE DATABASE'、db_name); 
 PREPARE stmt FROM @s; 
 EXECUTE stmt; 
 DEALLOCATE PREPARE stmt; 
 
-権限を付与します
 
 SET @s = CONCAT( 'GRANT ALL ON'、db_name、 '。* TO appserver @localhost '); 
 PREPARE stmt FROM @s; 
 EXECUTE stmt; 
 DEALLOCATE PREPARE stmt; 
 END //
 DELIMITER; 
  1. この手順を実行する権限をユーザーに付与しますappserver
createAppDBでの実行をappserver @ localhostに付与します。
  1. appserverとしてログインし、この手順を実行します。たとえば、fooというデータベースを作成するには:
createAppDB( 'foo');を呼び出します。

ユーザーappserverは、新しく作成されたデータベースに対する完全な権限を持ちますfooそれを削除する機能を含みますが、 MySQLの他のユーザーデータベースにアクセスできます。

4
Gene Goykhman

これを可能にするMySQLのそのようなSQLステートメントは知りませんが、これを管理するストアドプロシージャを記述して、ストアドプロシージャをユーザーに付与することができます。プロシージャ内で、データベースを作成し、前述のすべての権限をユーザーに付与できます。

4
johnshen64