1

所以我目前正在创建一个小型公共网站(例如,用户可以在其中登录和更改个人信息),但我想知道数据库安全性实际上是如何为这类事情设计的,所以我有几个问题。

例如,当互联网用户访问像 stackoverflow 这样的页面时(没有登录该站点),他登录了哪个数据库用户或角色以便能够查看所有发布的问题?那么,当用户用他的账户登录时,他在数据库中的角色是否发生了变化(因为他拥有更多的权限)?

如果我将我的数据库设置为具有“用户”和“权限”表,我可以确保用户只能访问他自己的数据,至少是应用程序端。但是,由于我认为每个公共用户都具有相同的“数据库登录”或“角色”,如何确保数据仍然受到数据库端的保护?

我知道我的问题可能有点不清楚,但请随时向我寻求澄清。我真的不知道从哪里开始。

谢谢。

PS:我目前正在使用 SQL Server

4

4 回答 4

1

数据库角色不会改变,但功能会改变。用户是从后端代码授权的,而不是直接从数据库授权的。如果您尝试为数据库的每个用户创建登录名,那将不是一个好方法,因为可能有成千上万的用户可以通过某些权限直接访问您的数据库。

于 2013-08-29T11:40:09.020 回答
0

你几乎已经回答了你自己的问题。

通常,您的网站将在某个用户帐户下运行,我们称之为“IWEB”,这个用户帐户对于访问您网站的每个人都是一样的,无论用户是否登录到您的网站。

IWEB 将有权从数据库中读取数据。这就是匿名用户的工作方式。

在您的数据库中,您将有一个用户表,可能是一个权限表。IWEB 将被授予创建新用户、更新用户的数据库权限。它可能会被阻止删除用户。

您的应用程序将(通过 IWEB)使用这些表来控制谁可以访问您的应用程序以及谁可以更新什么。您的应用程序中的错误(例如 SQL 注入)可能允许恶意用户创建管理员帐户、更改其他用户密码等...

在某些情况下,例如使用 Windows 身份验证,您可以通过登录到您站点的用户,将其转换为数据库用户并授予他们权限。但是,对于面向公众的网站,您不太可能这样做。

您可能会在不直接访问表但通过存储过程控制的情况下执行某些操作,从而拒绝访问基础表。其中一个参数是当前登录的用户,然后可以控制数据库层的访问(防止用户更新另一个用户配置文件)。当然,除非您的应用程序存在可能允许攻击者更改其当前登录用户的错误。

这完全取决于您的安全要求。但总的来说,您将控制应用程序的访问。

于 2013-08-29T11:59:14.680 回答
0

对于您的第一个问题:当用户第一次登陆网页时,他们没有“角色”。您的脚本将决定用户能看到什么和不能看到什么。

例如,您有一个只有特定用户才能看到的帖子。该帖子将默认隐藏。然后,您的脚本应运行测试以查看用户当前是否已登录,以及该用户是否在权限组中以查看该帖子。如果是,则显示该帖子。

您的数据库不应该以任何一种方式访问​​。

于 2013-08-29T11:44:25.417 回答
0

在 Users 表中拥有匿名用户,在 Permissions 表中拥有最低权限有什么问题?

于 2013-08-29T11:39:11.847 回答