মাইএসকিউএল ত্রুটি 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
আমাদের আপনার প্রদর্শনী 'ভিউ_কোটস' দেখান
জর্দেউ

ত্রুটিটি অবশ্যই view_quotesদেখার শর্তে থাকতে হবে ।
শেল

এই মুহুর্তটি সম্পর্কে চিন্তা করার পরে এবং কর্মের সহজতম কোর্সটি ছিল অনুপস্থিত অ্যাকাউন্টটি ডাটাবেসে যুক্ত করা এবং ত্রুটিটি চলে গেল। কোন জটিল প্রক্রিয়া প্রয়োজন। আপনি যদি অ্যাকাউন্টটি যুক্ত করতে পারেন তবে প্রথমে এটি চেষ্টা করুন।
ব্যবহারকারী 1794918

উত্তর:


539

এটি সাধারণত দেখা যায় যখন এক ডেটাবেস বা সার্ভার থেকে অন্য কোনও ভিউ / ট্রিগার / প্রক্রিয়া রফতানি করে ব্যবহারকারী হিসাবে যে সেই বস্তুটি তৈরি করে তা আর বিদ্যমান নেই।

আপনার দুটি বিকল্প রয়েছে:

1. ডিফাইনারটি পরিবর্তন করুন

প্রাথমিকভাবে DEFINERডাম্প থেকে কোনও বিবৃতি অপসারণ করে আপনার ডাটাবেস অবজেক্টগুলি আমদানি করার সময় এটি করা সবচেয়ে সহজ ।

পরে সংশোধনকারী পরিবর্তন করা আরও কূট কৌশলযুক্ত:

দর্শনগুলির জন্য কীভাবে পরিবর্তন করা যায় change

  1. প্রয়োজনীয় 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 স্টেটমেন্টগুলি অনুলিপি করুন এবং চালান

সঞ্চিত পদ্ধতিগুলির জন্য কীভাবে পরিবর্তন করতে হয়

উদাহরণ:

UPDATE `mysql`.`proc` p SET definer = 'user@%' WHERE definer='root@%'

সাবধান থাকুন, কারণ এটি সমস্ত ডাটাবেসের জন্য সমস্ত সংজ্ঞা পরিবর্তন করবে will

অনুপস্থিত ব্যবহারকারী তৈরি করুন

আপনি যদি মাইএসকিউএল ডাটাবেস ব্যবহার করার সময় নিম্নলিখিত ত্রুটিটি খুঁজে পেয়েছেন:

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অনুমতি দেওয়ার দরকার আছে কিনা বা তারা কম দিয়ে পারে কিনা তা বিবেচনা করুন।


1
এবং অনুদান বিকল্প প্রয়োজন হয় না।
helpse

@ সিমন পূর্ব: আপনি একটি সুন্দর সম্পাদনা করেছেন, উত্তরের এত উন্নতি করার জন্য আপনাকে অনেক ধন্যবাদ।
চকোক্রোক

আমি চলমান পরে যোগ প্রস্তাব দিন পুনর্সূচনা মাইএসকিউএল উদাহরণস্বরূপ "আপডেট mysqlprocপি সেট definer = 'ব্যবহারকারী @%' কোথায় definer = 'রুট @%'" ক্যোয়ারী যেহেতু পদ্ধতি definers শুধুমাত্র তারপর রিফ্রেশ করা হয়।
জোহান

1
আমি মনে করি অর্থহীন ব্যবহারকারীদের যুক্ত করা আরও সহজ, কারণ পরের বার আপনি ডিবিডাম্প করবেন এবং এটি আমদানি করবেন, আপনাকে আবারও ভিউ / পদ্ধতি সম্পাদনা করতে হবে না
ডার্কমুক্ক

1
ধন্যবাদ, আমি সমস্যাটি সবেমাত্র টেবিলটি ফেলেছি, DEFINER=`user`@`host`এটিকে সরিয়ে নিয়েছি এবং এটি পুনরায় আমদানি করেছি। কবজির মতো কাজ করেছেন। : ok_hand:
giovannipds

