2013-08-28 18 views
23

Tworzę bazę danych i użytkownika navid na serwerze udostępnionym pod numerem cpanel (databases -> [email protected] Databases -> add new user), a następnie wybieram WSZYSTKIE UPRAWNIENIA dla użytkownika navid. Importowałem mydatabase.sql, gdy miałem do czynienia z tym błędem.Uprawnienia (uprawnienia) SUPER dla tej operacji


Jak naprawić błąd? procedura sklepu działała dobrze w localhost.


Co to jest przywilej SUPER?

Error 
SQL query: 
DELIMITER $$-- 
-- Procedures 
-- 
CREATE DEFINER = `navid`@`%` PROCEDURE `d_answer` (OUT `sp_out` INT(11) , IN `sp_id` INT(11)) NO SQL BEGIN DELETE FROM `tblname` WHERE `a_id` = sp_id; 
SET sp_out = ROW_COUNT() ; 
END$$ 

MySQL said: Documentation 
#1227 - Access denied; you need (at least one of) the SUPER privilege(s) for this operation 
+1

Dlaczego downvote? – Ben

+0

@Ben - co masz na myśli? – navid

+0

Nie wiem, w jaki sposób mogę przyznać przywileje (uprawnienia) SUPER dla tej operacji na serwerze współdzielonym – navid

Odpowiedz

34

Z documentation (podkreślenie moje):

SUPER przywilej umożliwia konto aby używać CHANGE MASTER, zabić lub zabić mysqladmin zabić wątki należące do innych kont (ty zawsze zabij swoje własne wątki), WYPEŁNIJ LOGOWANIA BINARNE, konfigurację zmienia za pomocą SET GLOBAL, aby zmodyfikować globalne zmienne systemowe, polecenie debugowania mysqladmin, włączanie lub wyłączanie rejestrowania, przeprowadzanie aktualizacji , nawet jeśli zmienną systemową read_only jest włączone, zaczynając i zatrzymanie replikacji serwerów podrzędnych, specyfikację dowolnego konta w atrybucie Definer zapisanych programów i poglądów i umożliwia podłączenie (raz), nawet jeśli limit połączenia sterowane przez zmienną systemową max_connections jest osiągnięty.

Ponieważ jesteś już navid do bazy danych, nie trzeba ustawić atrybut DEFINER w procedurze przechowywanej; dodanie tej linii powoduje pojawienie się błędu. Jeśli usuniesz to stwierdzenie, twoja procedura zostanie utworzona i nie otrzymasz błędu uprawnień.

Wystarczy tylko ustawić DEFINER jeśli ustanowienie procedury przechowywanej dla innego użytkownika, domyślnie procedura przechowywana dostaje ten sam kontekst zabezpieczeń as the user that is creating it:

Wszystkie zapisane programy (procedury, funkcje, i wyzwalacze) i widoki mogą mieć atrybut DEFINER, który nazywa konto MySQL. Jeśli atrybut DEFINER został pominięty z definicji zapisanego programu lub widoku, domyślnym kontem jest użytkownik, który utworzył obiekt.

+0

Naprawdę? Nie jest konieczne używanie definicji w mojej procedurze sklepu? – navid

+1

Nie, robisz to tylko wtedy, gdy ustawiasz procedurę składowaną w imieniu innego użytkownika; i aby to zrobić, musisz mieć uprawnienia "SUPER". –

+0

@Burhan Khalid - tak, masz rację, dziękuję :) – navid

8

Mam również problem i poprawiono go w MySQL Workbench. W moim przypadku jest tak, ponieważ "Wyślij do edytora SQL> Utwórz instrukcję" zawiera dodatkowe elementy, które uniemożliwiają korzystanie z nich bez modyfikacji.

coś takiego:

TWORZENIE algorytm = niezdefiniowany Definer = schemax @localhost SQL DEFINER SECURITY WIDOK viewName AS SELECT ....

zmienić go na to:

Utwórz widok viewName AS SELECT ....

wydaje się działać teraz, nie ma potrzeby, aby zaktualizować uprawnienia. ** Jestem jedynym użytkownikiem mojej bazy danych ..

+0

Dziękuję bardzo. – Divakarcool

+0

Sprawdź definiujący, nie powinien być "nazwa_użytkownika @ localhost", chyba że jest to wyraźnie potrzebne, ale "nazwa_użytkownika @%" –

1

Miałem ten sam problem - na moim lokalnym serwerze dev było w porządku, ale na moim hostowanym serwerze (przez PHPMyAdmin) dało mi powyższy błąd.

Usunięcie atrybutu definiującego wydawało się najprostszym sposobem rozwiązania problemu, jeśli jesteś zadowolony z tego, że definiującym jest bieżący użytkownik.

+0

Sprawdź, czy definicja nie jest "nazwa_użytkownika @ localhost", chyba że jest to wyraźnie potrzebne, ale "nazwa_użytkownika @%" –

0

nie należy polegać na wartościach domyślnych, jeśli opróżniania pole ustalający w phpMyAdmin lub innych programów nie rozwiąże, sprawdź Definer, nie powinno być [email protected] ile wyraźnie nie potrzebne, ale [email protected]%.

1

prostu usunąć Definer atrybutu i jego wartość, na przykład:

CREATE ALGORITHM=UNDEFINED SQL SECURITY DEFINER VIEW ...