每当我运行以下代码时:

SET GLOBAL log_bin_trust_function_creators=TRUE;

DROP FUNCTION IF EXISTS GreaterCircleNm;
DELIMITER go
CREATE FUNCTION GreaterCircleNm( lat1 FLOAT, lon1 FLOAT, lat2 FLOAT, lon2 FLOAT ) RETURNS float
BEGIN
  DECLARE pi, q1, dist FLOAT;
  SET pi = PI();
  SET lat1 = lat1 * pi / 180;
  SET lon1 = lon1 * pi / 180;
  SET lat2 = lat2 * pi / 180;
  SET lon2 = lon2 * pi / 180;
SET q1 = ACOS(sin(lat1)*sin(lat2)+COS(lat1)*COS(lat2)*COS(lon1-lon2));
SET dist = q1*180*60/pi;
RETURN dist;
END;
go
DELIMITER ;


我收到一条错误消息,告诉我我没有超级特权。我的托管服务提供商已经告诉我,我不可能(1)获得那些特权或(2)让他们运行代码。这给我留下了选项(3),该选项将在创建函数的同时删除SET GLOBAL log_bin_trust_function_creators=TRUE;。我不确定这是否可行,但我将不胜感激。

最佳答案

没有SUPER特权,您不能SET GLOBAL进行任何操作。
cf. http://dev.mysql.com/doc/refman/5.6/en/set-statement.html


  设置全局变量需要SUPER特权。


您不能SET SESSION对此变量:

mysql> SET SESSION log_bin_trust_function_creators=0;
ERROR 1229 (HY000): Variable 'log_bin_trust_function_creators'
is a GLOBAL variable and should be set with SET GLOBAL


通过documentation确认,该列表将变量仅列出为GLOBAL,而不是基于SESSION的。

所以不,您不能解决此问题。如果他们不想为您提供SUPER特权,则必须要求提供者为您创建函数。

否则,您可以从另一个提供您SUPER特权的提供商那里获得不同的托管计划。

否则不要在SQL存储函数中进行此计算。

关于mysql - 解决较小的特权,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18120332/

10-13 04:25