首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过PHP限制数据库访问

问通过PHP限制数据库访问
EN

Stack Overflow用户
提问于 2013-10-21 17:50:05
回答 1查看 144关注 0票数 0

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

这里有一些代码,它可能不工作,但它显示了它背后的想法:

代码语言:javascript
复制
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));
    }
}

我的想法是正确的吗?你将如何创建这样一个系统,只会更安全?

EN

回答 1

Stack Overflow用户

发布于 2013-10-21 17:54:36

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

类似于:

代码语言:javascript
复制
privileges
user_id
table_name

在您的查询中

代码语言:javascript
复制
SELECT FROM privileges WHERE user_id = '{user_id}' and table_name = '{table}';

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

代码语言:javascript
复制
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用户...

或者如果我错了,对不起,很难理解你的意思!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19491216

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档