1. 苏葳的备忘录首页
  2. 数据库

Sybase的XP Server

sybase xp_cmdshell aix 某金融业务系统结构非常简单,前端界面组报文通过Tuxedo分发至后端Sybase数据库,调用存储过程处理交易。简单的代价是就是后台数据库无法主动发起任何到第三方的通讯连接或交易。一个可行的方法是使用Sybase的XP Server服务,这样就可使用xm_cmdshell函数来调用系统命令,但要如何配置呢?AIX 5.3下默认安装时,Sybase的bin目录下有XPServer程序,但这只是一个管理工具。网上极少XP Server的配置资料,试了一下,发现还是比较简单的。

select @aa=@@servername

得到本数据库的服务名称。

sp_addserver upper(@aa)+"_XP",null

在系统的sysservers表中,将注册此server信息,但此时还无法使用。

修改系统参数:

sp_configure "xp_cmdshell context",0

将xp_cmdshell context由1置为0,允许xp_cmdshell调用。

XP Server不需手工启动,第一次调用xp_cmdshell时将启动xp server服务。

若系统变量的start mail session置位时,xp server在data server启动时将一并启动。

在系统的interfaces或sql.ini(win平台下),添加相应server的注册信息。

XXXX_XP
             master ------------------
             query --------------------

端口自设。

此时,在isql或sqladvantg中调用exec sybsystemprocs..xp_cmdshell “ls” 即可正常返回。

以上在Aix 5.3下测试成功。

后发现有次调用命令时失败:

User access denied. Failed to change the user context."

然而xp_cmdshell context值正常,查看服务状态均正常,sybsystemprocs中的扩展存储过程xmd_cmdshell也增加了相应用户的执行权限。

后重启数据库服务,发现起不来,报无法读取servername.cfg文件错误,查看该 文件,发现其为root /system权限用户。修改为sybase:sybase后,数据库启动,xp_cmdshell也正常。

看来可能跟servername.cfg文件属性有关系,难道sp_configure中的变量都在servername.cfg中定义?

原创文章,作者:苏葳,如需转载,请注明出处:https://www.swmemo.com/256.html

发表评论

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