我在A服务器上面有一个数据库 DB_1,外部营业人员会使用C/S程序直接连接数据库。但是他们知道密码之后可以使用sqlserver企业管理器直接注册到本地,这样就可以直接操作数据库了。所以我想如何禁止外部的机器即使在知道用户名密码的情况下也无法在外部注册服务器

解决方案 »

  1.   

    这也是c/s结构的弱点之一了,你可以连接文件把dll文件打包编译或者用其他办法吧,还有用三层结构也是个办法,怎么会被知道密码呢问题是
      

  2.   

    如果是 sql server 2005,可以使用登陆触发器控制连接所使用的客户端应用程序。例如,-- 只允许在 DBADMIN 主机上的使用 SQLCMD.EXE 客户端登陆数据库
    use master
    go
    create trigger trg_limit_logon
    on all server
    for logon
    as
     if PROGRAM_NAME()='SQLCMD' and HOST_NAME()<>'DBADMIN'
      rollback;
    go
      

  3.   

    如果是 SQL Server 2000,可以创建一个自启动的存储过程,定期检查登陆客户端所使用的应用程序(select spid,hostname,program_name,net_address from sysprocesses where spid>50;)。如果违反规定,可以选择将其记录下来,或直接关闭此会话。当然,如果可以修改客户端程序,也可以使用“应用角色”控制用户的权限,这样即使用户使用“企业管理器”登陆数据库,也会由于不知道“应用角色”的密码而没有足够的权限进行操作。