Метод начала / отката, упомянутый в комментариях, может быть дорогим и не будет работать для не транзакционных механизмов хранения.
И MariaDB, и MySQL предоставляют подготовленные операторы, которые вы просто не выполняете.Во время подготовки сервер уже проверяет привилегии и выдаст ошибку.
Пример на C:
const char *stmt_str= "INSERT INTO t2 VALUES (?)";
if (mysql_stmt_prepare(stmt, stmt_str, strlen(stmt_str))
{
printf("Error: %s\n", mysql_stmt_error(stmt));
}
Пример на SQL:
mysql> prepare my from "insert into t2 values (?)";
ERROR 1142 (42000): INSERT command denied to user 'foo'@'localhost' for table 't2'
Это решение, однако,ограничено, так как не все операторы SQL могут быть подготовлены.Список разрешенных операторов можно найти в документации MariaDB .
В случае успешного выполнения команды подготовки не забудьте освободить подготовленный оператор.
Если вынужно только проверить привилегии SELECT, INSERT, UPDATE, DELETE, вы также можете использовать команду EXPLAIN, которая также проверяет разрешения.