总结:如何限制sa登录Sybase ASE

http://tech.ddvip.com   2008年09月09日    社区交流

本文详细介绍总结:如何限制sa登录Sybase ASE

  解决思路如下:

  利用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

来源:安全中国    责编:豆豆技术应用

正在加载评论...