【问题标题】:How to get Stored Procedure Executing user MySQL如何获取存储过程执行用户 MySQL
【发布时间】:2016-04-11 06:37:45
【问题描述】:

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

这样做的基本目标是:

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

【问题讨论】:

    标签: mysql stored-procedures


    【解决方案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/

    【讨论】:

      猜你喜欢
      • 2012-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-20
      • 1970-01-01
      • 1970-01-01
      • 2014-12-16
      相关资源
      最近更新 更多