Tec*_*MLG 320 mysql permissions
当我运行以下查询时,我收到一个错误:
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
Run Code Online (Sandbox Code Playgroud)
错误消息是:
#1449 - The user specified as a definer ('web2vi'@'%') does not exist
Run Code Online (Sandbox Code Playgroud)
为什么我会收到这个错误?我如何解决它?
Cho*_*roc 479
将视图/触发器/过程从一个数据库或服务器导出到另一个数据库或服务器时,通常会发生这种情况,因为创建该对象
您有两种选择:
在最初导入数据库对象时,通过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';
Run Code Online (Sandbox Code Playgroud)复制并运行ALTER语句
例:
UPDATE `mysql`.`proc` p SET definer = 'user@%' WHERE definer='root@%'
Run Code Online (Sandbox Code Playgroud)
要小心,因为这将更改所有数据库的所有定义器.
如果您在使用MySQL数据库时发现以下错误:
Run Code Online (Sandbox Code Playgroud)The user specified as a definer ('someuser'@'%') does not exist`然后你可以使用以下方法解决它:
Run Code Online (Sandbox Code Playgroud)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权限,或者是否可以使用更少的权限.
小智 136
最初创建SQL视图或过程的用户已被删除.如果您重新创建该用户,则应该解决您的错误.
art*_*dev 50
更新mysql后我得到了同样的错误.
此命令后错误已得到修复:
mysql_upgrade -u root
Run Code Online (Sandbox Code Playgroud)
每次升级MySQL时都应该执行mysql_upgrade.它检查所有数据库中的所有表是否与当前版本的MySQL Server不兼容.如果发现某个表可能存在不兼容性,则会进行检查.如果发现任何问题,表格将被修复.mysql_upgrade还会升级系统表,以便您可以利用可能已添加的新特权或功能.
Kev*_*vin 31
像这样创建已删除的用户:
mysql> create user 'web2vi';
Run Code Online (Sandbox Code Playgroud)
要么
mysql> create user 'web2vi'@'%';
Run Code Online (Sandbox Code Playgroud)
Hus*_*imi 27
跟着这些步骤:
希望能帮助到你
Muh*_*eem 20
解决方案只是单行查询,如下所示:
grant all on *.* to 'ROOT'@'%' identified by 'PASSWORD' with grant option;
Run Code Online (Sandbox Code Playgroud)
替换ROOT为您的mysql用户名.替换PASSWORD为您的mysql密码.
小智 13
对于未来的googlers:我收到了类似的消息,试图更新一个没有视图的数据库中的表.经过一番挖掘,结果发现我在该表上导入了触发器,这些是由不存在的用户定义的东西.删除触发器解决了问题.
Sel*_*ani 12
通过运行以下注释修复.
grant all on *.* to 'web2vi'@'%' identified by 'root' with grant option;
FLUSH PRIVILEGES;
Run Code Online (Sandbox Code Playgroud)
如果你得到some_other而不是web2vi那么你必须相应地改变名称.
您的mysql服务器上不存在用户'web2vi'.
请参阅http://dev.mysql.com/doc/refman/5.1/en/error-messages-server.html#error_er_no_such_user
如果该用户确实存在,请检查它可以访问哪些服务器,虽然我认为这将是一个不同的错误(EG您可能有web2vi @ localhost,但您正在访问数据库为web2vi @%(在任何地方)
快速解决方法解决并转储文件:
mysqldump --single-transaction -u root -p xyz_live_db > xyz_live_db_bkup110116.sql
Run Code Online (Sandbox Code Playgroud)
小智 7
将数据库从一台服务器移到另一台服务器后,这发生在我身上。最初,定义器使用的是localhost和用户。在新服务器上,我们没有该用户,并且主机也已更改。我备份了该特定表,并从phpmyadmin中手动删除了所有触发器。之后,它对我来说一直很好。
我遇到了与root用户相同的问题,当我更换时,它对我有用
root@%
Run Code Online (Sandbox Code Playgroud)
通过
root@localhost
Run Code Online (Sandbox Code Playgroud)
因此,如果允许用户'web2vi'从'localhost'连接,您可以尝试:
web2vi@localhost
Run Code Online (Sandbox Code Playgroud)
我已远程连接到数据库.
grant all on *.* to 'username'@'%' identified by 'password' with grant option;
Run Code Online (Sandbox Code Playgroud)
例:
grant all on *.* to 'web2vi'@'%' identified by 'password' with grant option;
Run Code Online (Sandbox Code Playgroud)
为什么我会收到那个错误?我如何解决它?
我花了一个小时才找到解决此类问题的决定。但是,就我而言,我运行了这个:
mysql> UPDATE `users` SET `somefield` = 1 WHERE `user_id` = 2;
ERROR 1449 (HY000): The user specified as a definer ('root'@'%') does not exist
Run Code Online (Sandbox Code Playgroud)
如果你真的想找到问题所在,只需一一运行这些命令:
SHOW PROCEDURE STATUS;
SHOW FUNCTION STATUS;
SHOW TRIGGERS;
SHOW FULL TABLES IN database_name WHERE TABLE_TYPE LIKE 'VIEW';
Run Code Online (Sandbox Code Playgroud)
...并且,在每个之后,查找字段“定义器”。
在我的情况下,它是有胡子的旧触发器,开发人员忘记删除了。
| 归档时间: |
|
| 查看次数: |
436430 次 |
| 最近记录: |