当我运行以下查询时,我得到一个错误:
SELECT a
.sl_id
AS sl_id
, a
.quote_id
AS quote_id
, a
.sl_date
AS sl_date
, a
.sl_type
AS sl_type
, a
.sl_status
AS sl_status
, b
.client_id
AS client_id
, b
.business
AS business
, b
.affaire_type
AS affaire_type
, b
.quotation_date
AS quotation_date
, b
.total_sale_price_with_tax
AS total_sale_price_with_tax
, b
.STATUS
AS status
, b
.customer_name
AS customer_name
FROM tbl_supplier_list
a
LEFT JOIN view_quotes
b
ON (b
.quote_id
= a
.quote_id
) LIMIT 0, 30 错误消息是:
#1449 - The user specified as a definer ('web2vi'@'%') does not exist 为什么会出现该错误?我如何解决它?
当将视图/触发器/过程从一个数据库或服务器导出到另一个数据库或服务器时,通常会发生这种情况,因为创建该对象的用户不再存在。
您有两种选择:
1.更改定义 通过DEFINER从转储中删除任何语句,这在最初导入数据库对象时最容易做到。
稍后更改定义器比较棘手:
如何更改视图的定义器 运行此SQL生成必要的ALTER语句
SELECT CONCAT("ALTER DEFINER=youruser
@host
VIEW ", table_name, " AS ", view_definition, ";") FROM information_schema.views WHERE table_schema='your-database-name'; 复制并运行ALTER语句
如何更改存储过程的定义器 例:
UPDATE mysql
.proc
p SET definer = 'user@%' WHERE definer='root@%' 注意,因为这将更改所有数据库的所有定义器。
2.创建丢失的用户 如果在使用MySQL数据库时发现以下错误:
The user specified as a definer ('someuser'@'%') does not exist` 然后,您可以使用以下方法解决此问题:
GRANT ALL ON . TO 'someuser'@'%' IDENTIFIED BY 'complex-password'; FLUSH PRIVILEGES; 从http://www.lynnnayko.com/2010/07/mysql-user-specified-as-definer-root.html
这就像一种魅力-只需更改someuser为丢失用户的名称即可。在本地开发服务器上,您通常可以使用root。
还要考虑您是否实际上需要授予用户ALL权限,或者他们是否可以减少权限。来源:stack overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。