如何检查当前用户是否对 MySQL/MariaDB 具有特定权限?
How can I check if current user has certain privilege on MySQL/MariaDB?
我怎样才能轻松检查我的当前用户是否有特定权限,例如如果他可以 运行 以下语句:
INSERT INTO testdb (id) VALUES ('1');
当然,我可以试一试,但我需要这些信息才能知道要插入什么。因为我没有删除权限,所以输入任何内容都不起作用。
使用 SHOW GRANTS;
对我来说还不够,因为它会非常复杂,因为我可以在很多方面拥有一定的特权,例如直接,通过一个角色,只为我的主人等..
有没有更简单的方法来检查我的权限?
非常感谢!
评论中提到的 begin/rollback 方法可能很昂贵,不适用于非事务性存储引擎。
MariaDB 和 MySQL 都提供了准备好的语句,您只是不执行它们。在准备过程中,服务器已经检查了权限并将 return 一个错误。
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 Documentation.
中找到
如果准备命令成功,请不要忘记释放准备好的语句。
如果您只需要检查 SELECT、INSERT、UPDATE、DELETE 权限,您还可以使用同样检查权限的 EXPLAIN 命令。
您可以使用 INFORMATION_SCHEMA
根据需要执行的操作查询所需的权限。
SELECT IF(COUNT(*) > 0, TRUE, FALSE) AS Allowed
FROM INFORMATION_SCHEMA.USER_PRIVILEGES
WHERE GRANTEE LIKE '%user%' AND PRIVILEGE_TYPE = 'INSERT'
我怎样才能轻松检查我的当前用户是否有特定权限,例如如果他可以 运行 以下语句:
INSERT INTO testdb (id) VALUES ('1');
当然,我可以试一试,但我需要这些信息才能知道要插入什么。因为我没有删除权限,所以输入任何内容都不起作用。
使用 SHOW GRANTS;
对我来说还不够,因为它会非常复杂,因为我可以在很多方面拥有一定的特权,例如直接,通过一个角色,只为我的主人等..
有没有更简单的方法来检查我的权限?
非常感谢!
评论中提到的 begin/rollback 方法可能很昂贵,不适用于非事务性存储引擎。
MariaDB 和 MySQL 都提供了准备好的语句,您只是不执行它们。在准备过程中,服务器已经检查了权限并将 return 一个错误。
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 Documentation.
中找到如果准备命令成功,请不要忘记释放准备好的语句。
如果您只需要检查 SELECT、INSERT、UPDATE、DELETE 权限,您还可以使用同样检查权限的 EXPLAIN 命令。
您可以使用 INFORMATION_SCHEMA
根据需要执行的操作查询所需的权限。
SELECT IF(COUNT(*) > 0, TRUE, FALSE) AS Allowed
FROM INFORMATION_SCHEMA.USER_PRIVILEGES
WHERE GRANTEE LIKE '%user%' AND PRIVILEGE_TYPE = 'INSERT'