Вы можете найти следующий ответ использования:
MySql: Будет ли использование операторов Prepared для вызова хранимой процедуры быстрее с .NET / Connector?
Дополнительно:
GRANT разрешает выполнение только для того, чтобы пользователи уровня приложения могли ВЫЗВАТЬ только хранимые процедуры. Таким образом, пользователи вашего приложения могут взаимодействовать с базой данных только через API хранимых процедур, они не могут напрямую:
select, insert, delete, update, truncate, drop, describe, show etc.
Не намного безопаснее, чем это. Единственное исключение из этого - если вы использовали динамический sql в своих хранимых процедурах, чего я бы избежать любой ценой - или, по крайней мере, помните об опасностях, если вы это сделаете.
При создании базы данных, например foo_db, я обычно создаю двух пользователей. Первый foo_dbo (владелец базы данных) - это пользователь, которому принадлежит база данных и которому предоставлены полные разрешения (ВСЕ), чтобы они могли создавать объекты схемы и манипулировать данными по своему усмотрению. Второму пользователю foo_usr (пользователь приложения) предоставляются только разрешения на выполнение, и он используется из кода моего приложения для доступа к базе данных через API хранимых процедур, который я создал.
grant all on foo_db.* to foo_dbo@localhost identified by 'pass';
grant execute on foo_db.* to foo_usr@localhost identified by 'pass';
Наконец, вы можете улучшить приведенный выше пример кода, используя mysql_real_escape_string:
Надеюсь, это поможет:)