139

মূলত এসকিউএল ভিউ বা পদ্ধতি তৈরি করা ব্যবহারকারীর মুছে ফেলা হয়েছে। আপনি যদি সেই ব্যবহারকারীকে পুনরায় তৈরি করেন তবে এটির আপনার ত্রুটির সমাধান করা উচিত।


3
এছাড়াও আপনাকে যুক্ত ব্যবহারকারীকে কমপক্ষে সুযোগ SELECTএবং EXECUTEসুযোগসুবিধা প্রদান করতে হবে । আমি এটিতে ছুটে এসেছি যখন আমি একটি সার্ভার থেকে অন্য সার্ভারে একটি ডিবি ব্যাকআপ রফতানি করি যেখানে রুটিনগুলি তৈরি করা ব্যবহারকারী পরীক্ষার সার্ভারে উপস্থিত ছিল না।
drew010

5
ধন্যবাদ, এটি সহায়ক ছিল। প্রায়শই, মাইগক্লাম্প্প ব্যবহার করে মাইগ্রেট বা মোতায়েন করার সময় ব্যবহারকারী যা ভিউ, ট্রিগার বা প্রক্রিয়া তৈরি করে (নির্ধারক) টার্গেট সিস্টেমে একই নাও হতে পারে। সেক্ষেত্রে কেবল পদ্ধতিটি DROPপুনরায় তৈরি CREATEকরা, টার্গেট সিস্টেমে কোনও বৈধ ব্যবহারকারী ব্যবহার করে ট্রিগার বা দেখুন ( তারপরে পুনরায় ) কৌশলটি করা উচিত।
এরিক কিগাথি

38
কোনও বিদ্যমান ব্যবহারকারীর কাছে নির্ধারক কে হ'ল এটিও আপনি পরিবর্তন করতে পারবেন:UPDATE mysql.proc SET definer = 'my_new_user@localhost' WHERE db = 'mydatatbase';

1
হুবহু আমার ক্ষেত্রে আমার ট্রিগারযুক্ত একটি টেবিল ছিল যা মুছে ফেলা একটি ডিফাইনার ব্যবহারকারীকে ইশারা করছিল। ট্রিগার ব্যবহারকারী আপডেট করা সমস্যার সমাধান করেছে।
মিগুয়েল

আপনাকে সেই ব্যবহারকারীর অনুমতিও দিতে হবে :) GRANT ALL ON *.* TO 'someuser'@'%' IDENTIFIED BY 'complex-password'; FLUSH PRIVILEGES;
ভিক্টর

50

মাইএসকিএল আপডেট করার পরে আমি একই ত্রুটি পেয়েছি।

এই আদেশের পরে ত্রুটিটি স্থির করা হয়েছে:

mysql_upgrade -u root

মাইএসকিএল_আপগ্রেড প্রতিটি সময় আপনি মাইএসকিউএল আপগ্রেড করা উচিত। এটি মাইএসকিউএল সার্ভারের বর্তমান সংস্করণ সহ অসঙ্গতিগুলির জন্য সমস্ত ডাটাবেসে সমস্ত টেবিল চেক করে। যদি কোনও টেবিলের কোনও সম্ভাব্য অসঙ্গতি পাওয়া যায় তবে এটি পরীক্ষা করা হয়। কোনও সমস্যা পাওয়া গেলে, টেবিলটি মেরামত করা হয়। মাইএসকিএল_আপগ্রেড সিস্টেম সারণীগুলিও আপগ্রেড করে যাতে আপনি যুক্ত করা যেতে পারে এমন নতুন সুযোগসুবিধা বা সক্ষমতার সুযোগ নিতে পারেন।


এটি কেন আমার পক্ষে কাজ করে না তা নিশ্চিত নয়, আমাকে মাইক্রোসফট ওয়ার্কব্যাঞ্চের সমস্ত ট্রিগার ম্যানুয়ালি মুছে ফেলতে হয়েছিল।
ব্যবহারকারী 752746

