【问题标题】:SQL Server : can you limit access to only one tableSQL Server:你能限制对一张表的访问吗
【发布时间】:2012-04-04 22:25:48
【问题描述】:

我认为答案是否定的,但我希望让某人访问 SQL Server 数据库,但我真的只希望他们可以访问一个表。

限制某人只能访问一个数据库很容易,但不知道我是否可以限制为单个表。

我的想法是用另一个表的同义词创建另一个数据库,然后限制对该数据库的访问,但我想知道是否有人能想到更好的方法。

我也不相信它会起作用,因为我认为会有权限冲突。

【问题讨论】:

  • 如果您愿意,可以让人们访问单个,创建他们的登录名并授予对您的表的选择权限

标签: sql-server permissions sql-server-2016 grant


【解决方案1】:

是的。

exec sp_msforeachtable "DENY SELECT ON ? TO [username];"
GO

GRANT SELECT ON [schemaName].[tableName] to [username]
Go 

虽然这可行,但您最好使用 roles 和 AD 组来管理权限。

【讨论】:

    【解决方案2】:

    循环遍历所有表并拒绝访问的问题是如果您添加一个新表。

    重要的是不要让用户“db_datareader”访问整个数据库。使用 UI,您可以使用登录下的用户映射选项卡,您可以创建仅具有“公共”访问权限的用户。然后,您可以转到数据库并授予该用户对特定表的 SELECT 访问权限(通过单击 Securables 选项卡下奇怪的“搜索”按钮)。

    这种方法当然也适用于脚本。

    【讨论】:

    • 这比接受的答案更有帮助。我不明白为什么这个答案的票数更少。
    【解决方案3】:
    GRANT SELECT ON [SchemaName].[TableName] to [UserName]
    

    【讨论】:

    • 这如何保护其余的表?
    • 它没有,这就是为什么答案没有被标记为接受,而接受的答案却被标记的原因。不知道你是不是要我指出我错了几个月后我早就忘记了这个答案后的一些奇怪的原因,无论哪种方式,希望我的评论有所帮助。
    • 抱歉这个问题是在聊天中引起我注意的。当我发表评论时,我实际上并没有意识到这个问题有多老。尽管如此,我认为对原始问题的答案的各个方面提出质疑是有效的,无论其接受状态或投票数如何。很多问题都没有公认的答案,而这个问题仍然存在,因为答案旨在帮助 OP 未来的读者。许多人可能会认为页面上的任何答案都是答案。
    • 这可能不完全符合提问者的要求,但这正是我想要的:)
    【解决方案4】:

    当然。 GRANT你想要的权限。

    当您授予用户访问数据库的权限时,请查看为他们分配的角色以及这些角色拥有的权限。

    问题在于人们通常在一开始就授予了过于宽泛的权限。

    【讨论】:

      【解决方案5】:

      当然可以。创建用户并授予他们对数据库的访问权限后,仅授予对该表的选择访问权限(或他们需要的任何级别)。

      【讨论】:

        【解决方案6】:

        更好的方法是创建一个单独的schema,在该schema 中创建一个proc。然后允许用户EXECproc。而已。您可以在 schema 中创建一个 view,这可能是您所追求的更多。

        【讨论】:

          【解决方案7】:

          更好的方法是为该特定表创建安全的。 IT 会问你要保护什么;表、视图、数据库。然后选择特定的表来保护该用户并将该用户排除在该表之外。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2020-05-18
            • 1970-01-01
            • 2020-04-15
            • 2017-04-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-05-04
            相关资源
            最近更新 更多