这是跟进: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