ข้อผิดพลาดของ MySQL 1449: ผู้ใช้ที่ระบุเป็นผู้กำหนดไม่มีอยู่


352

เมื่อฉันเรียกใช้แบบสอบถามต่อไปนี้ฉันได้รับข้อผิดพลาด:

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

เหตุใดฉันจึงได้รับข้อผิดพลาดนั้น ฉันจะแก้ไขได้อย่างไร


7
แสดง SHOW CREATE VIEW ของคุณให้เรา 'view_quotes'
jordeu

ข้อผิดพลาดจะต้องอยู่ในสภาพที่view_quotesดู
Shell

หลังจากคิดถึงเรื่องนี้สักครู่และวิธีการปฏิบัติที่ง่ายที่สุดคือการเพิ่มบัญชีที่ขาดหายไปในฐานข้อมูลและข้อผิดพลาดก็หายไป ไม่ต้องใช้ขั้นตอนที่ซับซ้อน หากคุณสามารถเพิ่มบัญชีได้ให้ลองใช้งานก่อน
user1794918

คำตอบ:


539

สิ่งนี้มักเกิดขึ้นเมื่อส่งออกมุมมอง / ทริกเกอร์ / ขั้นตอนจากฐานข้อมูลหรือเซิร์ฟเวอร์หนึ่งไปยังอีกอันหนึ่งเนื่องจากผู้ใช้ที่สร้างวัตถุนั้นไม่มีอยู่อีกต่อไป

คุณมีสองทางเลือก:

1. เปลี่ยน DEFINER

นี่อาจเป็นวิธีที่ง่ายที่สุดเมื่อเริ่มนำเข้าวัตถุฐานข้อมูลของคุณโดยลบDEFINERคำสั่งใด ๆจากการถ่ายโอนข้อมูล

การเปลี่ยนคำจำกัดความในภายหลังเป็นเรื่องยุ่งยากเล็กน้อย:

วิธีเปลี่ยน definer สำหรับมุมมอง

  1. เรียกใช้ SQL นี้เพื่อสร้างคำสั่ง ALTER ที่จำเป็น

    SELECT CONCAT("ALTER DEFINER=`youruser`@`host` VIEW ", 
    table_name, " AS ", view_definition, ";") 
    FROM information_schema.views 
    WHERE table_schema='your-database-name';
  2. คัดลอกและเรียกใช้คำสั่ง ALTER

วิธีการเปลี่ยน definer สำหรับกระบวนงานที่เก็บไว้

ตัวอย่าง:

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เป็นชื่อผู้ใช้ที่หายไปเท่านั้น บนเซิร์ฟเวอร์ dev rootท้องถิ่นคุณอาจมักจะใช้เพียง

พิจารณาว่าคุณต้องการให้สิทธิ์ผู้ใช้จริงALLหรือไม่


1
. และไม่จำเป็นต้องใช้ตัวเลือกการอนุญาต
ช่วย

@Simon East: คุณได้ทำการแก้ไขที่น่ารักขอบคุณมากสำหรับการปรับปรุงคำตอบ
Chococroc

ฉันขอแนะนำให้เพิ่มเริ่มต้นอินสแตนซ์ mySQL หลังจากเรียกใช้งาน "UPDATE mysql. procp ชุด definer = 'user @%' WHERE definer = 'root @%'" แบบสอบถาม
johan

1
ฉันคิดว่าการเพิ่มผู้ใช้ที่ไม่มีความหมายง่ายขึ้นเพราะในครั้งต่อไปที่คุณทำ dbdump และนำเข้าคุณไม่จำเป็นต้องทำการแก้ไขมุมมอง / ขั้นตอนอีกครั้ง
DarkMukke

1
ขอบคุณฉันเพิ่งวางตารางที่มีปัญหาลบออกDEFINER=`user`@`host`และนำเข้าอีกครั้ง ทำงานเหมือนจับใจ : ok_hand:
giovannipds

