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

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

СФА

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

А в сценариях хостинга или персональной аналитики обычно другая картина. Разворачиваем огромный список баз и листаем, листаем, листаем его в поисках той единственной, к которой у нас есть досуп.

Вот один из наших учебных серверов. У каждого пользователя есть своя база данных, в которой он - полноправный хозяин. Есть также несколько баз, в которые пользователь может заглянуть с ограниченными правами. А к большинству баз данных у пользователя вообще нет никакого доступа. Но все эти факторы не принимаются во внимание SQL-сервером, мы всё равно видим весь список:

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

Давайте посмотрим, что тут можно придумать.

Пользователь "Фёдор Самородов", подключившись, видит список баз данных благодаря тому, что у роли public есть разрешение VIEW ANY DATABASE.

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

Вы можете это разрешение отозвать (тогда это изменит картину для всех пользователей), либо запретить индивидуально для некоторых пользователей. Попробуем запретить просмотр этих метаданных для нашего пользователя:

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

Это сработало! Правда, стало ещё хуже - теперь мы не видим вообще никаких баз, кроме master и tempdb.

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

Заметьте, что на сам доступ к базам это не повлияло. Если мы знаем название нужной базы данных, то сможем переключиться в её контекст:

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

К сожалению, добиться желаемой гибкости мы не сможем. В общем случае такая задача не решаема. SQL Server покажет нам только те базы, владельцами которых мы являемся. Причём, учитывается именно фактор владения, членства в роли db_owner недостаточно.

На практике это означает, что вы сможете ограничить видимость баз данных только в тех сценариях, когда пользователи сами владеют своими персональными базами.

Сделаем пользователя владельцем одной из баз:

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

А теперь обновим список:

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

Или выполним аналогичный запрос к sys.Databases:

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

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

Подробнее об этом Вы сможете узнать на курсах SQL Server

envelope

Спасибо! Вам на e-mail отправлено письмо со ссылкой для подтверждения

Если письмо не пришло, поищите его в папке со спамом или повторите подписку

email-checked.png

Вы подписались на рассылку