【发布时间】:2016-04-11 06:37:45
【问题描述】:
我已经创建了一个存储过程,它会自动将定义器添加到创建用户,这对我来说没问题,但是当我尝试在存储过程中获取 current_user 时,它会给出定义器。我的要求是获取正在执行该过程的用户名。
这样做的基本目标是:
我有多个开发人员向数据库发送调用。我想从表中撤销他们的权限,并想为他们提供一个具有执行权限的存储过程,然后想跟踪谁在更新表中的数据。
【问题讨论】:
我已经创建了一个存储过程,它会自动将定义器添加到创建用户,这对我来说没问题,但是当我尝试在存储过程中获取 current_user 时,它会给出定义器。我的要求是获取正在执行该过程的用户名。
这样做的基本目标是:
我有多个开发人员向数据库发送调用。我想从表中撤销他们的权限,并想为他们提供一个具有执行权限的存储过程,然后想跟踪谁在更新表中的数据。
【问题讨论】:
希望这可以为您指明正确的方向:
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/
【讨论】: