从Management Studio隐藏SQL数据库

Sam*_*mWM 38 sql-server

如何在登录时隐藏您没有访问权限的数据库SQL Server 2005 / 2008

目前,如果用户连接,他们会看到服务器上的所有数据库,这意味着他们必须扫描列表才能找到他们的数据库.

小智 49

经过几个小时试图找出如何创建只能访问1个DB的用户帐户,并且只能看到该数据库.我想我想通了!!!!

  1. 创建一个用户帐户(确保它没有映射到任何数据库,否则你将得到最终错误消息15110,级别16,状态1并注意建议的解决方案)

    USE [master]
    GO
    CREATE LOGIN [us4] 
        WITH PASSWORD=N'123', 
        DEFAULT_DATABASE=[master], 
        CHECK_EXPIRATION=OFF, 
        CHECK_POLICY=OFF
    
    Run Code Online (Sandbox Code Playgroud)
  2. 右键单击SQL(SQLSERVER名称)的上部> Properties> Permissions>点击user account,并选择Deny查看数据库.

    use [master]
    GO
    DENY VIEW ANY DATABASE TO [us4]
    
    Run Code Online (Sandbox Code Playgroud)
  3. 右键单击新创建的数据库,属性,文件,然后将所有者更改为新创建的帐户.(重要说明: ALTER ROLE [db_owner] ADD MEMBER [us4] 不起作用)

    USE [dbname]
    GO
    EXEC dbo.sp_changedbowner @loginame = N'us4', @map = false
    
    Run Code Online (Sandbox Code Playgroud)

此时,一旦用户登录,他将看到Master,tempdb并且还将看到他是数据库所有者的新数据库.您可能想要去Tools>Option并启用隐藏系统对象的选项以便您不要不显示master,tempdb等.如果此选项不起作用,您可能还需要SP1

Msg 15110, Level 16, State 1, Line 1
The proposed new database owner is already a user or aliased in the database.
Run Code Online (Sandbox Code Playgroud)

建议的Msg 15110解决方案:解决上述错误只需从数据库安全节点中删除用户,然后重试

希望有帮助......

尼基尔

  • 这很好,但如果我不希望该用户成为数据库的所有者,但仍然能够在SSMS中查看它,该怎么办? (7认同)
  • 令人惊讶的是,微软仍然没有为这个非常明显的基本安全和隐私问题提供解决方案。请参阅此**八年前的活动功能请求**:https://connect.microsoft.com/SQLServer/feedback/details/273830/need-view-definition-permissions-per-database (2认同)

Jon*_*ias 21

这实际上不会以有意义的方式工作,或者你可能期望它会工作.

REVOKE VIEW ANY DATABASE来自public角色,但随后用户必须是数据库的数据库所有者或者它无法看到,但它仍然可以被访问.

问题是数据库引擎安全性的缺点,并且不太可能在SQL Server的当前版本或未来版本中修复.

Erland Sommarskog刚刚开设了以下连接项目,最近在Twitter和微软上讨论了它SQL MVP's.

投票支持连接并帮助微软更好地修复:

连接反馈

基本上,权限存储在数据库级别,因此需要枚举每个数据库以确定用户是否具有在对象资源管理器中显示数据库的连接权限,这是一项昂贵的任务以及旧的EM如何用于执行操作.

建议的解决方案是在服务器级别维护此信息,这是一个重大变化.

  • +1,这似乎是目前为止最完整和最全面的答案. (2认同)
  • 由于Connect已移至Azure反馈,因此上述链接不再有效.新链接是https://feedback.azure.com/forums/908035-sql-server/suggestions/32889787-n​​eed-view-definition-permissions-per-database (2认同)

Mit*_*eat 14

您需要从角色PUBLIC撤消权限'查看任何数据库'(SQL SERVER 2005以后)

  • 注意:如果您不能让此用户登录您希望他管理的数据库的DBO,或者您希望以这种方式保护多个登录,则这可能对您不起作用,因为只有一个登录可以是实际的DBO一个数据库. (5认同)