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 Dev を制限して、PHP を介していくつかのテーブルでいくつかのクエリを作成したくありませんか?? うーん…無理!

データベース テーブルへのアクセスを禁止するには、PHP または MYSQL ユーザーを操作する必要があります...
または、間違っている場合は、申し訳ありませんが、フォローするのは難しいです!

于 2013-10-21T09:54:36.147 に答える