Подтвердить что ты не робот

Скрыть базу данных SQL из Management Studio

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

    USE [master]
    GO
    CREATE LOGIN [us4] 
        WITH PASSWORD=N'123', 
        DEFAULT_DATABASE=[master], 
        CHECK_EXPIRATION=OFF, 
        CHECK_POLICY=OFF
    
  • Щелкните правой кнопкой мыши в верхней части SQL (имя SQLSERVER) > "Свойства" > "Разрешения" > нажмите на учетную запись пользователя и выберите "Запретить" для просмотра баз данных.

    использовать [мастер] ИДТИ DENY ПРОСМОТРЕТЬ ЛЮБУЮ БАЗА ДАННЫХ [us4]

  • Щелкните правой кнопкой мыши по вновь созданной базе данных, свойствам, файлам и измените владельца на вновь созданную учетную запись. (важное примечание: ALTER ROLE [db_owner] ДОБАВИТЬ ЧЛЕН [us4] не работает)

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

В этот момент, как только пользователь войдет в систему, он увидит мастер, tempdb и также увидит новую БД, которую он является владельцем БД.. Возможно, вы захотите перейти в "Инструменты" > "Опция" и включили опцию скрытия системных объектов, чтобы вы не отображали мастер, tempdb и т.д. Вам также может потребоваться SP1, если этот параметр не работает.

Msg 15110, Level 16, State 1, Line 1
The proposed new database owner is already a user or aliased in the database.

предлагаемое решение для Msg 15110:, чтобы устранить вышеуказанную ошибку, просто удалите пользователя из безопасности базы данных node и повторите попытку

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

Нихилу

Ответ 3

Это фактически не будет работать так, как это имеет смысл, или что вы можете ожидать, что это произойдет. Вы REVOKE ПРОСМОТРЕТЬ ЛЮБУЮ БАЗУ ДАННЫХ из публичной роли, но тогда пользователь должен быть владельцем базы данных базы данных или ее нельзя увидеть, но к нему по-прежнему можно получить доступ. Проблема заключается в недостатке Engine Engine Security и вряд ли будет исправлена ​​в текущей или будущей версии SQL Server. Недавно Erland Sommarskog открыл для него следующий элемент соединения, и недавно он обсуждался в twitter и Microsoft с помощью Microsoft MVP. Проголосуйте за подключение и помогите сделать его более приоритетным для Microsoft:

Подключить отзыв

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

Ответ 4

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

Ответ 5

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

В SQL Server 2005 возможно создание новой роли на стороне сервера. ПРОСМОТР ЛЮБОЙ БАЗА ДАННЫХ - это новое разрешение на уровне сервера. Вход, который предоставляется с этим разрешением, может видеть метаданные, которые описывают все базы данных, независимо от того, принадлежит ли логин или может использовать конкретную базу данных. Обратите внимание: по умолчанию разрешение VIEW ANY DATABASE предоставляется публичной роли. Поэтому по умолчанию каждый пользователь, подключающийся к экземпляру SQL Server 2005, может видеть все базы данных в экземпляре.