我正在使用使用cpanel
作为其管理系统的托管Web服务帐户。登录到phpmyadmin
时,我正在尝试导入一个包含表和某些过程的SQL文件。
CREATE DEFINER=`root`@`localhost` PROCEDURE `getClientDashboardStatsMap` (IN `in_userID` INT) BEGIN
SELECT
rl.city,
rl.state,
rl.zip,
rl.longitude,
rl.latitude,
rl.timestamp,
count(rl.ID) as total
FROM
crowd.redemption_log as rl
JOIN
reward as r
ON
rl.rewardID = r.rewardID
WHERE
r.userID = 1
AND
rl.timestamp BETWEEN NOW() - INTERVAL 30 DAY AND NOW()
GROUP BY
rl.city, rl.state, rl.zip
ORDER BY
total DESC;
END$$
当我尝试运行此操作时,我会发现需要超级用户特权这样做的错误。进行一些搜索,人们建议这样的删除定义线这样:
CREATE PROCEDURE getClientDashboardStatsMap (IN in_userID INT) BEGIN
。
虽然这使我能够完成导入,但我遇到了另一个问题。该过程获得了cpaneluser@localhost
的默认定义器。但是,设置的数据库用户与此用户不同,因此该过程对select, update, delete
之类的内容没有权限。数据库用户是cpaneluser_dbusername
,它对于这样的托管站点是典型的,因此您可以将数据库与帐户相关联。
在正确的用户下,我还能如何获得此过程来运行?为了将其作为超级用户运行,我在PHPMYADMIN
中没有看到任何设置。
有两种解决此问题的方法:
-
使用数据库用户
cpaneluser_dbusername
登录phpmyadmin
。我不喜欢phpmyadmin
和cpanel
,因此我不确定它们是否为您提供更改用户的选项。您应该自己检查一下。我正在使用MySQL Workbench和MySQL管理员,他们都为我提供此选项。 -
授予
cpaneluser@localhost
的特权。例如:GRANT ALL ON db_name.table_name TO 'cpaneluser@localhost';
最好明确授予每个特权,例如:GRANT SELECT,INSERT,UPDATE,DELETE ON ...
。检查授予语法。