簡體   English   中英

如何檢查當前用戶是否對 MySQL/MariaDB 有一定的權限?

[英]How can I check if current user has certain privilege on MySQL/MariaDB?

如何輕松檢查當前用戶是否具有特定權限,例如他是否可以運行以下語句:

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

當然,我可以嘗試一下,但在知道要插入什么之前我需要這些信息。 因為我沒有刪除權限,所以放入任何東西都不起作用。 使用SHOW GRANTS; 對我來說還不夠,因為它會非常復雜,因為我可以在很多方面擁有一定的特權,例如直接,通過角色,只為我的主人等。

有沒有更簡單的方法來檢查我的權限?

非常感謝!

評論中提到的開始/回滾方法可能很昂貴,並且不適用於非事務性存儲引擎。

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 命令來檢查權限。

您可以使用INFORMATION_SCHEMA根據需要執行的操作來查詢所需的權限。

SELECT IF(COUNT(*) > 0, TRUE, FALSE) AS Allowed
FROM INFORMATION_SCHEMA.USER_PRIVILEGES
WHERE GRANTEE LIKE '%user%' AND PRIVILEGE_TYPE = 'INSERT'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM