某些託管服務器允許您的腳本創建數據庫,有些託管服務器不會,並且需要您使用其控制面板。我如何檢查數據庫是否允許我在沒有實際創建任何數據庫的情況下使用給定的用戶/密碼運行此查詢?在嘗試創建數據庫之前檢查用戶權限
因爲如果我沒有足夠的權利,我只想從UI中完全隱藏「創建數據庫」按鈕。
我正在使用PHP和MySQL。謝謝。
某些託管服務器允許您的腳本創建數據庫,有些託管服務器不會,並且需要您使用其控制面板。我如何檢查數據庫是否允許我在沒有實際創建任何數據庫的情況下使用給定的用戶/密碼運行此查詢?在嘗試創建數據庫之前檢查用戶權限
因爲如果我沒有足夠的權利,我只想從UI中完全隱藏「創建數據庫」按鈕。
我正在使用PHP和MySQL。謝謝。
您可以獲得與權利:
SHOW GRANTS FOR CURRENT_USER;
只需創建一個測試腳本
<?php
mysql_connect(...);
$result = mysql_query('CREATE DATABASE testDB');
if (!$result)
{
//Failed
}
else
{
mysql_query('DROP DATABASE testDB');
}
mysql_close();
?>
您可以定義在某個變量,然後寫一個配置文件。
正如Vartec說,SHOW GRANTS FOR CURRENT_USER
是要走的路。我只是將這樣的回答表明,語句的輸出,當你沒有充分的權利:
GRANT USAGE ON *.* TO 'myusername'@'%' IDENTIFIED BY PASSWORD '*8D4A4D198E31D6EA9D7997F7B29A2BCA254178B6'
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, CREATE ROUTINE ON `mydb1`.* TO 'myusername'@'%'
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, CREATE ROUTINE ON `mydb2`.* TO 'myusername'@'%'
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, CREATE ROUTINE ON `mydb3`.* TO 'myusername'@'%'
我寫了需要檢查同樣的事情的安裝程序,這是我來的最佳解決方案也一樣。我在表名的末尾添加了一個散列,所以它與現有表的衝突更少。 – thomasrutter 2009-03-04 09:44:17
或者您可以添加一個額外的檢查來查看testDB是否已經存在,以防止垃圾他人的測試數據庫(請注意第二個SQL命令中的拼寫錯誤)。 – thomasrutter 2009-03-04 09:45:19