這是跟進:MySQL臨時視圖可能嗎?
Allow users only certain information from database
我做的意見,這樣的(我相信這可以優化):
db.php
這是包含:
$conn = mysql_connect("localhost","directory","dghgffhghf") or die(mysql_error());
mysql_select_db("directory", $conn) or die(mysql_error());
mysql_query("CREATE or REPLACE VIEW {$user}_rooms AS SELECT * FROM rooms WHERE palace = '$user'") or die(mysql_error());
mysql_query("CREATE or REPLACE VIEW {$user}_users AS SELECT * FROM users WHERE palace = '$user'") or die(mysql_error());
mysql_query("CREATE or REPLACE VIEW {$user}_servers AS SELECT * FROM servers WHERE palace = '$user'") or die(mysql_error());
mysql_query("CREATE or REPLACE VIEW {$user}_online_servers AS SELECT * FROM online_servers WHERE palace = '$user'") or die(mysql_error());
在哪裏用戶「目錄」必須具有SELECT
,CREATE VIEW
和DROP
權限(DROP
是必需的,因爲or REPLACE
)。我不希望他們具有DROP
權限,因爲目錄用戶將位於apache擁有的PHP文件中,並且他們不僅限於使用dir
- 因此他們只能查看用戶並通過。
此外,我不希望用戶只是使用bob_rooms
時,他實際上是joe
。我只希望僅在該特定連接處爲該用戶創建視圖,並且只要該連接消失就立即刪除該視圖。我不能依靠用戶以DROP
自己的觀點。
此外,擁有一個可自動刪除的臨時視圖將消除使用or REPLACE
,這意味着我可以爲用戶帶來奇怪的DROP
權限。
我SQLlite想這將是一樣簡單:
CREATE TEMP VIEW ...
SqlLite可以做臨時的觀點,但MySQL不能?
爲什麼你需要放棄它們?這不像他們是靜態的或任何東西(儘管我懷疑這種方式限制用戶訪問的權限,或者授予在不能被信任時編寫自己的SQL查詢的權利)。 – Wrikken 2011-03-30 22:18:28
因爲如果視圖沒有被刪除,任何用戶都可以在知道用戶名的情況下查看其他用戶的信息。這個想法是目錄數據庫包含有關他們的服務器的信息。一些信息是私人的。我給他們訪問他們自己的信息,以便他們可以使用它來向他們的訪問者顯示信息。 – ParoX 2011-03-30 23:27:49
現在有什麼不同?他們仍然可以,他們只是有更少的時間去做它.. – Wrikken 2011-03-30 23:29:33