【问题标题】:Select permissions were revoked in SQL Server but the user can still access all tables选择权限在 SQL Server 中被撤销,但用户仍然可以访问所有表
【发布时间】:2019-04-12 17:07:43
【问题描述】:

我已撤销 SQL Server 中用户的选择权限并授予他们访问一个表的权限,但该用户仍然可以查询所有表。

REVOKE SELECT ON "dbo"."TableName" FROM "Domain\user.name"

我对登录名和用户的所有权限进行了双重和三重检查。有人可以引导我朝着正确的方向前进吗?

【问题讨论】:

    标签: sql-server permissions


    【解决方案1】:

    要识别某人在 SQL 中可能拥有的所有权限,您必须查看:

    • 为其域登录配置的 SQL 登录。它是任何服务器级组的成员吗?它是否有任何服务器级别的权限?
    • 它可以访问哪些数据库?
    • 在这些数据库中,它有什么权限?

    我猜你已经这样做了。下一级:

    • 识别已为其创建 SQL 登录的所有域组。
    • 确定您的用户属于这些组中的哪一个。进行与上述相同的检查,例如该组的成员可以在此 SQL 实例中执行什么操作。
    • 请注意,域组可以包含域组。根据您的域管理员控制(或不控制)的方式,您可能会进行疯狂的嵌套级别。这是在域中的活动目录中,您可能有也可能没有足够的访问权限来详细查看。
    • 不要忘记本地(该机器)组,通常默认设置。用户是否是具有提升权限的本地计算机组的成员?您不会在域级别找到任何相关信息。

    这当然假设他们只使用自己的个人域登录,没有别名、“运行方式”、SQL 身份验证登录、应用程序登录,以及一些我现在想不到的更模糊的东西。 (他们可能不会,除非他们让你伤心。)

    请注意,这不是我的想法。配置 SQL 安全性是一门黑魔法;弄清楚谁被配置了可能是一场噩梦(在处理在系统帐户上运行的应用程序时更糟。)祝你好运!

    【讨论】:

    • 该用户是服务器级别和数据库级别的 Public 组的成员,但我无法从中删除它们。我应该为有权访问特定表的用户创建另一个用户组吗?
    • 嗯。是的,公共角色属于我提到的那个“晦涩难懂的东西”。所有登录都是服务器级公共角色的成员,并且所有配置的数据库用户都是数据库公共角色的一部分,并且无法修改。检查已授予这些角色哪些访问权限,因为有权访问(服务器或数据库)的每个人都将拥有这些权限。
    • 您最初的问题是“他们现在如何拥有这些权限”,并且弄清楚这一点非常重要。如何为您的服务器/数据库/应用程序配置整体安全性(即设置域组等)远远超出了这个问题的范围。网络上有很多关于这方面的文章,我建议阅读两三篇以了解可用的选项。
    • 感谢您的帮助。我收紧了公共组的权限,创建了一些服务器级别的角色,所以我没有剥夺其他用户的权限,然后创建了一个数据库级别的角色和 Denied Select 语句来限制对某些表的访问.. 我看了一遍上网一整天,还是找不到答案。有时,即使是正确方向的一点也可以帮助您弄清楚。
    猜你喜欢
    • 2013-07-27
    • 2021-03-03
    • 2011-09-29
    • 2013-02-13
    • 2015-03-15
    • 2020-09-30
    • 2014-01-08
    • 2011-10-26
    • 2015-07-30
    相关资源
    最近更新 更多