Скрыть базу данных SQL из Management Studio - PullRequest
38 голосов
/ 01 июня 2009

Как скрыть базы данных, к которым у вас нет прав доступа, при входе в SQL Server 2005 / 2008?

В настоящее время, если пользователь подключается, он видит все базы данных на сервере, что означает, что он должен просмотреть список, чтобы найти свою базу.

Ответы [ 5 ]

49 голосов
/ 16 сентября 2009

После нескольких часов попыток выяснить, как создать учетную запись пользователя, которая имеет доступ только к 1 БД и может видеть только эту БД. Я думаю, что я понял это !!!!

  1. Создайте учетную запись пользователя ( убедитесь, что она не сопоставлена ​​с какой-либо базой данных, в противном случае вы получите окончательную ошибку Msg 15110, уровень 16, состояние 1 и отметьте предлагаемое решение )

    USE [master]
    GO
    CREATE LOGIN [us4] 
        WITH PASSWORD=N'123', 
        DEFAULT_DATABASE=[master], 
        CHECK_EXPIRATION=OFF, 
        CHECK_POLICY=OFF
    
  2. Щелкните правой кнопкой мыши верхнюю часть SQL (имя SQLSERVER)> Properties> Permissions> Нажмите user account и выберите Deny, чтобы просмотреть базы данных.

    use [master]
    GO
    DENY VIEW ANY DATABASE TO [us4]
    
  3. Щелкните правой кнопкой мыши вновь созданную БД, Свойства, Файлы и измените Владельца на вновь созданную учетную запись. ( важное примечание : ALTER ROLE [db_owner] ADD MEMBER [us4] не работает )

    USE [dbname]
    GO
    EXEC dbo.sp_changedbowner @loginame = N'us4', @map = false
    

В этот момент, как только пользователь войдет в систему, он увидит 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.

предлагаемое решение для сообщения 15110: для устранения вышеуказанной ошибки просто удалите пользователя из узла безопасности базы данных и повторите попытку

Надеюсь, это поможет ...

Нихилу

21 голосов
/ 01 июня 2009

Это на самом деле не сработает так, как это имеет смысл, или вы можете ожидать, что так и будет.

Вы REVOKE VIEW ANY DATABASE из общедоступной роли, но тогда пользователь должен быть владельцем базы данных, иначе он не будет виден, но к нему все еще можно получить доступ.

Проблема заключается в недостатке безопасности компонента Database Engine, который вряд ли будет исправлен в текущем или будущем выпуске SQL Server.

Эрланд Соммарског недавно открыл для этого следующий элемент подключения, и недавно он обсуждался в твиттере и с Microsoft SQL MVP's.

Проголосуйте за подключение и помогите Microsoft исправить положение:

Обратная связь

В основном разрешения хранятся на уровне базы данных, поэтому потребуется перечислить каждую базу данных, чтобы определить, есть ли у пользователя права подключения для отображения базы данных в проводнике объектов, что является дорогостоящей задачей и как использовался старый EM делать вещи.

Предлагаемое решение заключается в том, чтобы эта информация также поддерживалась на уровне сервера, что является существенным изменением.

14 голосов
/ 01 июня 2009

Вам необходимо отозвать разрешение «ПРОСМОТРЕТЬ ЛЮБУЮ БАЗУ ДАННЫХ» из роли PUBLIC (SQL SERVER 2005 и далее)

1 голос
/ 22 июня 2015

Добавление пользователя в базу данных в качестве владельца базы данных после удаления Просмотр любой базы данных права

Это покажет только базу данных, принадлежащую логину в SSMS.

USE master; GO

DENY VIEW ANY DATABASE TO [loginname]; GO

USE [your db]; GO

DROP USER [loginname]; GO

USE master; GO

ALTER AUTHORIZATION ON DATABASE::[your db]TO [loginname]; GO

Примечание: для этого требуется, чтобы логин уже существовал

0 голосов
/ 01 июня 2009

В MS SQL 2005 и 2008 существует настройка на стороне сервера для ограничения баз данных, которые может видеть пользователь. Я нашел следующий текст на sql-server-performance.com

В SQL Server 2005 это возможно с созданием новой роли на стороне сервера. Разрешение VIEW ANY DATABASE - это новое разрешение на уровне сервера. Имя входа, которое предоставляется с этим разрешением, может видеть метаданные, которые описывают все базы данных, независимо от того, владеет ли имя пользователя или может использовать конкретную базу данных. Обратите внимание. По умолчанию разрешение VIEW ANY DATABASE предоставляется публичной роли. Поэтому по умолчанию каждый пользователь, который подключается к экземпляру SQL Server 2005, может видеть все базы данных в этом экземпляре.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...