sybasease:限制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

Tags:  sybasesa密码 sybasesa sybasease15.0 sybasease

延伸阅读

最新评论

发表评论