security - 一个数据库的多个站点和身份验证
问题描述
这可能是一个简单的问题,但这是我第一次以这种方式建立网站,我需要一些建议。
设置:
- 我有两个网站:WS1 和 WS2,每个都有不同的域名。它们都使用 nginx 服务器块指向同一个 IP,并且为每个域名设置了 SSL。我将在 ArangoDB 中使用 Express.js(如果需要,我可以在 ArangoDB 中添加额外的数据库来拆分后端的两个站点)
问题:
- 有时这两个站点会从数据库访问相同的信息,我宁愿不必复制数据,但它们会有不同的身份验证。每个站点对每个站点的每个成员都有不同的帐户身份验证和页面限制。
问题:
- 我将如何设置它以确保安全,以便一个帐户无法访问任何其他站点?每个服务器块中是否需要两个单独的框架?我应该创建两个数据库吗?最好的建议吗?
解决方案
这取决于您的授权框架。
身份验证识别谁正在访问您的站点,并且该身份的一部分是用户、公司/域以及他们所属的角色/组。
授权是对允许该用户、公司/域或角色/组访问的内容的描述。
您可能知道用于用户识别的 cookie 和用户名/密码。用户存储在数据库中并映射到他们所属的公司/域。并且用户也被映射到他们所属的角色/组。
select userID, company from users where username = ?, $username
select group from groups where userID = ?, $userID
数据库中的某些记录可能仅限于单个域/公司,而其他记录可能仅限于角色/组。您将域/公司或角色/组添加为数据库中的列,并在查询中使用它。
select content from companyPages where company = ?
或者
select content from groupPages where group in (select group from groups where userID = ?))
您也可以让来自多个公司/域的用户使用相同的组。
并将其放在一起:
Select content from pages WHERE
group in (select group from groups where userID= ?)
AND company = (select company from users where userID=?);
基本上,您必须定义您的授权方案并将其映射到您的数据模型。
推荐阅读
- typescript - 在“X”类型上找不到带有“字符串”类型参数的索引签名
- python - 对两组或更多组使用石斑鱼会给出错误的情节熊猫
- python - 使用循环创建以列表中元素命名的变量
- python - Python应用程序没有响应
- android - 如何避免 Kotlin 的 WebView 显示空格?
- node.js - mssql 连接和查询的笑话
- r - R read.table:识别.txt文件中的分隔符
- linux - 安全地杀死在 bash 脚本中启动的后台进程
- c++ - 成员函数参数类型是嵌套类
- stored-procedures - 为什么 sp_executesql 给出错误消息说必须声明标量变量?