在mysql中创建触发器的权限

问题描述 投票:0回答:5

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 triggers
5个回答
16
投票

您必须拥有 MySQL Root 权限才能为用户设置 SUPER 权限。

GRANT SUPER 
ON '<database>'.'<tablename/*>' 
TO '<username>'@'<host/connection/ip/%>'; 

7
投票

我尝试在数据库.表级别授予超级权限,但失败了,所以我这样做了

grant super on *.* to 'my_user'@'localhost';

然后创建我的触发器。但别忘了撤销它

revoke super on *.* from 'my_user'@'localhost';

因为将其保留在互联网数据库中是一种危险的特权


3
投票

另一种无需超级权限即可创建触发器的方法,是将以下行添加到 my.cnf 或 my.ini

log_bin_trust_function_creators = 1


1
投票

解决此错误的另一种方法(如果可以接受)是禁用 二进制日志记录 我这样做是因为我没有使用复制服务器,也没有从二进制日志进行备份以进行恢复。但它可能不适合您的情况。

为此,只需注释掉

log_bin

 中的 
log_bin_index
/etc/mysql/my.cnf
现在触发权限无需 SUPER 即可正常工作。


0
投票
TRIGGER

特权。 对于 MySQL:

https://dev.mysql.com/doc/mysql-security-excerpt/8.0/en/privileges-provided.html#priv_trigger

对于 MariaDB:

https://mariadb.com/docs/skysql-dbaas/ref/xpand/privileges/TRIGGER/

此权限启用触发器操作。您必须拥有表的此权限才能创建、删除、执行或显示该表的触发器。

GRANT TRIGGER ON '<database>'.'<tablename/*>' TO '<username>'@'<host/connection/ip/%>';

	
© www.soinside.com 2019 - 2024. All rights reserved.