如果是 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
如果是 SQL Server 2000,可以创建一个自启动的存储过程,定期检查登陆客户端所使用的应用程序(select spid,hostname,program_name,net_address from sysprocesses where spid>50;)。如果违反规定,可以选择将其记录下来,或直接关闭此会话。当然,如果可以修改客户端程序,也可以使用“应用角色”控制用户的权限,这样即使用户使用“企业管理器”登陆数据库,也会由于不知道“应用角色”的密码而没有足够的权限进行操作。
use master
go
create trigger trg_limit_logon
on all server
for logon
as
if PROGRAM_NAME()='SQLCMD' and HOST_NAME()<>'DBADMIN'
rollback;
go