这是跟进以下内容:
我正在编写如下视图(我相信这可以进行优化):
包含
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());
用户“ directory”必须具有 SELECT
, CREATE VIEW
和 DROP
权限(由于 or REPLACE
的原因,需要 DROP
)。我不希望他们拥有 DROP
权限,因为directory用户将在由apache拥有的PHP文件中,而且他们不受使用 dir
的限制——因此,他们可以查看用户名和密码。
此外,如果用户实际上是 joe
,我不希望用户仅仅使用 bob_rooms
。我只想为该特定连接的仅那个用户创建视图,并在连接结束时删除 DROP
。我不能指望用户自己执行 DROP
操作。
同时,拥有一个自动删除的临时视图可以消除使用 or REPLACE
的必要性,这意味着我可以为该用户取消奇怪的 DROP
权限。
我猜在SQLlite中,这很容易实现:
CREATE TEMP VIEW ...
SqlLite可以创建临时视图,但MySQL不能吗?