35

যদি ব্যবহারকারী উপস্থিত থাকে তবে:

mysql> flush privileges;

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. পিএইচপিএমআইএডমিনে যান
  2. আপনার ডাটাবেস নির্বাচন করুন
  3. আপনার টেবিলটি নির্বাচন করুন
  4. উপরের মেনুতে 'ট্রিগার' এ ক্লিক করুন
  5. ট্রিগার সম্পাদনা করতে 'সম্পাদনা' এ ক্লিক করুন
  6. [ইউজার @ লোকালহোস্ট] থেকে রুট @ লোকালহোস্টে নির্দিষ্ট পরিবর্তন করুন

আশা করি এটা সাহায্য করবে


1
এটি ব্যবহারকারীর তৈরি এবং অনুমতি দেওয়ার পরিবর্তে প্রশ্নের আসল সমাধান। শুধু নির্ধারক পরিবর্তন।
অঙ্কিত চৌহান

ডাটাবেসে সমস্ত ট্রিগার খুঁজে পাওয়ার কোনও উপায় আছে কি?
মৃগেশ মিস্ত্রি

1
সমস্ত ট্রিগারগুলি সন্ধান করুন: ট্রিগারগুলি দেখান
জেরজিস্ক্লস্কি

কমান্ড লাইন 'শো ট্রিগারস' থেকে, পিএইচপিএমআইএডমিন থেকে ডাটাবেসটি নির্বাচন করুন এবং তারপরে
নাবারের

21

সমাধান নীচের মত কেবল একটি একক লাইন ক্যোয়ারী:

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

ROOTআপনার মাইএসকিএল ব্যবহারকারীর নাম দিয়ে প্রতিস্থাপন করুন । PASSWORDআপনার মাইএসকিএল পাসওয়ার্ড দিয়ে প্রতিস্থাপন করুন ।


1
সতর্কতা অবলম্বন করুন: মাইএসকিউএল ব্যবহারকারীরা কেস সংবেদনশীল।
আলেসিও ক্যান্টেরেলা

এর flush privilegesপরে আমার দরকার ছিল এবং এটি কাজ করে। ধন্যবাদ।
ভিক্টর

14

এই নিম্নলিখিত মন্তব্যগুলি চালিয়ে স্থির।

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

আপনি যদি some_otherপরিবর্তে পাচ্ছেন web2viতবে সেই অনুযায়ী আপনাকে নামটি পরিবর্তন করতে হবে।


13

ভবিষ্যতের গুগলদের জন্য: আমি একটি ডেটাবেজে কোনও টেবিল আপডেট করার চেষ্টা করে একটি অনুরূপ বার্তা পেয়েছি যাতে কোনও দর্শন নেই। কিছু খননের পরে, দেখা গেল যে আমি সেই টেবিলটিতে ট্রিগার আমদানি করেছি এবং সেগুলি অ-অস্তিত্বশীল ব্যবহারকারী দ্বারা সংজ্ঞায়িত করা জিনিস। ট্রিগারগুলি ফেলে দেওয়া সমস্যার সমাধান করেছে।


ট্রিগাররা বিষয়টি ছিল, আমি ট্রিগার বিভাগে আরও সুনির্দিষ্টভাবে আপডেট করেছি। আর কোন সমস্যা নেই।
দারিয়াস

ধন্যবাদ, এটি খুব সহায়ক। এছাড়াও ভিউ আপডেট করতে হবে।
toxxxa

প্রকৃতপক্ষে খুব সহায়ক :) আমি কখনই এটি একা পাই না।
এলচুপচাবড়া

7

ব্যবহারকারী 'ওয়েব 2vi' আপনার মাইএসকিএল সার্ভারে বিদ্যমান নেই।

দেখা Http://dev.mysql.com/doc/refman/5.1/en/error-messages-server.html#error_er_no_such_user

