解决较少的特权

时间:2013-08-08 07:31:37

标签: mysql sql

每当我运行此代码时:

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;。我不确定这是否可行,但我会感激任何帮助。

1 个答案:

答案 0 :(得分:1)

如果没有SUPER权限,你不能SET GLOBAL 参看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确认,{{3}}仅将变量列为GLOBAL,而不是基于SESSION。

所以不,你无法解决这个问题。如果他们不想给你超级特权,你必须要求你的提供者为你创建这个功能。

或者从另一个允许您获得SUPER权限的提供商处获得不同的主机方案。

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