Подтвердить что ты не робот

SUPER привилегии для этой операции

Я создаю свою базу данных и пользователя navid на моем общем сервере с помощью cpanel (databases -> [email protected] Databases -> add new user), а затем выбрал ВСЕ ПРИВИЛЕГИИ для пользователя navid. Я импортировал mydatabase.sql, когда столкнулся с этой ошибкой.


как исправить ошибку? хранимая процедура отлично работала в localhost.


что такое привилегия 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 
4b9b3361

Ответ 1

Из документации (мой акцент):

привилегия SUPER позволяет учетной записи использовать CHANGE MASTER TO, KILL или mysqladmin kill, чтобы убивать потоки, принадлежащие другим учетным записям (вы всегда может убить ваши собственные потоки), PURGE BINARY LOGS, конфигурация изменения с помощью SET GLOBAL для изменения глобальных системных переменных, mysqladmin debug, включение или отключение ведения журнала, выполнение обновления, даже если включена системная переменная read_only, начиная и остановка репликации на подчиненных серверах, спецификация любой учетной записи в атрибуте DEFINER хранимых программ и представлений, и позволяет вы должны подключиться (один раз), даже если ограничение соединения, контролируемое Достигнута системная переменная max_connections.

Поскольку вы уже navid в базе данных, вам не нужно устанавливать атрибут DEFINER в хранимой процедуре; добавление этой строки приводит к появлению ошибки. Если вы удалите этот оператор, ваша процедура будет создана, и вы не получите ошибку разрешений.

Вам нужно установить DEFINER, если вы настраиваете хранимую процедуру для другого пользователя, по умолчанию хранимая процедура получает тот же контекст безопасности как пользователь, который его создает:

Все сохраненные программы (процедуры, функции и триггеры) и представления может иметь атрибут DEFINER, который называет учетную запись MySQL. Если Атрибут DEFINER опущен из хранимой программы или определения определения, учетной записью по умолчанию является пользователь, создающий объект.

Ответ 2

У меня тоже возникла проблема и исправлена ​​это в MySQL Workbench. В моем случае это связано с тем, что в "Редакторе отправки в SQL > Создать выражение" есть лишний материал, который предотвращает использование без изменений.

Что-то вроде этого:

CREATE ALGORITHM = UNDEFINED DEFINER = schemax @localhost SQL ПРОСМОТР ОПРЕДЕЛЕНИЯ БЕЗОПАСНОСТИ viewName КАК ВЫБРАТЬ....

Измените его так:

CREATE VIEW viewName AS SELECT....

Кажется, сейчас работает, нет необходимости обновлять разрешения. ** Я единственный пользователь моей базы данных.

Ответ 3

У меня была такая же проблема - на моем локальном dev-сервере это было хорошо, но на моем размещенном сервере (через PHPMyAdmin) это дало мне вышеупомянутую ошибку.

Удаление атрибута define было самым простым способом устранить проблему, если вы довольны тем, что определитель является текущим пользователем.

Ответ 4

просто удалите атрибут DEFINER и со значением, например:

CREATE ALGORITHM=UNDEFINED  SQL SECURITY DEFINER VIEW ...

Ответ 5

Не полагайтесь на значения по умолчанию, если очистка поля определителя в phpMyAdmin или других программах не решит, проверьте определитель, не должно быть [email protected], если явно не требуется, но [email protected]%.