যদি ব্যবহারকারীর উপস্থিতি থাকে তবে এটি কোন সার্ভারগুলি থেকে অ্যাক্সেস করতে পারে তা পরীক্ষা করুন, যদিও আমি ভেবেছিলাম যে এটি একটি ভিন্ন ত্রুটি হবে (ইজি আপনার কাছে ওয়েব 2vi @ লোকালহোস্ট থাকতে পারে তবে আপনি ডিবিতে ওয়েব 2vi @% হিসাবে অ্যাক্সেস করছেন)


7

চারপাশে কাজ করার জন্য দ্রুত সমাধান এবং ফাইলটি ডাম্প করুন:

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

1
এটা কাজ করে না. নির্ধারকটি ডাম্পের মধ্যে রয়েছে।
phil294

আপনি যদি একটি একটি "ঘ" এর পরিবর্তে "পি" সঙ্গে mysqlpump ব্যবহার করেন, তাহলে-definer --skip ব্যবহার করতে পারেন
Wouter

@lyhong আমার কোনও বিশদ বিবরণ নেই, তবে --single-transactionডাম্পের সময় লক টেবিলগুলি প্রয়োগ করার পদ্ধতিটি দৃশ্যত পরিবর্তন করে। বা এমন কিছু। আমি কোথায় পড়েছি তা মনে নেই তবে এটি "সবেমাত্র পতাকা নিক্ষেপ" করে স্বাচ্ছন্দ্য বোধ করতে সহায়তা করেছিল। আমি অব্যক্ত 'শুধু এটি করুন' "" উত্তরগুলি নিয়েও অস্বস্তি বোধ করছি। যেভাবেই হোক না কেন, এটি আমার ক্ষেত্রে কাজ করেছিল।
শেরিলহোমান

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

উদাহরণ:

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

আমি যদি কোনও 'ব্যবহারকারী' @ 'সব আইপস' কে সমস্ত সুযোগ-সুবিধা দিয়ে থাকি তবে সুরক্ষার কী হবে ?? !!
মোহসেন আবাসি

@ মোহসেনআবাসি এটি উন্নয়নের পরিবেশের জন্য একটি উদাহরণ। এই ব্যবহারকারী সিস্টেম প্রশাসক হতে পারেন। উত্সাহ পরিবেশ আরও যত্নশীল হওয়া প্রয়োজন।
ম্যাসুটপিসকিন

7

এটি একটি সার্ভার থেকে অন্য সার্ভারে ডিবি সরানোর পরে আমার সাথে ঘটেছিল। প্রাথমিকভাবে, নির্ধারকটি লোকালহোস্ট এবং ব্যবহারকারীর ব্যবহার করছিল। নতুন সার্ভারে আমাদের সেই ব্যবহারকারী নেই এবং হোস্টটিও পরিবর্তন করা হয়েছিল। আমি সেই নির্দিষ্ট টেবিলটির ব্যাক আপ নিলাম এবং phpmyadmin থেকে ম্যানুয়ালি সমস্ত ট্রিগার সরিয়েছি । তারপরে এটি আমার পক্ষে ভাল কাজ করছে।


টিপটির জন্য ধন্যবাদ, আমি মাইএসকিউএল ওয়ার্কবেঞ্চে সমস্ত ট্রিগার ম্যানুয়ালি মুছে ফেলতে সক্ষম হয়েছি।
ব্যবহারকারী 752746

এটি আমার জন্য সত্যই একটি ট্রিগার সমস্যা ছিল, আমাকে তাদের সকলকে সরিয়ে এবং পুনরায় তৈরি করতে হয়েছিল
paul.ago

ট্রিগারগুলি পুনরুদ্ধার করা ছাড়া আর কোনও সমাধান আছে কি? আমি কখনও কখনও দিনে দুবার টেস্ট ডাম্প ব্যবহার করি। এটি আমার মূল প্রক্রিয়াগুলিকে ব্যাহত করবে
পুনঃনির্দেশনা

