Назад | Перейти на главную страницу

MSSQL - Скрыть базы данных

У меня есть настроенный и работающий сервер MSSQL 2005. Я хотел бы иметь следующие настройки:

database_one с участием user_one как db_owner
и
database_two с участием user_two как db_owner

Сложность (по крайней мере для меня) в том, что я хотел бы database_one быть скрытым от user_two и database_two быть скрытым от user_one.

Пока что я нашел VIEW ANY DATABASE разрешение. Играя с этим, кажется, что независимо от того, как я настраивал более конкретные разрешения для пользователя, VIEW ANY DATABASE разрешение имеет приоритет.

Если я сбегу DENY VIEW ANY DATABASE TO user_one, подключение как user_one покажет только master и tempdb системные базы данных, даже если user_one настроен как db_owner для database_one.

Есть ли способ настроить разрешения, чтобы делать то, что я хочу?

Помогли бы отдельные экземпляры?

Видимость sys.databases:

Если вызывающий sys.databases не является владельцем базы данных, а база данных не является master или tempdb, минимальные разрешения, необходимые для просмотра соответствующей строки: ALTER ANY DATABASE или VIEW ANY DATABASE на уровне сервера или CREATE DATABASE в главная база данных. Базу данных, к которой подключен вызывающий абонент, всегда можно просмотреть в sys.databases.

Таким образом, видимость по умолчанию именно то, о чем вы просите: каждый пользователь может видеть master, tempdb и свою собственную базу данных. Убедитесь, что user_one - это владелец of database_one (а не просто член роли db_owner!), например:

ALTER AUTHORIZATION ON DATABASE::database_one TO user_one;

Если установка правильная (user_one является владельцем database_one, user_two является владельцем database_two) и никаких дополнительных разрешений не предоставляется тогда вы должны получать именно то, о чем просите. В частности, вам не нужно ничего ОТКАЗАТЬ, тот факт, что вы должны ОТКАЗАТЬ в разрешении, подразумевает, что с вашим тестом что-то не так (вы предоставили дополнительные, ненужные разрешения для входа в систему user_one и user_two).