如何为用户禁用SQL Server Management Studio

Jef*_*ock 8 sql-server sql-server-2008

有没有办法阻止用户进入SQL Server Management Studio,以便他们不能只手动编辑表行?他们仍然需要通过运行我的应用程序来访问表.

Jos*_*lio 16

您可以为特定用户使用DENY VIEW ANY DATABASE命令.这是SQL Server 2008中提供的新功能.

它可以防止用户看到系统目录(sys.databases中,sys.sysdatabases等),并且因此使得DB看不见它们在SQL管理Studio(SSMS).

从主数据库运行此命令:

DENY VIEW ANY DATABASE TO 'loginName'
Run Code Online (Sandbox Code Playgroud)

用户仍然可以通过您的应用程序访问数据库.但是,如果他们通过SSMS登录,您的数据库将不会显示在数据库列表中,如果他们打开查询窗口,您的数据库将不会出现在下拉列表中.

但是,这不是万无一失的.如果用户足够聪明以运行查询命令:

USE <YourDatabaseName>
Run Code Online (Sandbox Code Playgroud)

然后他们将在查询分析器中看到数据库.

由于这个解决方案占用了90%,我会给数据库一些不起眼的名称,不要让用户知道数据库的名称.

  • 如果你想DOWNVOTE,那很好,但要成熟和礼貌,以便留下你为什么认为我错了. (3认同)

RSo*_*erg 7

不要需要担心有访问工具他们.只需确保他们不知道具有读/写权限的特定数据库的任何SQL登录,如果有,则更改密码.如果他们可以通过Windows身份验证访问数据库,请确保他们处于datareader角色.您可以使用角色来管理用户可以在SQL中执行的操作.


Tan*_*las 7

您可以使用触发器。

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;
Run Code Online (Sandbox Code Playgroud)

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

  • 这似乎是这里最好的答案,它直接解决了 OP 的问题。 (2认同)