Mysql
 sql >> база данни >  >> RDS >> Mysql

Курсорът в Mysql има други права освен потребител?

Да, по дизайн курсорът може да се държи различно от същия SELECT заявката може да се държи, ако е била изпълнена от потребителя, който е извикал процедурата.

Ако не посочите DEFINER когато създавате съхранена програма (процес, функция, тригер или събитие) или изглед, тогава обектът, когато бъде достъпен, се изпълнява с привилегиите на потребителя, който първоначално го е дефинирал, а не на потребителя, който го е извикал.

Тук имате три възможности:

  • Проверете или евентуално променете разрешенията на текущия DEFINER потребител, ако е подходящо; или,
  • Посочете различен DEFINER потребител, когато дефинирате съхранената програма или изглед... можете да направите това, стига вие (лицето, създаващо обекта) да имате SUPER привилегия и потребителите, извикващи (осъществяващи достъп) до обекта, временно ще имат правата на този DEFINER потребител вместо; или,
  • Добавете SQL SECURITY INVOKER към дефиницията на процедури, функции и изгледи (въпреки че не тригери или събития), карайки обекта да се изпълнява с привилегиите на потребителя, който го е извикал, вместо дефинатора, което е поведението по подразбиране.

За да видите разрешенията, които има съществуващият дефинатор, например ако видите DEFINER=`someguy`@`localhost`:

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

Можете да намерите текущия дефинатор в дефиницията на процедурата с 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. Импортирайте данни от електронна таблица на Excel или CVS в MySQL

  2. Обработване на удобен за SEO URL с неанглийски знаци

  3. Как да направя бутон за изпращане, изтриване и актуализиране в една и съща форма, php

  4. Как да тествате дали даден низ е JSON или не?

  5. как да задам стойност на променлива в mysql CREATE TABLE заявка? Java