Google

如何限制sa登录Sybase ASE

2008-11-06 14:32 来源: www.csdclub.net 作者:csdclub 网友评论 0 条 浏览次数 5
解决思路如下:   利用sybase ASE的特性提供的存储过程 sp_modifylogin,对登录的合法性进行验证。
  -- 先新创建一个权限足够高的用户,将来当服务器有问题时,好用来恢复sa
  -- 接下来将sa的login script绑定
usemaster 
  go 
  dropproceduresp_bindlogin 
  go
  -- 存储过程名字弄个像系统的一样
createproceduresp_bindlogin 
  as 
  begin 
  declare@hostnamevarchar(100) 
  declare@program_namevarchar(100) 
  declare@ipaddrvarchar(100) 
  declare@newdatetime 
  select@hostname=hostname, 
  @program_name=program_name, 
  @ipaddr=ipaddr 
  frommaster..sysprocesses 
  wherespid=@@spid
  -- 登录机器限定
if@hostname!=’机器名’ 
  begin 
  shutdownwithnowait 
  end
  -- 登录机器IP限定
if@ipaddr!=’机器IP’ 
  begin 
  shutdownwithnowait 
  end
  -- 登录应用程序限定
if@program_namein(’SQL_Advantage’,’isql’) 
  begin 
  shutdownwithnowait 
  end 
  select@new=getdate()
  -- 登录时间限定
if@new>=’20080808’ 
  begin 
  shutdownwithnowait 
  end 
  end 
  go 
  sp_hidetextsp_bindlogin 
  go 
  sp_modifyloginsa,’loginscript’,sp_bindlogin 
  go
  经过以上处理,sa只能在本机,并且不能使用 isql 、sqladv ,在 20080808 之前 登录数据库。
  这里的逻辑是可以自由编写的。
  这里的合法性验证不通过的处理方法是 shutdown 。
  可以把 shutdown 换成以下存储过程。 这样就杀掉了自己。不会影响服务,只是需要做一些额外的配置。
dropproceduresp_killme 
  go 
  createproceduresp_killme 
  as 
  begin 
  declare@cmdvarchar(100) 
  select@cmd=’kill’+convert(varchar(20),@@spid) 
  execsp_remotesql’local’,@cmd 
  end 
  go 
  sp_hidetextsp_killme 
  go
上一篇: 下一篇:

相关主题:sybase  ase  sa

网友评论