如何将GRANT与变量一起使用? [英] How to use GRANT with variables?

查看:138
本文介绍了如何将GRANT与变量一起使用?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在MySql中同时使用GRANT和变量遇到一些麻烦.

I have some troubles with GRANT and variables together in MySql.

SET @username := 'user123', @pass := 'pass123';

GRANT USAGE ON *.* TO @username@'%' IDENTIFIED BY @pass;
GRANT INSERT (header1, header2, headern) ON `data` TO @username@'%';
GRANT SELECT (header1, header2) ON `data2` TO @username@'%';

我想在脚本开始时将用户名和密码放入变量中,然后在GRANT中使用它们

I'd like to put username and password into variables at the begining of the script and then later use them in GRANT

所以代替这个:

GRANT USAGE ON *.* TO 'user123'@'%' IDENTIFIED BY 'pass123';

我想使用这样的东西:

GRANT USAGE ON *.* TO @username@'%' IDENTIFIED BY pass;

如果有人可以向我展示正确的陈述,我将不胜感激. 谢谢你!

I'd really appreciate, if someone could show me the proper statements. Thank you in advence!

推荐答案

SET @object = '*.*';
SET @user = '''user1''@''localhost''';

SET @query = CONCAT('GRANT UPDATE ON ', @object, ' TO ', @user);
PREPARE stmt FROM @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;


DROP PROCEDURE IF EXISTS `test`.`spTest`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `spTest`( varLogin char(16), varPassword char(64) )
BEGIN
    DECLARE varPasswordHashed CHAR(41);
    SELECT PASSWORD(varPassword) INTO varPasswordHashed;

    # Any of the following 3 lines will cause the creation to fail
    CREATE USER varLogin@'localhost' IDENTIFIED BY varPassword;
    GRANT USAGE ON test.* TO varLogin@'localhost' IDENTIFIED BY varPassword;
    GRANT USAGE ON test.* TO varLogin@'localhost' IDENTIFIED BY PASSWORD varPasswordHashed;

    ## The following 3 lines won't cause any problem at create time
    CREATE USER varLogin@'localhost' IDENTIFIED BY 'AnyPassordString';
    GRANT USAGE ON test.* TO varLogin@'localhost' IDENTIFIED BY 'AnyPassordString';
    GRANT USAGE ON test.* TO varLogin@'localhost' IDENTIFIED BY PASSWORD  'AnyPassordString';  
END$$

DELIMITER;

这篇关于如何将GRANT与变量一起使用?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