Как ограничить список баз данных, видимых пользователю
Самородов Федор Анатольевич: Как ограничить список баз данных, видимых пользователю

Хорошо быть администратором. Подключаемся к серверу, разворачиваем список баз данных и до каждой базы нам есть дело!
А в сценариях хостинга или персональной аналитики обычно другая картина. Разворачиваем огромный список баз и листаем, листаем, листаем его в поисках той единственной, к которой у нас есть досуп.
Вот один из наших учебных серверов. У каждого пользователя есть своя база данных, в которой он - полноправный хозяин. Есть также несколько баз, в которые пользователь может заглянуть с ограниченными правами. А к большинству баз данных у пользователя вообще нет никакого доступа. Но все эти факторы не принимаются во внимание SQL-сервером, мы всё равно видим весь список:
Давайте посмотрим, что тут можно придумать.
Пользователь "Фёдор Самородов", подключившись, видит список баз данных благодаря тому, что у роли public есть разрешение VIEW ANY DATABASE.
Вы можете это разрешение отозвать (тогда это изменит картину для всех пользователей), либо запретить индивидуально для некоторых пользователей. Попробуем запретить просмотр этих метаданных для нашего пользователя:
Это сработало! Правда, стало ещё хуже - теперь мы не видим вообще никаких баз, кроме master и tempdb.
Заметьте, что на сам доступ к базам это не повлияло. Если мы знаем название нужной базы данных, то сможем переключиться в её контекст:
К сожалению, добиться желаемой гибкости мы не сможем. В общем случае такая задача не решаема. SQL Server покажет нам только те базы, владельцами которых мы являемся. Причём, учитывается именно фактор владения, членства в роли db_owner недостаточно.
На практике это означает, что вы сможете ограничить видимость баз данных только в тех сценариях, когда пользователи сами владеют своими персональными базами.
Сделаем пользователя владельцем одной из баз:
А теперь обновим список:
Или выполним аналогичный запрос к sys.Databases:
Вот это уже похоже на то, что мы задумали, и это - лучшее, чего мы можем добиться в текущих версиях SQL-сервера.
Подробнее об этом Вы сможете узнать на курсах SQL Server
Ближайшие группы
Заказ добавлен в Корзину.
Для завершения оформления, пожалуйста,
перейдите в Корзину!
От какого лица вы будете оплачивать обучение?