【问题标题】:Create user that can only SEE one database, and only select from it?创建只能看到一个数据库的用户,并且只能从中选择?
【发布时间】:2012-04-30 10:13:03
【问题描述】:

我们在 SQL 服务器上有几个数据库。 我们想创建 1 个可以看到数据库“c”但看不到其余数据库的新用户。

该用户应该只能从该数据库中进行选择,不能进行其他选择。
我一直在谷歌搜索和搜索一段时间,我发现最接近的是拒绝查看任何数据库,然后让他们成为数据库所有者。

但我认为这不会限制他们选择,除非我有办法 拒绝除数据库所有者选择之外的所有内容?

提前感谢您的帮助!

编辑:顺便说一句,SQL Server 2008 R2。

Edit2:抱歉,我在原帖中没有说清楚。我希望做到这一点,这样当他们登录时,他们甚至不会看到其他数据库的名称,而不仅仅是他们无法访问它们。

谢谢。

【问题讨论】:

    标签: sql sql-server sql-server-2008 tsql sql-server-2008-r2


    【解决方案1】:

    1) 在服务器上创建用户

    2) 将用户添加到给定的数据库中

    3) 授予对数据库的只读访问权限

    USE [master]
    CREATE LOGIN [SomeUserName] WITH PASSWORD=N'someStr0ngP@ssword', DEFAULT_DATABASE=[c], DEFAULT_LANGUAGE=[us_english], CHECK_EXPIRATION=ON, CHECK_POLICY=ON
    GO
    
    USE [c]
    CREATE USER [SomeUserName] FOR LOGIN [SomeUserName] WITH DEFAULT_SCHEMA=[dbo]
    GO
    
    EXEC sp_addrolemember N'db_datareader', N'SomeUserName'
    

    【讨论】:

    • 请记住,在 2008 年,所有用户都被赋予了无法剥夺的“公共”服务器级角色。如果您只希望他们看到一个数据库,并且您不能通过存储过程或其他中间层限制他们的访问,则您必须将所有其他数据库拒绝为 Public 角色(这可能会搞砸其他所有人)。
    • 我可能有误解,或者我可能只是在我原来的帖子中没有说清楚。我的意思是用户不应该能够看到其他数据库,就像他们登录管理工作室一样,其他数据库甚至都不会出现。有了这个,他们仍然会出现,他们只是无法进入数据库,对吗?有没有办法让他们甚至看不到数据库?
    • “您需要从角色 PUBLIC(SQL SERVER 2005 及更高版本)撤消“查看任何数据库”权限”。我从another post... 偷来的。在那里查看更多信息。
    • @RussellFox 如果您撤销所有数据库,那么用户将看不到任何数据库。除非它们被制成 dbo,这并不总是可取的。我不确定这个问题有没有好的解决方案。
    【解决方案2】:

    deny 是权限方面的默认行为,因此,如果您创建一个用户并将其添加到必要数据库上的 db_datareader 角色,这是它将拥有的唯一权限。它将无法访问其他数据库

    编辑:

    use [master]
    GO
    DENY VIEW ANY DATABASE TO [login]
    GO
    use [master]
    GO
    DENY VIEW SERVER STATE TO [login]
    GO
    

    这将删除登录查看数据库的能力。 然后去你想让他看到的那个,让他成为那个 DB 的所有者

    【讨论】:

    • 对不起,我在帖子中没有说清楚。我正在努力做到这一点,这样他们甚至都不会看到那里的其他基地,或者他们的名字。不仅如此,他们无法访问它们。感谢您的帮助。
    【解决方案3】:

    步骤 1:创建登录

    Step-2:从登录名中删除所有数据库查看权限

    deny view any database to LogInName
    

    Step-3:给数据库的登录权限

    alter authorization on database:: DataBaseName to LogInName
    

    注意:不需要用单引号指定用户名或数据库名称

    【讨论】:

    • 我不确定这个答案是否真的与这个问题有关。无论如何,这是错误的。
    • 这是怎么回事:您说“撤销”,但您的命令是“拒绝”。这些是非常不同的事情。 deny 将完全阻止用户查看任何数据库。 revoke 可能会部分工作......除了简单地将用户添加到数据库将不起作用。当他们没有view any 权限时,他们需要成为所有者才能看到它。
    • 我不知道你为什么将答案标记为否定@AndrewBarber ..无论如何我不是一个 sql server 极客..但它对我有用......答案只集中在被问到的问题......我用谷歌搜索了什么......
    • 根据您的编辑:“删除”根本不是一个更好的词。它不是一个相关的技术术语,一般含义与 Revoke 相同。 DENY “删除”权限。它添加否定许可REVOKE 删除权限...包括DENY 权限。
    【解决方案4】:

    也许这会奏效。

    将用户添加到服务器并映射到正确的数据库。 从服务器中删除用户。

    服务器会通知你 删除服务器用户不会删除与此登录关联的数据库用户。

    单击确定,您将拥有只能访问一个数据库的用户。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-13
      • 2017-07-29
      • 2015-04-12
      • 1970-01-01
      • 2015-02-21
      • 1970-01-01
      相关资源
      最近更新 更多