我创建了一个存储过程,它会自动为创建用户添加definer,这对我来说没问题,但是当我尝试在存储过程中获取current_user时,它会给定义者。我的要求是获取正在执行该过程的用户名。
这个的基本目标是:
我有多个开发人员向数据库发送调用。我想从表中撤销他们的权限,并希望为他们提供具有执行权限的存储过程,然后想要跟踪谁正在更新表中的数据。
答案 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/