Как я могу проверить, имеет ли текущий пользователь определенные привилегии на MySQL / MariaDB? - PullRequest
1 голос
/ 19 сентября 2019

Как я могу легко проверить, имеет ли мой текущий пользователь определенную привилегию, например, может ли он выполнить следующее утверждение:

INSERT INTO testdb (id) VALUES ('1');

Конечно, я мог бы попробовать это, но мне нужна информация, прежде чем я узнаючто вставить.Вставить что-либо не работает, так как у меня нет привилегии DELETE.Использование SHOW GRANTS; не достаточно для меня, так как это было бы очень сложно, потому что я мог иметь определенную привилегию для многих способов, например, напрямую, через роль, только для моего хоста и т. Д.

Есть ли более простой способ проверить мои привилегии?

Большое спасибо!

Ответы [ 2 ]

0 голосов
/ 21 сентября 2019

Вы можете использовать INFORMATION_SCHEMA для запроса требуемой привилегии на основании действия, которое необходимо выполнить.

SELECT IF(COUNT(*) > 0, TRUE, FALSE) AS Allowed
FROM INFORMATION_SCHEMA.USER_PRIVILEGES
WHERE GRANTEE LIKE '%user%' AND PRIVILEGE_TYPE = 'INSERT'
0 голосов
/ 20 сентября 2019

Метод начала / отката, упомянутый в комментариях, может быть дорогим и не будет работать для не транзакционных механизмов хранения.

И 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, которая также проверяет разрешения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...