解决思路如下:
利用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) exec sp_remotesql ’local’, @cmd end go sp_hidetext sp_killme go |
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号

TechTarget
官方微博

TechTarget中国
相关推荐
-
趣解数据库市场竞争格局
数据库咨询顾问Curt Monash对数据库技术的发展格局进行了趣味解读,包括如Oracle、IBM、Sybase鞥厂商之间的竞争关系。
-
SAP利用大数据处理能力,延伸实时数据平台
SAP公司日前发布了针对Hadoop环境的高级支持与集成,其中包括“大数据”合作伙伴理事会和多个用户展示及基于SAP实时数据平台的相关“大数据”实施。
-
主流内存数据库指南
由于内部优化算法更简单,而且执行的CPU指令较少,所以内存数据的速度比基于磁盘的数据库快。访问内存数据可以提高响应速度。
-
内存数据库巡礼之Sybase ASE
这是我们关于内存数据库(IMDB)系列文章的第二部分。第一部分我们主要介绍了Oracle TimesTen,而这个部分将深入介绍Sybase ASE。