@ টিএস গুহান আপনি নিজে ট্রিগারগুলি মুছে ফেলার পরে পুনরায় যুক্ত করেছেন?
মেলব্ল্যাড

6

আমি প্রতিস্থাপন করার সময় রুট ব্যবহারকারী উত্তরগুলির সাথে আমার একই সমস্যা ছিল

root@%

দ্বারা

root@localhost

সুতরাং, যদি 'ওয়েব 2vi' ব্যবহারকারীর 'লোকালহোস্ট' থেকে সংযোগের অনুমতি দেওয়া হয়, আপনি চেষ্টা করতে পারেন:

web2vi@localhost

আমি ডাটাবেসের সাথে দূরবর্তীভাবে সংযুক্ত আছি।


4

আমার 5 সেন্ট।

আমি একটি ভিউ থেকে নির্বাচন করার চেষ্টা করার সময় আমার একই ত্রুটি হয়েছিল।

তবে সমস্যাটি মনে হয় যে এই ভিউটি, অন্য সার্ভার থেকে ব্যাকআপ থেকে পুনরুদ্ধার করা অন্য দৃশ্য থেকে নির্বাচিত।

এবং প্রকৃতপক্ষে, হ্যাঁ, ব্যবহারকারী অবৈধ, তবে প্রথম চেহারা থেকে কোথায় আসবেন তা স্পষ্ট ছিল না।


4

কয়েক মিনিট আগে আমার আপনার একই সমস্যা হয়েছিল, আমি mysql.user টেবিল থেকে অব্যবহৃত ব্যবহারকারীকে মুছে ফেলার পরে এই সমস্যাটিতে চলে এসেছি, তবে পরিবর্তিত দৃশ্যের সাহায্যে এটি ঠিক হয়ে গেছে, এখানে একটি সহজ আদেশ রয়েছে যা এটি খুব সহজ করে তুলেছে:

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

এটি মাইএসকিএল কমান্ড লাইনের সাথে (মিশ্রণ করুন * নিক্স, উইন্ডোগুলির সাথে পরিচিত নয়) সাথে মিশ্রিত করুন:

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

দ্রষ্টব্য: কমান্ডটি তৈরি করে, ফাইলটিতে অতিরিক্ত সিলেক্ট কনক্যাট তৈরি করে mysql -uuser -ppass databasename < alterView.sql আপনি এটি অপসারণ না করে ব্যর্থ করে

সূত্র: /dba/4129/modify-definer-on-many-views


4

আপনার পদ্ধতি হিসাবে সেট করার চেষ্টা করুন SECURITY INVOKER

মাইএসকিএল ডিফল্ট পদ্ধতিগুলির সুরক্ষাটিকে "ডিফাইনার" (নির্ধারক) হিসাবে নির্ধারণ করে .. আপনাকে অবশ্যই "চালক" এ সুরক্ষা সেট করতে হবে।


3

আপনার ভিউ, "ভিউ_কোটিস" কোনও অন্য ডাটাবেস থেকে অনুলিপি করা হতে পারে যেখানে "ওয়েব 2vi" একটি ডাটাবেসে একটি বৈধ ব্যবহারকারী যেখানে "ওয়েব 2vi" কোনও বৈধ ব্যবহারকারী নয়।
হয় "ওয়েব 2vi" ব্যবহারকারীকে ডাটাবেসে যুক্ত করুন বা ভিউ পরিবর্তন করুন (সাধারণত DEFINER = 'ওয়েব 2vi' @ '%' অংশটি সরিয়ে স্ক্রিপ্টটি কার্যকর করা কৌশলটি কার্যকর করবে)


3

আমার ক্ষেত্রে, টেবিলটির একটি ডিফাইনার ব্যবহারকারীর সাথে ট্রিগার ছিল যা বিদ্যমান ছিল না।