139

ผู้ใช้ที่สร้างมุมมองหรือกระบวนงาน SQL ได้ถูกลบไปแล้ว หากคุณสร้างผู้ใช้รายนั้นขึ้นใหม่ควรแก้ไขข้อผิดพลาดของคุณ


3
นอกจากนี้คุณจะต้องให้สิทธิ์อย่างน้อยSELECTและEXECUTEสิทธิพิเศษแก่ผู้ใช้ที่เพิ่มเข้ามา ฉันพบสิ่งนี้เมื่อฉันส่งออกข้อมูลสำรอง DB จากเซิร์ฟเวอร์หนึ่งไปยังอีกเซิร์ฟเวอร์หนึ่งซึ่งผู้ใช้ที่สร้างกิจวัตรไม่อยู่ในเซิร์ฟเวอร์ทดสอบ
drew010

5
ขอบคุณสิ่งนี้มีประโยชน์ บ่อยครั้งที่การย้ายหรือปรับใช้โดยใช้ mysqldump ผู้ใช้ที่สร้าง VIEW, TRIGGER หรือ PROCEDURE (the definer) อาจไม่เหมือนกันในระบบเป้าหมาย ในกรณีนั้นเพียงแค่สร้างโพรซีเดอร์ขึ้นDROPมาใหม่อีกครั้งทริกเกอร์หรือมุมมอง ( จากนั้นอีกครั้งCREATE) โดยใช้ผู้ใช้ที่ถูกต้องบนระบบเป้าหมายควรทำการหลอกลวง
Eric Kigathi

38
นอกจากนี้คุณยังสามารถเปลี่ยนได้ว่าใครเป็นผู้กำหนดให้กับผู้ใช้ปัจจุบัน:UPDATE mysql.proc SET definer = 'my_new_user@localhost' WHERE db = 'mydatatbase';

1
ในกรณีของฉันฉันมีตารางที่มีทริกเกอร์ที่ชี้ไปยังผู้ใช้ DEFINER ที่ถูกลบ การอัพเดตผู้ใช้ทริกเกอร์แก้ปัญหา
มิเกล

คุณต้องให้สิทธิ์แก่ผู้ใช้นั้นด้วย :) GRANT ALL ON *.* TO 'someuser'@'%' IDENTIFIED BY 'complex-password'; FLUSH PRIVILEGES;
Victor

50

ฉันได้รับข้อผิดพลาดเดียวกันหลังจากอัปเดต mysql

ข้อผิดพลาดได้รับการแก้ไขหลังจากคำสั่งนี้:

mysql_upgrade -u root

ควรดำเนินการ mysql_upgrade ทุกครั้งที่คุณอัพเกรด MySQL จะตรวจสอบตารางทั้งหมดในฐานข้อมูลทั้งหมดว่ามีความเข้ากันไม่ได้กับ MySQL Server รุ่นปัจจุบัน หากพบว่าตารางมีความไม่เข้ากันเป็นไปได้จะมีการตรวจสอบ หากพบปัญหาใด ๆ ตารางจะได้รับการซ่อมแซม mysql_upgrade อัพเกรดตารางระบบเพื่อให้คุณสามารถใช้สิทธิพิเศษหรือความสามารถใหม่ ๆ ที่อาจเพิ่มเข้ามา


ไม่แน่ใจว่าทำไมสิ่งนี้ไม่ทำงานสำหรับฉันฉันต้องลบทริกเกอร์ทั้งหมดใน mySQL workbench ด้วยตนเอง
user752746


34

สร้างผู้ใช้ที่ถูกลบเช่นนี้

mysql> create user 'web2vi';

หรือ

mysql> create user 'web2vi'@'%';

