2016-04-11 25 views
2

私が作成したストアドプロシージャは、作成者に自動的に定義者を追加しますが、ストアドプロシージャでcurrent_userを取得しようとすると、定義者に渡されます。私の要件は、プロシージャを実行しているユーザー名を取得することです。ストアドプロシージャを取得する方法ユーザーを追い出すMySQL

基本的な目的は次のとおりです。

私は複数の開発者がデータベースに呼び出しを送信しています。私はテーブルから自分の権利を取り消したいし、実行権を持つストアドプロシージャを提供したいのですが、そのテーブルのデータを誰が更新しているかを追跡したいのです。

答えて

1

うまくいけば、これは正しい方向にあなたを指すことができます:

http://dev.mysql.com/doc/refman/5.5/en/information-functions.html#function_user

USER()機能に関連するMySQLのウェブサイトから:

を値は、サーバへの接続時に指定したユーザー名を示します、および接続先のクライアントホスト。

私は少し違うことをする必要がありましたが、あなたと同じ分野です。私の場合、私はすべての権限を与えずに自分のユーザーにデータベースを作成する権限を与えたかったのです。

ここでは、私があなたがテンプレートとして使用できることを望むデータベースを与えるための私のストアドプロシージャです。

完全な説明については
DROP PROCEDURE IF EXISTS createdb; 
DELIMITER $$ 
CREATE 
    DEFINER = 'root'@'localhost' 
    PROCEDURE createdb (IN dbname CHAR(50)) 
BEGIN 

    DECLARE EXIT HANDLER FOR 1007 
    SELECT CONCAT("Can't create database '", 
     dbname, "'; database exists") as msg; 

    SET @v_createdb = CONCAT('CREATE DATABASE ', dbname); 
    SET @v_grant = CONCAT('GRANT ALL PRIVILEGES ON ', dbname, 
     '.* TO \'',SUBSTRING_INDEX(USER(),'@',1),'\'@\'%\''); 

    PREPARE stmt_createdb FROM @v_createdb; 
    PREPARE stmt_grant FROM @v_grant; 

    EXECUTE stmt_createdb; 
    EXECUTE stmt_grant; 
    FLUSH PRIVILEGES; 

END $$ 

、あなたが訪問することをお勧めしますhttp://www.microshell.com/database/how-to-grant-create-database-for-non-root-users/

関連する問題