我应该为不同的查询类型分别使用SQL帐户吗?

时间:2009-06-20 07:32:30

标签: sql

我正在开始使用一个小型的内部Web应用程序,主要是概念验证,但我们希望将其视为“真正的”应用程序。作为一名DBA,我没有太多的经验,我的小组也没有这方面的经验(因为它是一个PoC,因此拥有一个并不是特别重要)。

我想知道,如果这个网络应用程序上市,我们是否应该为数据库服务器分别设置不同的查询类型?例如。有一个用于SELECT查询的SQL帐户,另一个用于UPDATE / DELETE吗?我无法说服自己这样做有什么特别的优势,但我之前听说过这种技术,所以必须有一些价值。

6 个答案:

答案 0 :(得分:5)

为不同类型的任务设置不同的帐户(例如,批量作业与Web服务)是有用的,并且对每个帐户的连接数等都有限制。这意味着,如果您的批处理作业发疯,则无法取出您的网络应用程序。

您还需要不同的帐户以获得不同的权限。例如,如果您的管理员和用户应用程序是分开的,则应该拥有自己的帐户。这有助于确保如果您的用户应用程序遭到入侵,则无法对您的数据造成太大的损害。

在这两个方面,拥有一个“只读”用户很有用,但前提是你的应用程序没有写入。

答案 1 :(得分:2)

您可以限制匿名用户访问站点时可以访问的主帐户的查询类型。但是,我认为在该子集中每个查询不需要不同的用户。

您想要关注的是每个用户可以访问的数据库/表,而不是特定类型的查询。

答案 2 :(得分:1)

是应用程序使用的这些帐户类型,我想你所指的做法是试图抵御sql injection attacks。如果你确保消毒你的输入,它可能是不必要的。记得bobby tables

只读帐户的另一个原因是允许管理员用户直接在db上运行报告系统活动和调试生产问题。

答案 3 :(得分:1)

是。见Principle of least privilege

  

在信息安全方面,计算机   科学等领域   最小特权原则   被称为最小的原则   特权或最小特权,   需要在特定的   计算的抽象层   环境,每个模块(如一个   进程,用户或程序   我们正在考虑的层的基础)   必须能够只访问这样的   信息和资源   必要的合法   目的。1 [2]当应用于用户时,   条款最少用户访问或   最低权限用户帐户(LUA)   也用,指的是   所有用户在任何时候的概念   应该以尽可能少的特权运行   可能,并启动应用程序   尽可能少的特权。

有很多技术可以帮助公司接受这一原则。许多技术与专注于保留每层的最终用户身份并回答问题的技术属于同一类别:

'谁是“真正的”用户'?

您应该至少了解忽略最小权限原则并使用单个共享数据库用户帐户决定忽略中间层/应用程序服务器和数据库之间的所有交互的后果和风险。有些技术可以作为数据库应用程序开发人员保持高效,并且仍然可以在应用程序中提供强大的安全功能。

此领域的技术示例包括但不限于:

  1. Kerberos票证或X.509 证书(SSL)。
  2. 代理身份验证 - 允许您继续池连接,但代理为每个会话的不同角色。
  3. 除了安全性之外,采用最小特权原则还有其他好处。在许多数据库中,只读连接可以更好地执行,因为它不需要知道和/或参与事务。

答案 4 :(得分:0)

查询类型不需要单独的帐户。通常,与数据库的连接使用数据库用户,该用户与访问Web应用程序的用户无关。

答案 5 :(得分:0)

在“公共”应用程序中,一个好的做法是使用服务帐户访问数据库(运行查询,执行存储过程),并在代码级别计算用户访问控制。

这可以防止您需要将新用户添加到数据库的安全管理器中。

我唯一一次看到使用单独的SQL数据库帐户就是分离应用程序功能,即便如此,它们也是服务帐户。即。

  • 授予选择ReportService
  • 授予选择,更新,删除至TransactionService

然后,您可以根据需要将您的Web应用程序作为ReportService或TransactionService运行。

通过将这两个概念相加(代码中的用户访问,服务的功能区分),您可以有效地对您的用户访问控制机制正在运行进行单元测试。否则,您需要在数据库中设置用户,然后查看从数据库中获得的行为。