gpt4 book ai didi

c# - 我怎样才能安全地让用户使用(Postgresql?

转载 作者:太空狗 更新时间:2023-10-30 00:24:28 24 4
gpt4 key购买 nike

我目前正在编写一个主要供开发人员使用的网络应用程序,并且我认为(根据个人经验)有时以不受限制的方式运行自定义搜索会很方便。我想让我的用户对他们的个人数据运行任意多语句 SQL 搜索(额外收费),以便他们当时可以检索与他们的问题相关的数据。

显然,这是需要极其谨慎地完成的事情,所以我想确保我将以正确的方式解决这个问题。

在我看来,主要关注点是:

  • 恶意用户可以运行 DOS(可以通过日志记录跟踪并删除他们的权限)
  • 有人可能以恶意方式运行函数
  • 有人可以访问/修改不属于他们的数据(包括数据库模式)
  • 有人可以删除或修改查询中的数据(我希望他们以受控方式这样做)

要安全地向用户提供这种功能,最安全的方法是什么?

最佳答案

这是危险的领域(我强烈建议您仔细权衡这一要求,因为您将面临明显的危险),但是我会尽力为您提供最安全的方法如果必须的话。

我在这里做的唯一假设是您运行的是当前版本的 PostgreSQL,并且您需要用户远程连接到服务器(使用他们自己的工具)以执行他们的自定义查询。即使他们将它们输入到网页中,只要他们每个人都有一个单独的用户登录数据库服务器,大多数相同的技术仍然适用。

首先,(正如 NoBugs 指出的那样)为了防止用户执行明显的恶意语句(如 UPDATES、DELETES、DROPS 等),您需要确保连接到服务器的用户帐户对数据库只有 SELECT 权限和他们应该能够阅读的表格。查看手册以了解如何为用户定义角色,并为这些角色授予特定权限。

http://www.postgresql.org/docs/9.0/static/user-manag.html http://www.postgresql.org/docs/9.0/static/database-roles.html

Note that you can only limit a user down to a particular table. If users each need to be given access to different parts of a table, then PostgreSQL (and nearly all DBMS's) will not support this out of the box. Your only option would be to try and create some kind of SQL/TCP proxy that intercepts requests, and modifies them somehow to limit query results, before passing on to the database server. This would be extremely difficult even for a very experienced developer!

为了防止(或至少检测)DOS 攻击,您将需要一个外部脚本或进程来每隔几秒关注一次数据库(和/或整个服务器)的资源使用情况,并且可能构建一个如果 PostgreSQL 服务达到极限,则重新启动 PostgreSQL 服务的机制。

You will need to experiment with how long before you should intervene carefully, as it is quite possible for a legitimate query to max things for a few seconds.

正如您提到的,您需要仔细记录谁在尝试执行什么,以及何时执行,如果有必要,您可以从失败中回溯,找出罪魁祸首。为此,您实际上只能依赖系统日志,可以将其配置为写入文件、CSV 或 Syslog。

I would suggest you pre-create some tools to help you quickly search these logs to find what you need before you need to try and find it (pun intended).

最后,您还应该尝试遵循其他标准的管理和安全最佳实践(所有这些都可以在手册中找到),包括:

  • 只允许您的用户从特定的 IP 地址/主机访问(不要让公众有任何机会连接到您的服务器。您的客户将需要静态 IP 来访问系统,但这当然值得考虑以降低风险。
  • 密切关注服务器的所有标准管理任务(尤其是备份、磁盘空间、日志文件维护、索引使用等)

关于c# - 我怎样才能安全地让用户使用(Postgresql?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25255216/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com