我已经为MySQL配置了一个Azure数据库,并且能够成功连接到它。我还能够创建新表并在这些表上运行查询,但在创建存储过程时,我得到以下错误:-
Er 1227. Access error Code: denied; you need (at least one of) the SUPER privilege(s) for this operation
尝试的示例过程是
DELIMITER $$
CREATE DEFINER='user'@'server'
PROCEDURE `sp_getComplaintsByBranchCode`(
in branchCode Varchar(50),
in companyCode Varchar(50),
in RowsPerPage INT,
in pageNumber INT
)
NOT DETERMINISTIC NO SQL SQL SECURITY DEFINER
BEGIN
DECLARE pageFrom INT;
DECLARE rowLimit INT;
DECLARE companyid varchar(50);
DECLARE branchid varchar(50);
DECLARE offval INT;
SET pageFrom = pageNumber;
SET rowLimit = RowsPerPage;
SET branchid = branchCode;
SET companyid = companyCode;
SET offval = ((pageFrom-1) * rowLimit);
select * from complaints c
WHERE c.branchCode = branchid AND c.fb_companyID = companyid
ORDER BY added_on DESC limit rowLimit OFFSET offval;
END
我检查了用户权限,在初始设置期间创建的数据库管理员用户没有超级权限。唯一具有超级权限的用户是"azure_superuser",我没有连接密码。请帮助我解决以下问题或指出一些可以提供帮助的参考资料:-
1( 如何连接到"azure_superuser"或 2( 如何在没有以 root 用户身份登录的情况下向管理员用户授予超级用户权限。 3( 如何使super_priviledge为"N"的用户能够在 Azure 数据库中为 MySQL 创建存储过程。
一些参考资料:-
堆栈溢出问题
Github
请从语句中删除 DEFINER 子句。它应该有效。
适用于 MySQL 的 Azure 数据库不支持 SUPER 特权。您可以获得的最接近的是创建另一个管理员级别用户,该用户与您创建的服务器管理员具有相同的权限,您可以运行:
CREATE USER 'testuser'@'%' <span>IDENTIFIED </span>BY 'your_password_here';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, PROCESS, REFERENCES, INDEX, ALTER, SHOW DATABASES, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER ON *.* TO 'testuser'@'%' WITH GRANT OPTION;