如何限制sa登录Sybase ASE -电脑资料

电脑资料 时间:2019-01-01 我要投稿
【www.unjs.com - 电脑资料】

解决思路如下:

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

如何限制sa登录Sybase ASE

先新创建一个权限足够高的用户,将来当服务器有问题时,好用来恢复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 之前 登录数据库,

电脑资料

如何限制sa登录Sybase ASE》(https://www.unjs.com)。

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

这里的合法性验证不通过的处理方法是 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

最新文章