【问题标题】:How to use GRANT with variables?如何将 GRANT 与变量一起使用?
【发布时间】:2013-02-12 18:56:16
【问题描述】:

我在 MySql 中同时使用 GRANT 和变量时遇到了一些问题。

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 中使用它们

所以不要这样:

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

我想用这样的东西:

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

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

【问题讨论】:

  • 不应该是IDENTIFIED BY @pass,你错过了@
  • 谢谢,我更正了,但这并不能解决主要问题。 :(
  • 变量只能在 SQL 允许表达式的地方使用。 GRANT 语句中没有表达式。您也许可以使用动态 SQL 来做到这一点。

标签: mysql sql-grant


【解决方案1】:
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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 2021-01-09
    • 2016-03-03
    • 2017-09-10
    相关资源
    最近更新 更多