Я добавляю новый вход с проверкой подлинности SQL Server. Я установил его роль сервера как общедоступную, а затем перешел в режим сопоставления пользователей, выбрав единственную базу данных, к которой этот пользователь должен иметь доступ. Затем я изменил схему по умолчанию на dbo и сделал этого пользователя db_owner.
Затем я подключаюсь к экземпляру, используя учетные данные нового пользователя, и вижу не только базу данных, к которой он должен иметь доступ, но и все остальные подключенные базы данных.
Как я могу ограничить этого пользователя, чтобы он просто видел базу данных, к которой у него есть доступ?
Заранее спасибо!
Для этого вам нужно удалить гостевую учетную запись для всех остальных баз данных. Хотя пользователь может видеть другие базы данных, он не может их открывать и делать что-либо (если гостевая учетная запись или публичная роль в этих базах данных не имеют доступа к чему-либо).
Проверьте ПРОСМОТРЕТЬ ЛЮБУЮ БАЗУ ДАННЫХ разрешение на уровне сервера. Это разрешение предоставляется публичной роли по умолчанию. Вы можете отозвать его для всех, а затем предоставить его специально для тех логинов, которые вы хотите разрешить. В качестве альтернативы, оставьте разрешение по умолчанию на общедоступном и запретите разрешение на вход, если вы не хотите видеть все базы данных.
Проверять, выписываться этот ответ для синтаксиса.
Использование отрицания - не совсем альтернатива. Это будет означать, что логин никогда не увидит перечисленные базы данных, даже если у логина есть к ним разрешение.
Дополнение к ответу Ника Кавадиаса: Не уверен, что это то, что вам нужно, но работает ли это?
USE AdventureWorks
GO
GRANT VIEW MyDatabase TO User1