mysql - 解决较小的特权

标签 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 ;

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

最佳答案

没有 super 权限,您无法SET GLOBAL任何内容。
比照。 http://dev.mysql.com/doc/refman/5.6/en/set-statement.html

The SUPER privilege is required to set global variables.

您无法为此变量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/

相关文章:

PHP/MySQL 根据第二个表中 X 行中的 1 选择一个列表

php - 如何使用 MySQL 查询更新产品重量和制造国家?

sql - 使用相关子查询删除 4200 万行表的 SQL?

mysql - 如何修复 MySQL 错误 1093

php - 按数据库中分组日期排序

php - 在同一个表中同时插入 MySQL : how to?

MySQL 无法添加或更新子行 - 外键约束失败

带有条件 SELECT 参数的 MySQL 查询 - where 子句中的未知列

sql - 比较同一个sql表中两行的数据

PhP MySQL NOT LIKE 不返回正确的值