0

对于我正在编写的插件系统,我需要编写一个数据库 API。但是我想限制数据库访问,所以插件不能看到除了他们通过特定函数创建的表之外的其他表。如何启用插件以使用 SQL,但不能同时赋予它们完全访问权限?

这是一些代码,它可能无法正常工作,但它显示了它背后的想法:

class Api_Database {
    private $pluginid;

    function __construct($pluginid) {
        $this->pluginid = $pluginid;
    } 

    function query($sql, $tablename) {
        $db = new Sys_Database;
        $db->query(str_replace('{table}', $pluginid.$tablename, $sql));
    }
}

我在这里思考正确的方向吗?您将如何创建这样一个系统,只会更安全?

4

1 回答 1

0

这个想法是创建一个表,其中包含链接到用户的已创建表的列表......

就像是 :

privileges
user_id
table_name

在您的查询中

SELECT FROM privileges WHERE user_id = '{user_id}' and table_name = '{table}';

并在检查该行是否存在之后。如果是,则用户有权使用该表!

class Api_Database {
    private $pluginid;

    function __construct($pluginid) {
        $this->pluginid = $pluginid;
    } 

    function query($sql, $tablename) {
        $hasPrivilege = $this->checkPrivileges($tablename, $userid);

        if(!$hasPrivilege) return false; //for example

        $db = new Sys_Database;
        $db->query(str_replace('{table}', $pluginid.$tablename, $sql));
    }

    function checkPrivileges($table, $user_id) {
        $db = new Sys_Database;
        $result = $db->query('SELECT id FROM privileges WHERE user_id = "'.$user_id.'" AND table_name = "'.$table.'"');
        return ($result && $result->num_rows);
    }
}

编辑

因此,如果我理解正确,您正在使用 PHP 插件来访问 SQL 数据,但您不能或不想更改它。您也不能添加 SQL 用户,并且您不想限制 PHP 开发人员通过 PHP 在某个表中进行一些查询?哼……不可能!

因为要能够禁止数据库表访问,您必须操作 PHP 或 MYSQL 用户......
或者如果我错了,对不起,很难跟随你!

于 2013-10-21T09:54:36.147 回答