Это продолжение:
Разрешить пользователям только определенную информацию из базы данных
Я делаю представления как таковые (я уверен, что это можно оптимизировать):
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
, так как пользователь каталога будет находиться в файле PHP, принадлежащем apache, и они не ограничены этим с помощью dir
- так что они могут просто просматривать пользователя и передавать.
Кроме того, я не хочу, чтобы пользователь просто использовал bob_rooms
, когда он на самом деле joe
.Я только хочу, чтобы представление было создано ТОЛЬКО для этого пользователя в этом конкретном соединении, и DROP, как только соединение исчезло.Я не могу полагаться на пользователя DROP
для просмотра самостоятельно.
Кроме того, наличие временного представления с автоматическим удалением исключило бы использование or REPLACE
, что означает, что я могу взять нечетное DROP
разрешения для пользователя.
Я думаю, что в SQLlite это будет так просто:
CREATE TEMP VIEW ...
SqlLite может делать временные представления, но MySQL не может?