2
পেরেকের ডানদিকে বিশেষত যখন অ্যাপ্লিকেশনটি একটি সার্ভার থেকে অন্য একটিতে স্থানান্তরিত হয়
মার্ডিলিয়র

2

এর মাইএসকিউএল রেফারেন্স থেকে CREATE VIEW:

ডিফাইনার এবং এসকিউএল সুরক্ষা ধারাগুলি দেখার অনুরোধের সময় অ্যাক্সেস সুবিধাগুলি চেক করার সময় সুরক্ষা প্রসঙ্গটি ব্যবহার করা উচিত specify

এই ব্যবহারকারীর অবশ্যই উপস্থিত থাকতে হবে এবং সর্বদা 'লোকালহোস্ট' হোস্টনাম হিসাবে ব্যবহার করা ভাল। সুতরাং আমি মনে করি যে আপনি ব্যবহারকারীর উপস্থিতি পরীক্ষা করে এটি তৈরির দৃশ্যে এটিকে 'লোকালহোস্ট' এ পরিবর্তন করেন তবে আপনার এই ত্রুটি হবে না।


2

সমস্যাটি স্পষ্ট - মাইএসকিউএল ব্যবহারকারীকে নির্দিষ্ট হিসাবে নির্দিষ্ট হিসাবে সন্ধান করতে পারে না।

ডেভলপমেন্ট সার্ভার থেকে ডাটাবেস মডেল সিঙ্ক্রোনাইজ করার পরে, লোকালহোস্টে প্রয়োগ করে, মডেলটিতে পরিবর্তন আনার পরে এবং লোকালহোস্টে পুনরায় প্রয়োগ করার পরে আমি এই সমস্যার মুখোমুখি হয়েছি। স্পষ্টতই এখানে একটি সংজ্ঞা (আমি সংশোধিত) সংজ্ঞায়িত করেছি এবং তাই আমি আমার স্থানীয় সংস্করণটি আপডেট করতে পারিনি।

কীভাবে ঠিক করবেন (সহজেই) :

দ্রষ্টব্য: এটি মুছে ফেলার সাথে জড়িত তাই এটি দর্শনের জন্য ঠিক কাজ করে তবে আপনি টেবিলগুলিতে চেষ্টা করে দেখুন আপনার ডেটা ব্যাক-আপ হয়েছে কিনা তা নিশ্চিত করুন।

  1. রুট হিসাবে ডাটাবেসে লগইন করুন (বা পরিবর্তনের জন্য পর্যাপ্ত শক্তি রয়েছে যার মধ্যে)।
  2. ভিউ, টেবিল বা আপনার যে কোনও সমস্যায় পড়ছে তা মুছুন।
  3. আপনার নতুন মডেলটি সিঙ্ক্রোনাইজ করুন - এটি এমন কিছু সম্পর্কে অভিযোগ করবে না যা এখন নেই। আপনি যে আইটেম সংজ্ঞা নিয়ে সমস্যায় পড়েছেন তা থেকে আপনি এসকিউএল সুরক্ষা ডিফাইনার অংশটি সরাতে পারেন ।

পিএস এটি কোনও যথাযথ বা সর্বোত্তম-সর্বত্র ফিক্স নয়। আমি কেবল এটি একটি সম্ভাব্য (এবং খুব সহজ) সমাধান হিসাবে পোস্ট করেছি।


আমি টোড ব্যবহার করছি, সিএন মুছে ফেলি এবং পুনরায় তৈরি করব যে কেবল ওএসেরই টার্মিনাল থেকে রয় হিসাবে লগইন করা উচিত এবং কেবল তখনই করা যায় ??
ভাসান্থ নাগ কেভি


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

সম্পাদনা রুটিন বিভাগে যান এবং নীচে, সুরক্ষা প্রকারটি ডিফাইনার থেকে ইনভোকারে পরিবর্তন করুন।


4
কোথায় যাবে? কোন সফটওয়্যারটিতে?
কেনারব

