gpt4 book ai didi

用于创建经过身份验证的全特权用户及其数据库的 MySQL 糖语法

转载 作者:可可西里 更新时间:2023-11-01 07:55:45 25 4
gpt4 key购买 nike

这就是我在 Linux(带有 Bash 的 Ubuntu)中通过 MySQL CLI 在 MySQL 中创建经过身份验证的全特权用户及其数据库的方式:

cat <<-DBSTACK | mysql -u root -p"${dbrootp}"
CREATE (OR RE-CREATE IF NEEDED) USER "${domain}"@"localhost" IDENTIFIED BY "${dbuserp}";
CREATE (OR RE-CREATE IF NEEDED) DATABASE ${domain};
GRANT ALL PRIVILEGES ON ${domain}.* TO "${domain}"@"localhost";
DBSTACK

是否有一些糖语法或一些高级功能可以在一行中完成所有这些?

(比运行 5 行更好 - 2 行用于 here-document 开启符和分隔符,3 行用于 MySQL)。

最佳答案

我不知道有任何内置命令可以将所有这些任务作为一个执行,但您可以轻松定义自己的 stored program这样做:

CREATE PROCEDURE addNewDomain(domain VARCHAR(32), password VARCHAR(32))
BEGIN
DECLARE db VARCHAR(66) DEFAULT CONCAT('`', REPLACE(domain, '`', '``'), '`');
DECLARE ac VARCHAR(76) DEFAULT CONCAT(db, '@localhost');

SET
@a := CONCAT('CREATE USER ', ac, ' IDENTIFIED BY ', QUOTE(password)),
@b := CONCAT('CREATE DATABASE ', db),
@c := CONCAT('GRANT ALL PRIVILEGES ON ', db, '.* TO ', ac)
;

PREPARE stmt FROM @a; EXECUTE stmt; DEALLOCATE PREPARE stmt;
PREPARE stmt FROM @b; EXECUTE stmt; DEALLOCATE PREPARE stmt;
PREPARE stmt FROM @c; EXECUTE stmt; DEALLOCATE PREPARE stmt;
END

然后您将使用单个 CALL 语句调用它:

CALL addNewDomain('foobar', 's3cr3t')

这种方法的一个优点是,该过程可以由具有完全 CREATEGRANT 权限但具有 EXECUTE 权限的用户定义它授予没有这些权限的用户——然后您的 shell 脚本可以使用较低权限的帐户连接到 MySQL(这可以造成较小的损害,例如,如果受到威胁,仅设置新域)。

请注意,为了发出 CREATE PROCEDURE 命令(包含 ; 字符),您需要确保您的 MySQL 客户端的语句定界符设置为不同于; 否则它会在发送到服务器时将命令拆分为多个单独的语句。 MySQL CLI 使用 DELIMITER 语句执行此操作:

DELIMITER ;;

CREATE PROCEDURE addNewDomain(domain VARCHAR(32), password VARCHAR(32))
BEGIN
-- etc
END;;

DELIMITER ;

关于用于创建经过身份验证的全特权用户及其数据库的 MySQL 糖语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48617230/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com