Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Kursor w Mysql ma inne prawa niż użytkownik?

Tak, z założenia kursor może zachowywać się inaczej niż ten sam SELECT zapytanie może się zachowywać, jeśli zostało wykonane przez użytkownika, który wywołał procedurę.

Jeśli nie określisz DEFINER kiedy tworzysz program przechowywany (proc, funkcja, wyzwalacz lub zdarzenie) lub widok, obiekt, po uzyskaniu dostępu, działa z uprawnieniami użytkownika, który go pierwotnie zdefiniował, a nie użytkownika, który go wywołał.

Masz trzy opcje, tutaj:

  • Zweryfikuj lub ewentualnie zmodyfikuj uprawnienia bieżącego DEFINER użytkownik, w stosownych przypadkach; lub,
  • Określ inny DEFINER użytkownik podczas definiowania zapisanego programu lub widoku... możesz to zrobić tak długo, jak ty (osoba tworząca obiekt) masz SUPER uprawnienia, a użytkownicy wywołujący (uzyskujący dostęp) obiekt tymczasowo będą mieli prawa tego DEFINER zamiast tego użytkownik; lub,
  • Dodaj SQL SECURITY INVOKER do definicji procedur, funkcji i widoków (ale nie wyzwalaczy ani zdarzeń), powodując, że obiekt działa z uprawnieniami użytkownika, który go wywołał, zamiast definiującego, co jest zachowaniem domyślnym.

Aby zobaczyć uprawnienia istniejącej osoby definiującej, na przykład, jeśli widzisz DEFINER=`jakiś facet`@`localhost`:

mysql> SHOW GRANTS FOR 'someguy'@'localhost';

Bieżący definiujący można znaleźć w definicji procedury za pomocą SHOW CREATE PROCEDURE procedure_name; .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mysql FROM_UNIXTIME jako UTC

  2. Jak wyświetlić schemat tabeli w bazie danych MySQL?

  3. Dlaczego blokowanie na poziomie tabeli jest lepsze niż blokowanie na poziomie wiersza w przypadku dużych tabel?

  4. Dynamiczna rozwijana wartość z bazy danych

  5. Uwierzytelnianie Windows za pomocą MySQLdb w Pythonie