【发布时间】:2019-07-02 00:29:56
【问题描述】:
我正在尝试创建一个可以授予用户访问数据库的存储过程。这个想法是该过程将接受一个参数(给定的用户名),然后让用户访问数据库。因此,执行此操作的正常 Mariadb 查询是:
GRANT ALL ON databaseNameHere.* TO 'userNameHere'@'%';
问题是,'userNameHere' 需要用引号括起来才能执行此查询,因此我需要将引号连接到给定的用户名参数。 我想用 DECLARE 来做到这一点:
DELIMITER $$
CREATE PROCEDURE GrantUserAccess(IN as_username CHAR(25))
BEGIN
SET @sql = CONCAT("GRANT ALL ON archimodels.* TO '" as_username "'@'%'")
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END$$
DELIMITER ;
我一直遇到错误声明:
您的 SQL 语法有错误;检查手册 对应于您的 MariaDB 服务器版本,以便使用正确的语法 在'"'@'%'") 附近准备 stmt FROM @sql;执行语句;解除分配 准备 stmt; EN' 在第 3 行
这是我想要做的一个例子,唯一的问题是我需要将引号连接到用户名 https://www.oreilly.com/library/view/mysql-stored-procedure/0596100892/re39.html
【问题讨论】:
-
为什么存储过程在这里有帮助?
-
我得到了脚本部分,但不清楚为什么存储过程会有所帮助。只需在您的脚本系统中执行此操作,无论是什么,而不是在 MySQL 存储过程中。
-
@spencer7593 这些不是特定于 Windows 的,它们是一种称为“智能引号”的功能,存在于许多文字处理类型编辑器中。代码编辑器没有该功能,因为它对于引号很重要的代码来说是一种麻烦。
-
@spencer7593 除非您受到某种专横的官僚企业约束,否则只需将其作为 SQL 代码而不是存储过程来执行。这些存储过程包装器通常会掩盖重要的错误并限制对
GRANT命令中重要配置指令的访问。 -
@tadman:DBA 可以授予这些权限。该过程可以在获得国会法案批准后启动,并附有陆军工程兵团的环境影响研究。
标签: mysql stored-procedures mariadb