3
หลังจากสร้างผู้ใช้ที่ไม่ได้รับพบข้อผิดพลาดอื่น: ERROR 1142 (42000): TRIGGER command denied to user 'web2vi'@'%' for table 'foo'และควรเพิ่มคำสั่งนี้grant all on *.* to 'web2vi'@'%' identified by ''หลังจากสร้างผู้ใช้
zhuguowei

31

ทำตามขั้นตอนเหล่านี้:

  1. ไปที่ PHPMyAdmin
  2. เลือกฐานข้อมูลของคุณ
  3. เลือกตารางของคุณ
  4. ที่เมนูด้านบนคลิกที่ 'ทริกเกอร์'
  5. คลิกที่ 'แก้ไข' เพื่อแก้ไขทริกเกอร์
  6. เปลี่ยน definer จาก [user @ localhost] เป็น root @ localhost

หวังว่ามันจะช่วย


1
นี่เป็นวิธีแก้ปัญหาที่แท้จริงของคำถามแทนที่จะสร้างผู้ใช้และให้สิทธิ์ เพียงแค่เปลี่ยนคำจำกัดความ
Ankit Chauhan

มีวิธีใดในการค้นหาทริกเกอร์ทั้งหมดในฐานข้อมูล
Mrugesh Mistry

1
ค้นหาทริกเกอร์ทั้งหมด: SHOW TRIGGERS
JerzySkalski

จากบรรทัดคำสั่ง 'แสดงทริกเกอร์' จาก PhpMyAdmin เลือกฐานข้อมูลจากนั้นที่ด้านบนขวาของ navbar คลิกที่ทริกเกอร์
hussainfrotan

21

โซลูชันเป็นเพียงแบบสอบถามบรรทัดเดียวดังนี้:

grant all on *.* to 'ROOT'@'%' identified by 'PASSWORD' with grant option;

แทนที่ROOTด้วยชื่อผู้ใช้ mysql ของคุณ แทนที่PASSWORDด้วยรหัสผ่าน mysql ของคุณ


1
ระวัง: ผู้ใช้ MySQL คำนึงถึงขนาดตัวพิมพ์
Alessio Cantarella

ฉันต้องการflush privilegesหลังจากนี้และใช้งานได้ ขอบคุณ
วิคเตอร์

14

แก้ไขโดยใช้ความคิดเห็นต่อไปนี้

grant all on *.* to 'web2vi'@'%' identified by 'root' with grant option;
FLUSH PRIVILEGES;

หากคุณได้รับsome_otherแทนจากweb2viนั้นคุณต้องเปลี่ยนชื่อตาม


13

สำหรับผู้ใช้ Google ในอนาคต: ฉันได้รับข้อความคล้ายกันพยายามอัปเดตตารางในฐานข้อมูลที่ไม่มีมุมมอง หลังจากการขุดมันกลับกลายเป็นว่าฉันได้นำเข้าทริกเกอร์บนโต๊ะนั้นและสิ่งเหล่านั้นเป็นสิ่งที่กำหนดโดยผู้ใช้ที่ไม่มีอยู่จริง การปล่อยทริกเกอร์ช่วยแก้ปัญหาได้


ทริกเกอร์เป็นปัญหาฉันอัปเดตผู้กำหนดในส่วนทริกเกอร์ ไม่มีปัญหาอีกแล้ว
Darius

ขอบคุณมันมีประโยชน์มาก ยังต้องอัปเดตมุมมอง
toxxxa

มีประโยชน์จริง ๆ :) ฉันจะไม่พบว่าคนเดียว
ElChupacabra

7

ผู้ใช้ 'web2vi' ไม่มีอยู่ในเซิร์ฟเวอร์ mysql ของคุณ

ดูhttp://dev.mysql.com/doc/refman/5.1/en/error-messages-server.html#error_er_no_such_user

