如何获取存储过程Exectuing用户MySQL

时间:2016-04-11 06:37:45

标签: mysql stored-procedures

我创建了一个存储过程,它会自动为创建用户添加definer,这对我来说没问题,但是当我尝试在存储过程中获取current_user时,它会给定义者。我的要求是获取正在执行该过程的用户名。

这个的基本目标是:

我有多个开发人员向数据库发送调用。我想从表中撤销他们的权限,并希望为他们提供具有执行权限的存储过程,然后想要跟踪谁正在更新表中的数据。

1 个答案:

答案 0 :(得分:1)

希望这可以指向正确的方向:

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

来自与USER()功能相关的MySQL网站:

  

该值表示您在连接服务器时指定的用户名,以及您连接的客户端主机。

我让neede做了一些与众不同的事情,但和你一样。就我而言,我想给我的用户授予create database而不给他们所有权限。

这是我的存储过程,我希望您可以将数据库用作模板。

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/