仅使用一个用户访问SQL DB?

时间:2013-09-22 23:45:35

标签: php sql sql-server

我想设计一个连接数据库的php服务器。 我想到了两种方式: 首先,我可以检查用户是否已经注册,然后使用这样的通用用户名授予他访问数据库的权限:

    <?php

    /*
     * database connection variables
     */
    if(username_is_valid()){
       define('DB_USER', "user"); // general db user
       define('DB_PASSWORD', "userpassword"); // db password 
       define('DB_DATABASE', "db_1"); // database name
       define('DB_SERVER', "localhost"); // db server
    }    
?>

或者我可以为每个用户提供唯一的用户名和密码

什么是更好的做法?

2 个答案:

答案 0 :(得分:2)

无需授予用户访问数据库的权限,您可以通过PHP访问mysql并使用PHP访问数据。

因此,您在mysql中分配了一个mysql用户,并使用您的PHP代码使用该用户访问mysql。然后,一旦PHP脚本使用该mysql用户连接到数据库,您就可以从数据库中检索(插入,更新等)数据,并通过PHP / HTML / CSS等将其提供给用户。

  

但是我应该为每个访问数据库的用户设置一个特定的用户名,还是让每个人都使用相同的连接参数?

用户无法访问您的mysql 用户访问您的网站脚本(在本例中为PHP),然后PHP可以访问mysql。

user-&gt; website-&gt; php script-&gt; mysql-&gt;检索数据 - &gt;向用户显示

然而,要回答您的问题,“PHP”(非用户)使用相同的mysql用户连接到您网站上的每个用户的mysql。无论您从mysql提供数据的用户是什么,PHP都可以使用相同的mysql用户 你可以使用不同的mysql用户,但很少,如果你真的需要,你会知道为什么并且已经知道所有这些(即一组非常大的脚本/框架等)

答案 1 :(得分:1)

典型的设计是让应用程序使用单个数据库帐户访问SQL Server数据库。数据库中的表将存储有关应用程序用户的信息,例如用户名,哈希密码,权限,....

应用程序可以使用数据库中的存储过程来访问数据。通过保护表并授予execute对存储过程的应用程序帐户的访问权限,您可以限制应用程序和使用该应用程序凭据的任何其他人可能造成的损害。

将用户的标识传递给存储过程允许他们基于每个用户适当地限制访问,例如,办公室经理可以为办公室里的每个人更改数据。