Database 如何安全地允许用户连接到我的数据库?

Database 如何安全地允许用户连接到我的数据库?,database,security,Database,Security,我创建了一个桌面应用程序,用户可以从自己的机器上下载和运行。此应用程序需要网络访问,通常会将更改发送到数据库(托管在我的服务器上),并带有更新、插入等 直接在应用程序中保留密码是不好的,因为如果应用程序被反编译,那么用户可以看到数据库的凭据并自己获得完全访问权限 在服务器端使用GET和POST以及API是否是唯一安全的方法?还有其他选择吗?因此这里有两个问题:1)验证向服务器端PHP/数据库发布POST更新的用户(他们是他们所说的人)和2)防止暴露数据库凭据 1) 您是否使用第三方集成服务器(如

我创建了一个桌面应用程序,用户可以从自己的机器上下载和运行。此应用程序需要网络访问,通常会将更改发送到数据库(托管在我的服务器上),并带有更新、插入等

直接在应用程序中保留密码是不好的,因为如果应用程序被反编译,那么用户可以看到数据库的凭据并自己获得完全访问权限


在服务器端使用GET和POST以及API是否是唯一安全的方法?还有其他选择吗?

因此这里有两个问题:1)验证向服务器端PHP/数据库发布POST更新的用户(他们是他们所说的人)和2)防止暴露数据库凭据

1) 您是否使用第三方集成服务器(如LDAP)对用户进行身份验证

2) 服务器凭据不应存储在应用程序中,因为应用程序中不需要它们。对用户及其请求进行身份验证后,服务器端PHP应该具有一个安全功能,该功能将解密DB凭据,并根据用户提交的信息发出SQL语句

因此,为了回答您的问题,是的,最好的做法是托管一个服务器端框架来处理传入的请求,该框架对用户进行身份验证,然后执行他们的请求

我想如果您希望桌面应用程序能够直接更新数据库(不推荐),您可以存储数据库凭据的加密哈希,并使用解密算法进行解密,然后将其发送到数据库

<?php
    if(isset($_POST['query'])) {
        $query = $_POST['query'];
        $mysqli = new mysqli('localhost', 'my_user', 'my_password', 'my_db');

        //Execute SQL
        if($mysqli->query($query) === TRUE) {
            $mysqli->close();
            echo "successful";
        } else { echo "SQL execution error"; }
    } else { 
        echo "invalid query string"; 
    }
?>

为什么不构建代理Web服务?
您的客户端应用程序发送请求,您的Web服务抓取请求并在数据库上安全地执行它们。

我认为这是正确的做法。我很好奇是否有其他方法可以在不暴露信息的情况下处理它。身份验证是一个独立的问题(因为谁发出请求对我来说并不重要),但是,是的,我得到的是#2。不过,就存储哈希而言,除非将解密算法存储在服务器上,否则仍然是不安全的。。。如果您的服务器上安装了PHP,它可以简单到一个PHP页面,该页面接收桌面应用程序中构造的_POST['query']字符串,并使用存储在服务器端的数据库凭据执行它。使用最简单的PHP页面更新了答案:)
<?php
    if(isset($_POST['query'])) {
        $query = $_POST['query'];
        $mysqli = new mysqli('localhost', 'my_user', 'my_password', 'my_db');

        //Execute SQL
        if($mysqli->query($query) === TRUE) {
            $mysqli->close();
            echo "successful";
        } else { echo "SQL execution error"; }
    } else { 
        echo "invalid query string"; 
    }
?>