หากผู้ใช้นั้นมีอยู่ให้ตรวจสอบว่าเซิร์ฟเวอร์ใดที่สามารถเข้าถึงได้แม้ว่าฉันจะคิดว่าจะเป็นข้อผิดพลาดอื่น (EG คุณอาจมี web2vi @ localhost แต่คุณกำลังเข้าถึง db เป็น web2vi @% (ไม่ว่าอะไรก็ตาม)


7

การแก้ไขอย่างรวดเร็วเพื่อหลีกเลี่ยงและดัมพ์ไฟล์:

mysqldump --single-transaction -u root -p xyz_live_db > xyz_live_db_bkup110116.sql

1
สิ่งนี้ใช้ไม่ได้ definer มีอยู่ในดัมพ์
phil294

หากคุณใช้ mysqlpump ด้วย "p" แทนที่จะเป็น "d" คุณสามารถใช้ --skip-definer
Wouter

@lyhong ฉันไม่มีคำอธิบายโดยละเอียด แต่เห็นได้ชัดว่า--single-transactionเปลี่ยนวิธีการใช้งาน Tables Lock ในระหว่างการถ่ายโอนข้อมูล หรืออะไรทำนองนั้น ฉันจำไม่ได้ว่าอ่านตรงไหน แต่นั่นช่วยให้ฉันรู้สึกสบายใจกับ "แค่โยนธง" ฉันก็ไม่สบายใจกับคำอธิบายที่ไม่ได้อธิบายเพียงทำแบบนี้ "" คำตอบ " ไม่ว่าจะด้วยวิธีใดมันก็ใช้ได้กับกรณีของฉัน
SherylHohman

7
grant all on *.* to 'username'@'%' identified by 'password' with grant option;

ตัวอย่าง:

grant all on *.* to 'web2vi'@'%' identified by 'password' with grant option;

ถ้าฉันให้สิทธิ์ทั้งหมดแก่ 'user' @ 'all ips' แล้วความปลอดภัยล่ะ ?? !!
Mohsen Abasi

@MohsenAbasi นี่เป็นตัวอย่างสำหรับสภาพแวดล้อมการพัฒนา ผู้ใช้รายนี้สามารถเป็นผู้ดูแลระบบ สภาพแวดล้อมที่ต้องใช้ความระมัดระวังมากขึ้น
mesutpiskin

7

เรื่องนี้เกิดขึ้นกับฉันหลังจากย้าย DB จากเซิร์ฟเวอร์หนึ่งไปยังเซิร์ฟเวอร์อื่น เริ่มแรกผู้กำหนดใช้ localhost และผู้ใช้ บนเซิร์ฟเวอร์ใหม่เราไม่มีผู้ใช้รายนั้นและโฮสต์ก็เปลี่ยนไปเช่นกัน ผมเอากลับขึ้นของตารางที่เฉพาะและลบออกทริกเกอร์ทั้งหมดด้วยตนเองจาก phpMyAdmin หลังจากนั้นมันก็ทำงานได้ดีสำหรับฉัน


ขอบคุณสำหรับเคล็ดลับฉันสามารถลบทริกเกอร์ทั้งหมดใน mySQL workbench ด้วยตนเอง
user752746

นี่เป็นปัญหาที่ทริกเกอร์สำหรับฉันฉันต้องลบและสร้างมันใหม่ทั้งหมด
paul.ago

มีวิธีอื่นนอกเหนือจากการสร้างทริกเกอร์หรือไม่? ฉันกำลังใช้การทดสอบทิ้งในบางครั้งวันละสองครั้ง นี่จะรบกวนกระบวนการหลักของฉัน
redestructa

@TS Guhan คุณเพิ่มทริกเกอร์อีกครั้งหลังจากที่คุณลบออกด้วยตนเอง?
MailBlade

6

ฉันมีปัญหาเดียวกันกับผู้ใช้รูทและมันทำงานได้ดีสำหรับฉันเมื่อฉันแทนที่

root@%

โดย

root@localhost

ดังนั้นหากผู้ใช้ 'web2vi' ได้รับอนุญาตให้เชื่อมต่อจาก 'localhost' คุณสามารถลอง:

web2vi@localhost

ฉันเชื่อมต่อกับฐานข้อมูลจากระยะไกล


4

5 เซนต์ของฉัน

ฉันมีข้อผิดพลาดเดียวกันในขณะที่ฉันพยายามเลือกจากมุมมอง

อย่างไรก็ตามปัญหาดูเหมือนว่าเป็นมุมมองนี้เลือกจากมุมมองอื่นที่เรียกคืนจากการสำรองข้อมูลจากเซิร์ฟเวอร์ที่แตกต่างกัน

และในความเป็นจริง YES ผู้ใช้ไม่ถูกต้อง แต่ไม่ชัดเจนว่าจะดูตั้งแต่ครั้งแรก


4

ฉันมีปัญหาเดียวกันของคุณเมื่อไม่กี่นาทีที่ผ่านมาฉันพบปัญหานี้หลังจากลบผู้ใช้ที่ไม่ได้ใช้จากตาราง mysql.user แต่การแก้ไขมุมมองคงที่นี่เป็นคำสั่งที่ใช้ง่ายที่ทำให้มันง่ายมาก:

SELECT CONCAT("ALTER DEFINER=`youruser`@`host` VIEW ",
table_name," AS ", view_definition,";") FROM 
information_schema.views WHERE table_schema='databasename'

ผสมสิ่งนี้กับบรรทัดคำสั่ง mysql (สมมติว่า * ระวังไม่คุ้นเคยกับ windows):

> echo above_query | mysql -uuser -p > alterView.sql
> mysql -uuser -ppass databasename < alterView.sql

หมายเหตุ: คำสั่งจะสร้างและเลือก CONCAT พิเศษบนไฟล์ทำให้mysql -uuser -ppass databasename < alterView.sqlล้มเหลวหากคุณไม่ลบออก

ที่มา: /dba/4129/modify-definer-on-many-views


4

ลองตั้งค่าขั้นตอนของคุณเป็น SECURITY INVOKER

ค่าเริ่มต้นของ Mysql ตั้งค่าความปลอดภัยของโพรซีเดอร์เป็น "DEFINER" (CREATOR OF) .. คุณต้องตั้งค่าความปลอดภัยเป็น "ผู้เรียก"


3

มุมมองของคุณ "view_quotes" อาจถูกคัดลอกมาจากฐานข้อมูลอื่นโดยที่ "web2vi" เป็นผู้ใช้ที่ถูกต้องในฐานข้อมูลที่ "web2vi" ไม่ใช่ผู้ใช้ที่ถูกต้อง
เพิ่มผู้ใช้ "web2vi" ลงในฐานข้อมูลหรือเปลี่ยนมุมมอง (โดยปกติการลบส่วน DEFINER = 'web2vi' @ ''% 'และดำเนินการสคริปต์จะทำเคล็ดลับ)


3

ในกรณีของฉันตารางมีทริกเกอร์กับผู้ใช้ DEFINER ที่ไม่มีอยู่


2
บนเล็บเป็นพิเศษเมื่อแอปถูกโอนจากเซิร์ฟเวอร์ไปยังอีกเครื่องหนึ่ง
zardilior

2

จากการอ้างอิง MySQLของCREATE VIEW:

ส่วนคำสั่ง DEFINER และ SQL SECURITY ระบุบริบทการรักษาความปลอดภัยที่จะใช้เมื่อตรวจสอบสิทธิ์การเข้าถึง ณ เวลาที่เรียกดู

ผู้ใช้นี้จะต้องมีอยู่และดีกว่าเสมอที่จะใช้ 'localhost' เป็นชื่อโฮสต์ ดังนั้นฉันคิดว่าถ้าคุณตรวจสอบว่าผู้ใช้มีอยู่และเปลี่ยนเป็น 'localhost' ในการสร้างมุมมองคุณจะไม่มีข้อผิดพลาดนี้


2

ปัญหาชัดเจน - MySQL ไม่พบผู้ใช้ที่ระบุเป็นผู้กำหนด

ฉันพบปัญหานี้หลังจากซิงโครไนซ์โมเดลฐานข้อมูลจากเซิร์ฟเวอร์การพัฒนานำไปใช้กับ localhost ทำการเปลี่ยนแปลงโมเดลและนำไปใช้กับ localhost อีกครั้ง เห็นได้ชัดว่ามีการกำหนดมุมมอง (ฉันแก้ไข) และดังนั้นฉันจึงไม่สามารถอัปเดตเวอร์ชันท้องถิ่นของฉันได้

วิธีแก้ไข (ง่าย ๆ ) :

หมายเหตุ: มันเกี่ยวข้องกับการลบดังนั้นจึงใช้งานได้ดีสำหรับมุมมอง แต่ให้แน่ใจว่าคุณมีข้อมูลสำรองถ้าคุณลองในตาราง

  1. ล็อกอินเข้าสู่ฐานข้อมูลในฐานะรูท (หรืออะไรก็ตามที่มีกำลังมากพอที่จะทำการเปลี่ยนแปลงได้)
  2. ลบมุมมองตารางหรือสิ่งที่คุณมีปัญหา
  3. ซิงโครไนซ์โมเดลใหม่ของคุณ - จะไม่บ่นเกี่ยวกับสิ่งที่ไม่มีอยู่ตอนนี้ คุณอาจต้องการลบส่วนความปลอดภัยของ SQL DEFINERออกจากคำจำกัดความของรายการที่คุณมีปัญหา

PS นี่ไม่ใช่การแก้ไขที่เหมาะสมหรือดีที่สุดรอบตัว ฉันเพิ่งโพสต์เป็นวิธีแก้ปัญหา (และง่ายมาก)


ฉันใช้คางคก, cn ฉันลบและสร้างใหม่โดยใช้ระบบปฏิบัติการเท่านั้นที่ฉันควรเข้าสู่ระบบเป็นเสียงพึมพำจาก terminal แล้วทำเพียง?
Vasanth Nag KV


2

เหตุใดฉันจึงได้รับข้อผิดพลาดนั้น ฉันจะแก้ไขได้อย่างไร

ฉันใช้เวลาหนึ่งชั่วโมงก่อนพบการตัดสินใจสำหรับปัญหาเช่นนี้ แต่ในกรณีของฉันฉันรันสิ่งนี้:

mysql> UPDATE `users` SET `somefield` = 1 WHERE `user_id` = 2;
ERROR 1449 (HY000): The user specified as a definer ('root'@'%') does not exist

หากคุณต้องการค้นหาปัญหาให้เรียกใช้คำสั่งนี้ทีละตัว:

SHOW PROCEDURE STATUS;
SHOW FUNCTION STATUS;
SHOW TRIGGERS;
SHOW FULL TABLES IN database_name WHERE TABLE_TYPE LIKE 'VIEW';

... และหลังจากแต่ละรายการให้มองหา 'ผู้กำหนด'

ในกรณีของฉันมันเป็นทริกเกอร์เก่าที่มีนักพัฒนาบางคนลืมที่จะลบ


1

ไปที่ส่วนแก้ไขรูทีนและที่ด้านล่างเปลี่ยนประเภทความปลอดภัยจาก Definer เป็น Invoker


4
ไปที่ที่ไหน ซอฟต์แวร์ใด?
kenorb

@kenorb ใน phpMyAdmin คุณสามารถเปลี่ยน MySQL ที่จัดเก็บเป็นประจำ (ขั้นตอนและฟังก์ชัน) เช่นประเภทความปลอดภัย
Mikl

1

หนึ่งหรือหลายมุมมองของคุณที่สร้าง / ลงทะเบียนโดยผู้ใช้รายอื่น คุณจะต้องตรวจสอบเจ้าของมุมมองและ:

  1. สร้างผู้ใช้ใหม่ ในขณะที่คำตอบอื่น ๆ พูด หรือ
  2. สร้างมุมมองที่สร้างโดยผู้'web2vi'ใช้โดยใช้ALTER VIEW

ฉันมีปัญหานี้ครั้งเดียว

ฉันพยายามโยกย้ายมุมมองจาก BD1 ไปยัง BD2 โดยใช้ SQLYog SQLYog สร้างมุมมองใน DataBase อื่น (DB2) อีกครั้ง แต่มันเก็บผู้ใช้ BD1 ไว้ (แตกต่างกัน) ต่อมาฉันก็พบว่ามุมมองที่ฉันใช้ในการสืบค้นของฉันนั้นมีข้อผิดพลาดเหมือนกับคุณแม้ว่าฉันจะไม่ได้สร้างมุมมองก็ตาม

หวังว่าความช่วยเหลือนี้


1

หากนี่เป็นกระบวนการที่เก็บไว้คุณสามารถทำสิ่งต่อไปนี้

UPDATE `mysql`.`proc` SET definer = 'YournewDefiner' WHERE definer='OldDefinerShownBefore'

แต่นี่ไม่แนะนำ

สำหรับฉันทางออกที่ดีกว่าคือการสร้างนิยาม:

create user 'myuser' identified by 'mypass';
grant all on `mytable`.* to 'myuser' identified by 'mypass';

คุณมีข้อผิดพลาดในไวยากรณ์ SQL ของคุณ ตรวจสอบคู่มือที่สอดคล้องกับรุ่นเซิร์ฟเวอร์ MySQL ของคุณเพื่อหาไวยากรณ์ที่ถูกต้องที่จะใช้ใกล้กับ 'ให้สิทธิ์ทั้งหมดใน' mytable '. * เป็น' myuser 'ที่ระบุโดย' mypass ';' ที่บรรทัด 1
Cerin

@Cerin เพียงแค่เปลี่ยน '' รอบ mytable เป็น `` คำตอบของฉันมีจุดมุ่งหมายเพื่อช่วยเหลือผู้ที่มีปัญหานี้ .. คิดทบทวนการลง
คะแนนเสียง

1

เมื่อ mysql.proc ว่างเปล่า แต่ระบบแจ้งให้ทราบเสมอว่า "user@192.168.%" สำหรับ table_name ไม่มีอยู่คุณเพียงรูตในบรรทัดคำสั่ง mysql และประเภท:

CHECK TABLE `database`.`table_name` QUICK FAST MEDIUM CHANGED;
flush privileges;

เกิน!


1

สิ่งนี้เกิดขึ้นกับฉันหลังจากฉันนำเข้าดัมพ์บน Windows 10 ที่มี MYSQL Workbench 6.3 Community โดยมี "root @% ไม่มีอยู่" แม้ว่าผู้ใช้จะมีอยู่จริง ก่อนอื่นฉันพยายามแสดงความคิดเห็นกับ DEFINER แต่นี่ไม่ได้ผล จากนั้นฉันใช้สตริงแทนที่"root @%"ด้วย"root @ localhost"และนำเข้าดัมพ์อีกครั้ง นี้ได้เคล็ดลับสำหรับฉัน.



0

ดูเหมือนว่าผู้ใช้ฐานข้อมูลจะคำนึงถึงตัวพิมพ์ใหญ่และตัวพิมพ์เล็กดังนั้นในขณะที่ฉันมีผู้ใช้รูท '@'% ฉันไม่มีผู้ใช้ ROOT '@'% ฉันเปลี่ยนผู้ใช้ให้เป็นตัวพิมพ์ใหญ่ผ่านทาง workbench และปัญหาได้รับการแก้ไขแล้ว!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.