Я новичок в MS SQL и задаю этот вопрос как веб-разработчик с ограниченным опытом системного администратора, который хочет, чтобы его поставщики услуг использовали лучшие практики.
У нас есть одна база данных на удаленном сервере MS SQL, предоставленная нашей хостинговой компанией. Другие клиенты нашей хостинговой компании используют этот же сервер для своих баз данных. Когда я вхожу на сервер с помощью Microsoft SQL Server Management Studio Express, я вижу много информации, включая имена всех баз данных на сервере и все логины.
Хотя я не могу получить доступ к базам данных других клиентов и не вижу паролей, мне кажется странным, что я даже смогу увидеть эту информацию. Я, конечно, не хочу, чтобы другие клиенты знали имя моей базы данных или мой логин. Когда я сообщил об этом своему провайдеру услуг, он ответил:
Я посоветовался со своим парнем по SQL, и он сказал, что, к сожалению, это ограничение сервера MSSQL. Хотя имена баз данных видны, вы не можете получить доступ к любой базе данных без пароля для этой базы данных.
Вот что я вижу после входа в систему:
Это правильный способ настроить SQL Server? Пожалуйста, подтвердите или опровергните мое подозрение, что ответ отрицательный и мне нужно найти кого-нибудь еще для размещения нашей базы данных.
Говоря о разработке, я могу сказать, что администратор должен иметь возможность привязать всех к их собственной базе данных (и, возможно, также и к мастеру для метаданных). Из MSDN список Защищаемые объекты SQL Server включает базы данных и разрешения включая возможность даже видеть базу данных. Вот является ссылкой на рекомендации MSDN по безопасности для баз данных.
Management Studio получает список баз данных из sys.databases. Разрешения по умолчанию на sys.databases для каждого входа в систему видеть только свою базу данных:
Если вызывающий sys.databases не является владельцем базы данных, а база данных не является master или tempdb, минимальные разрешения, необходимые для просмотра соответствующей строки: ALTER ANY DATABASE или VIEW ANY DATABASE на уровне сервера или CREATE DATABASE в главная база данных. Базу данных, к которой подключен вызывающий абонент, всегда можно просмотреть в sys.databases.
Если у вас есть логины, которые видят базы данных, отличные от их собственных, это означает, что указанные логины имеют ненужные привилегии, такие как CREATE DATABASE.
Использование MS SQL в качестве общего хоста совершенно не кажется мне желательным, но вы получаете то, за что платите. Если в ваших условиях контракта не сказано, что вы получаете собственный экземпляр SQL, а получаете базу данных только в общем экземпляре, то вы действительно получаете то, за что платите.
Это скрывает другие БД и пользователей, но только для одного пользователя (вероятно, то, что вам нужно в любом случае). Я тестировал его на MS SQL 2008 R2.
В Server Management Studio:
Чтобы скрыть базы данных для всех ВХОДОВ, удалите / отмените разрешение «ПРОСМОТР ЛЮБОЙ БАЗЫ ДАННЫХ» для роли общедоступного сервера.
http://sqlism.blogspot.com/2014/10/preventing-logins-and-users-to-see.html