个人经验总结:如何限制sa登录Sybase ASE

日期: 2008-07-31 作者:阿瑟 来源:TechTarget中国 英文

需求:必须限制 sa 登录sybase ASE


解决思路如下:


利用sybase ASE的特性提供的存储过程 sp_modifylogin,对登录的合法性进行验证。


— 先新创建一个权限足够高的用户,将来当服务器有问题时,好用来恢复sa


— 接下来将sa的login script绑定


use master


go



  drop procedure sp_bindlogin


go


— 存储过程名字弄个像系统的一样


create procedure sp_bindlogin


as


begin


declare @hostname varchar(100)


declare @program_name varchar(100)


declare @ipaddr varchar(100)


declare @new datetime



  select @hostname = hostname,


@program_name = program_name,


@ipaddr = ipaddr


from master..sysprocesses


where spid = @@spid


— 登录机器限定


if @hostname != ’机器名’


begin


shutdown with nowait


end


— 登录机器IP限定


if @ipaddr != ’机器IP’


begin


shutdown with nowait


end


— 登录应用程序限定


if @program_name in (’SQL_Advantage’, ’isql’)


begin


shutdown with nowait


end


select @new = getdate()


— 登录时间限定


if @new >= ’20080808’


begin


shutdown with nowait


end


end


go


sp_hidetext sp_bindlogin


go


sp_modifylogin sa, ’login script’, sp_bindlogin


go


经过以上处理,sa只能在本机,并且不能使用 isql 、sqladv ,在 20080808 之前 登录数据库。


这里的逻辑是可以自由编写的。


这里的合法性验证不通过的处理方法是 shutdown 。


可以把 shutdown 换成以下存储过程。 这样就杀掉了自己。不会影响服务,只是需要做一些额外的配置。


drop procedure sp_killme


go



  create procedure sp_killme


as


begin


declare @cmd varchar(100)


select @cmd = ’kill ’ + convert(varchar(20), @@spid)



  &#101xec sp_remotesql ’local’, @cmd


end


go



  sp_hidetext sp_killme


go

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

作者

阿瑟
阿瑟

相关推荐