mysql 版本是 5.0.67
我的触发代码是:
DELIMITER //
CREATE TRIGGER upd_price BEFORE UPDATE ON product_price
FOR EACH ROW BEGIN
INSERT INTO update_price_log (product_id, product_price_old, product_price_new) values(OLD.product_id, OLD.product_price, NEW.product_price);
END
//
DELIMITER ;
错误是:
#1227 - 访问被拒绝;您需要超级权限才能执行此操作
我的服务器,不是cpanel! 它是:DirectAdmin Web 控制面板。
我如何创建超级权限并创建我的触发器?
您必须拥有 MySQL Root 权限才能为用户设置 SUPER 权限。
GRANT SUPER
ON '<database>'.'<tablename/*>'
TO '<username>'@'<host/connection/ip/%>';
我尝试在数据库.表级别授予超级权限,但失败了,所以我这样做了
grant super on *.* to 'my_user'@'localhost';
然后创建我的触发器。但别忘了撤销它
revoke super on *.* from 'my_user'@'localhost';
因为将其保留在互联网数据库中是一种危险的特权
另一种无需超级权限即可创建触发器的方法,是将以下行添加到 my.cnf 或 my.ini
log_bin_trust_function_creators = 1
解决此错误的另一种方法(如果可以接受)是禁用 二进制日志记录。 我这样做是因为我没有使用复制服务器,也没有从二进制日志进行备份以进行恢复。但它可能不适合您的情况。
为此,只需注释掉
log_bin
中的
log_bin_index
和
/etc/mysql/my.cnf
行现在触发权限无需 SUPER 即可正常工作。
特权。 对于 MySQL:
https://dev.mysql.com/doc/mysql-security-excerpt/8.0/en/privileges-provided.html#priv_triggerhttps://mariadb.com/docs/skysql-dbaas/ref/xpand/privileges/TRIGGER/此权限启用触发器操作。您必须拥有表的此权限才能创建、删除、执行或显示该表的触发器。
GRANT TRIGGER
ON '<database>'.'<tablename/*>'
TO '<username>'@'<host/connection/ip/%>';