所以我目前正在创建一个小型公共网站(例如,用户可以登录并更改个人信息),但我想知道数据库安全性是如何为这类事物设计的,所以我有几个问题。
当互联网用户访问像stackoverflow这样的页面时(没有登录网站),他登录了哪个数据库用户或角色,以便能够看到所有发布的问题?然后,当用户使用他的帐户登录时,他在数据库中的角色是否会发生变化(因为他有更多权利)?
如果我将数据库设置为具有“用户”和“权限”表,我可以确保用户只能访问自己的数据,至少是应用程序端。但是,我如何确保数据仍受数据库保护,因为我认为每个公共用户都有相同的“数据库登录”或“角色”?
我知道我的问题可能有点不清楚,但请不要犹豫要求我澄清。我真的不知道从哪里开始。
感谢。
P.S。:我目前正在使用SQL Server
答案 0 :(得分:1)
数据库角色不会改变,但功能会改变。用户从后端代码授权,而不是直接从数据库授权。如果您尝试为数据库的每个用户创建登录,那将不是一个好的方法,因为可能有数千或数百万的用户以某种方式直接访问具有某些权限的数据库。
答案 1 :(得分:0)
在“用户”表中拥有匿名用户,在“权限”表中拥有最低权限时出了什么问题?
答案 2 :(得分:0)
第一个问题:当用户首次登陆网页时,他们没有“角色”。您的脚本将决定用户可以看到和看不到的内容。
例如,您有一个只有特定用户才能看到的帖子。该帖子默认会隐藏。然后,您的脚本应运行测试以查看用户当前是否已登录,以及该用户是否在权限组中以查看该帖子。如果是,请显示帖子。
无论是哪种方式都无法访问您的数据库。
答案 3 :(得分:0)
你几乎回答了自己的问题。
通常,您的网站将在某个用户帐户下运行,我们称之为“IWEB”,无论用户是否登录您的网站,此用户帐户对于访问您网站的所有人都是相同的。
IWEB将具有从数据库中读取数据的权限。这就是匿名用户的工作方式。
在您的数据库中,您将拥有一个用户表,可能还有一个权限表。 IWEB将获得数据库权限以创建新用户,更新用户。可能会阻止删除用户。
您的应用程序将(尽管IWEB)使用这些表来控制谁有权访问您的应用程序以及谁可以更新内容。应用程序中的错误(例如SQL注入)可能允许恶意用户创建管理员帐户,更改其他用户密码等...
在某些情况下,例如使用Windows身份验证,您可以通过登录到您站点的用户,将其转换为数据库用户并授予他们权限。但是,对于面向公众的网站,您不太可能这样做。
您可能会执行某些操作,其中表不是直接访问的,而是通过存储过程控制,从而拒绝访问基础表。其中一个参数是当前登录的用户,然后可以控制数据库层的访问(防止用户更新另一个用户配置文件)。除非您的应用程序有一个错误,可能允许攻击者更改其当前登录的用户。
这一切都取决于您的安全要求。但主要是,您将控制应用程序的访问权限。