Как отключить среду SQL Server Management Studio для пользователя

есть ли способ запретить пользователям входить в SQL Server Management Studio, чтобы они не могли просто редактировать строки таблицы вручную? Им еще нужно получить доступ к таблицам, запустив приложение Мои.

11 ответов


вы НЕ нужно беспокоиться о том, что у них есть доступ к инструменту. Просто убедитесь, что они не знают имена входа SQL для конкретных баз данных, имеющих разрешения на чтение/запись, если они это делают, измените пароль. Если у них есть доступ к БД через аутентификацию Windows, убедитесь, что они находятся в роль datareader. Роли можно использовать для управления тем, что пользователи могут делать в SQL.


можно использовать ЗАПРЕТИТЬ ПРОСМОТР ЛЮБОЙ БАЗЫ ДАННЫХ команда для конкретного пользователя(пользователей). Это новая функция, доступная в SQL Server 2008.

это предотвращает пользователя от просмотра системного каталога (sys.базы данных, sys.sysdatabases, etc.) и поэтому делает БД невидимой для них в среде SQL Management Studio (SSMS).

выполните эту команду из базы данных Master:

DENY VIEW ANY DATABASE TO 'loginName'

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

однако, это не дурак доказательство. Если пользователь достаточно умен, чтобы выполнить команду запрос:

USE <YourDatabaseName>

затем они увидят базу данных в Анализаторе запросов.

Так как это решение принимает вас 90% там, я бы дал базе данных какое-то неясное имя, не позволяйте пользователи знают имя базы данных.


Я бы предложил вам заблокировать базу данных и предоставить пользователю соответствующие права только для чтения (или другие). Таким образом, пользователь все еще может использовать Management studio для запуска запросов select и т. д.

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


вы можете использовать триггер.

CREATE TRIGGER [TR_LOGON_APP]
ON ALL SERVER 
FOR LOGON
AS
BEGIN

   DECLARE @program_name nvarchar(128)
   DECLARE @host_name nvarchar(128)

   SELECT @program_name = program_name, 
      @host_name = host_name
   FROM sys.dm_exec_sessions AS c
   WHERE c.session_id = @@spid


   IF ORIGINAL_LOGIN() IN('YOUR_APP_LOGIN_NAME') 
      AND @program_name LIKE '%Management%Studio%' 
   BEGIN
      RAISERROR('This login is for application use only.',16,1)
      ROLLBACK;
   END
END;

https://www.sqlservercentral.com/Forums/1236514/How-to-prevent-user-login-to-SQL-Management-Studio-#bm1236562


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

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

надеюсь, что это помогает!


Если ваше приложение использует только хранимые процедуры для изменения данных, вы можете предоставить конечным пользователям доступ для запуска хранимых процессов, но запретить им доступ для изменения таблиц.


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

An Роль Приложения позволит вам защитить объекты базы данных для вашего приложения, а не пользователя.


вы можете запретить "пользователям" права доступа к ssms.exe исполняемый файл, при предоставлении соответствующих прав пользователей / администраторов на него.


Я согласен с Джон Эриксон как правило

  • не разрешайте пользователям доступ к таблицам, но разрешайте доступ только через сохраненные процедуры
  • не разрешайте общим учетным записям пользователей доступ к сохраненным процессам, но только к учетной записи, под которой работает ваше приложение (будь то интегрированный логин или логин SQL)

хорошо использовать роли базы данных, если пользователи должны только выбрать (прочитать) доступ назначить им роль db_datareader. Даже если они входят в систему с помощью SSMS, они могут выполнять только инструкции SELECT.