php - MySQL 临时 View 可能吗?

标签 php mysql sql permissions views

这是跟进:

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()); 

用户“目录”必须具有SELECTCREATE VIEWDROP 权限(DROP 是因为 或 REPLACE 而需要)。我不希望他们有 DROP 权限,因为目录用户将在 apache 拥有的 PHP 文件中,并且他们不使用 dir 限制它 - 所以他们可以只需查看用户并通过。

此外,我不希望用户在实际上是 joe 时只使用 bob_rooms。我只希望在该特定连接上仅为该用户创建 View ,并在连接消失后立即删除。我不能指望用户自行DROP View 。

此外,拥有一个自动删除的临时 View 将消除 或 REPLACE 的使用,这意味着我可以为用户获取奇怪的 DROP 权限。

我想在 SQLlite 中它会很简单:

CREATE TEMP VIEW ...

SqlLite 可以做临时 View ,而 MySQL 不能?

最佳答案

我不知道临时 View ,但支持临时表。因此,您可以做一些事情,在其中创建一个临时表,该表的结构与它们正在镜像的表具有相同的结构,例如房间的 temp_bob_rooms。然后在临时表中插入一个从真实表中选择的内容,并加上适当的限制,例如:

INSERT INTO temp_bob_rooms (SELECT * FROM rooms WHERE user='bob');

然后当用户完成他的 session 时,临时表将自动删除,因此目录用户不再需要 DROP 访问。您可以在此处阅读有关临时表的更多信息:

http://www.tutorialspoint.com/mysql/mysql-temporary-tables.htm

这种方法的缺点是,在与临时表的 session 打开期间,不会使用插入“真实”表中的数据更新临时表。

另一种方法可能是简单地编写一个脚本,该脚本将为每个真实用户生成一个 mysql 用户、适当的 View ,并将对这些 View 的权限授予适当的用户。该方法的唯一缺点是您的 db.php 文件将不再对任何人有用,因为每个用户都必须使用正确的密码和用户名创建他或她自己的连接。

关于php - MySQL 临时 View 可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5492969/

相关文章:

php - (PHP) 从类代码中取消设置一个对象

php - 使用 php if 语句进行过滤

mysql - 我如何处理带有 promise 而不是回调的嵌套查询?

php - 如果失败则回滚多个更新查询

mysql - 如何在 Windows Server 2012 上禁用 MySQL 5.6.14 的警告?

sql - Django 中的复杂模型关系

php - 如何在Google Compute Engine中使用适用于PHP的Google App Engine SDK

sql - Hive-SUM中的ELSE

mysql - 加入两个表并按问题分组

php - 当主键名称列不是 id 时,Laravel 中验证的唯一规则