@kenorb, পিএইচপিএমআইএডমিনে আপনি মাইএসকিউএল সংরক্ষিত রুটিনগুলি (পদ্ধতি এবং ফাংশন), যেমন সুরক্ষা প্রকার পরিবর্তন করতে পারেন।
মিক্ল

1

আপনার এক বা একাধিক মতামত যেখানে অন্য ব্যবহারকারীর দ্বারা তৈরি / নিবন্ধিত হয়েছে। আপনাকে এই দর্শনটির মালিক এবং:

  1. ব্যবহারকারীর পুনরুদ্ধার; অন্যান্য উত্তর হিসাবে বলে। অথবা
  2. মতামত পুনঃ যেখানে ব্যবহারকারী দ্বারা নির্মিত 'web2vi'ব্যবহার ALTER দেখুন

আমি একবার এই সমস্যা ছিল।

আমি এসকিউএলইগ ব্যবহার করে বিডি 1 থেকে বিডি 2 এ ভিউগুলি স্থানান্তরিত করার চেষ্টা করছিলাম। এসকিউএলইগ অন্য ডেটাবেসে (ডিবি 2) এ মতামতগুলি পুনরায় তৈরি করেছে, তবে এটি বিডি 1 এর ব্যবহারকারীদের (তারা যেখানে আলাদা সেখানে) রাখে। পরে আমি বুঝতে পেরেছিলাম যে আমার জিজ্ঞাসায় আমি যে ভিউগুলি ব্যবহার করছি তাতে আপনার মতো একই ত্রুটি ছিল, এমনকি আমি কোনও ভিউ তৈরি না করাকালীনও।

এই সাহায্য আশা করি।


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';

আপনার এসকিউএল সিনট্যাক্সে আপনার একটি ত্রুটি রয়েছে; 'মাইটাবেল' এর উপর সমস্ত অনুদানের জন্য 'সঠিক ব্যবহার করতে আপনার মাইএসকিউএল সার্ভার সংস্করণের সাথে সম্পর্কিত ম্যানুয়ালটি পরীক্ষা করুন * লাইনে 1
সেরিন

@ সেরিন, আমার 'টেবিলের আশেপাশে' 'পরিবর্তন করুন `` ` আমার উত্তরটির উদ্দেশ্য এই সমস্যাটি দিয়ে মানুষকে সহায়তা করা .. আপনার
ডাউনটাতে

1

যখন mysql.proc খালি থাকে, তবে সিস্টেম সর্বদা খেয়াল করে "user@192.168.১০" টেবিলের নামের জন্য কোনও অস্তিত্ব নেই, আপনি কেবল mysql কমান্ড লাইনে রুট করুন এবং টাইপ করুন:

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

শেষ!


1

আমার সাথে এমআইএসকিউএল ওয়ার্কবেঞ্চ 6.3 সম্প্রদায়ের সাথে উইন্ডোজ 10 এ একটি ডাম্প আমদানি করার পরে আমার সাথে এটি ঘটেছিল, "রুট @% উপস্থিত নেই"। যদিও ব্যবহারকারীর অস্তিত্ব ছিল। প্রথমে আমি ডিফলারটিকে মন্তব্য করার চেষ্টা করেছি তবে এটি কার্যকর হয়নি। আমি তারপরে "রুট @ লোকালহোস্ট" এর সাথে "রুট @ %" এ স্ট্রিং প্রতিস্থাপন করেছি এবং ডাম্পটি পুনরায় আমদানি করেছি। এটি আমার জন্য কৌশলটি করেছে।



0

ডাটাবেস ব্যবহারকারীও কেস-সংবেদনশীল বলে মনে হয়, সুতরাং আমি যখন একটি '@'% ব্যবহারকারী ছিলাম তখন আমার কাছে কোনও রুট '@'% ব্যবহারকারী ছিল না। আমি ওয়ার্কবেঞ্চের মাধ্যমে ব্যবহারকারীকে বড় হাতের বদলে পরিবর্তন করেছি এবং সমস্যার সমাধান হয়েছে!

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.