【问题标题】:How to test user's permissions to the database如何测试用户对数据库的权限
【发布时间】:2009-08-21 18:37:44
【问题描述】:

我有一个简单的 .NET 3.5 应用程序,用于使用 ODBCDataSet 更改一些数据库字段。现在 Feature Creep 询问我是否可以根据用户的数据库权限隐藏或显示选项卡和其他控件。

理想情况下,我只想使用 Windows 用户组控制 SQL Server 上的权限,并且该应用程序不会有任何内置的身份验证或权限系统——它只是使用登录用户的 Windows 帐户进行数据库连接。因此,它必须“测试”权限以确定是否为用户显示选项卡。例如,如果他们对某个表具有“写入”权限,那么用于编辑它的选项卡将是可见的;如果没有,标签永远不会为他们加载。

这确实是我需要帮助的部分:如何列出或测试用户对 ODBCDataSet 的权限?

【问题讨论】:

  • 特征蠕变...听起来像一个呆伯特角色。能否将用户的权限存储在单独的表中?
  • 一个更复杂的情况可能是如果用户具有“读/选择”权限但没有“写/更新”权限,我希望避免进行实际更新,尤其是在某些表的情况下不能有无关的记录。但是添加存储过程或单独的表是无害的。嗯……我喜欢。哦,我确实认为 Feature Creep 曾经是 Dilbert 的客串角色。我一直很喜欢拟人化它的想法。 :)

标签: c# .net vb.net ado.net


【解决方案1】:

您是否反对让您的应用了解 Windows 用户组?通常,我们一直使用 AD 组来确保安全,就像您在数据库和 .NET 代码中所说的那样。显示/隐藏功能正是重点。此外,即使出于某种原因他们设法让功能显示,数据库也会检查他们的角色并阻止操作。

就我个人而言,我认为检查 .NET 代码中的角色成员资格是最简单的解决方案(您可以使用 IsInRole 方法进行此操作)。

但是,如果您出于某些原因不能或不想让应用程序了解组名,以防它们发生变化,我理解。可能没有 ODBC 方法进行检查,因为任何方法很可能是专有的和/或依赖于数据库的(SQL Server 等)...除此之外,您必须编写代码来尝试插入/更新命令在已知的测试记录上,看看它是否会返回我猜的 SqlException。

【讨论】:

    【解决方案2】:

    您始终可以尝试/捕获对数据库的调用。这将对数据库的用户进行身份验证,然后创建一个存储过程以返回所有可访问的表。

    【讨论】:

    • 很好奇你最终得到了什么。我没有花时间研究查询用户访问权限的实际情况,我只知道有一些变通方法(即测试更新/选择/等)。
    猜你喜欢
    • 2018-03-21
    • 2010-11-24
    • 2016-03-01
    • 1970-01-01
    • 2013-03-13
    • 2011-01-12
    • 1970-01-01
    • 2020-05-27
    • 2014-09-13
    相关资源
    最近更新 更多