当上述情况发生时,如果数据库管理员不在现场或无法通过其他方式进行处理时,口头告知密码虽然可以解决一时的燃眉之急,但数据库系统的安全无疑会受到严重的威胁而重新启动Sybase数据库系统也是一种解决的方法,不过这种作法很有可能造成数据库中数据的丢失,甚至导致用户数据库的崩溃,不到万不得已,请不要使用此方法。
如果能够对用户权限加以设置,使普通用户也能够进行进程的处理,而又不用知晓Sybase数据库系统的超级用户密码,无疑是处理上述问题的解决方法。现在,笔者就把针对上述情况的整个处理过程详细介绍给大家,以供参考。当然,您可以根据自己的需要设置普通用户密码,也可以限制更多的内容来处理数据库系统中的进程。具体的处理过程如下文所示。
1.使用C语言编写一个程序如下。
#include stdlib.h>
#include string.h>
#include fcntl.h>
#include time.h>
#include sys/types.h>
char *passwd() /*普通用户需要的密码: 简单加密后字符串*/
{
struct tm *tp
long secs
char *buff
buff=(char *)malloc(30)
secs=time((long *)0)
tp=localtime(&secs)
sprintf(buff,"%02d%02d%d",tp->tm_mon+1+9,tp->tm_mday+2,8)
return(buff)
}
main()
{
char str1[80],str2[80]
int i
printf("passwd:")
system("stty -echo")/* 不显示*/
gets(str1)
system("stty echo")
for(i=3i<9i++)str2[i-3]=str1[i]/*截取输入6个字符*/
str2[6]='\0'
if (strcmp(str2,passwd() ) ){
printf("passwd error!\n")
exit(1)
}
setuid(0)
system("/sybase/atuo/sybase_kill")
printf("\n")
}
然后进行编译。
#cc c.c -o kill-spid
2.对产生的目标文件设置用户的“s”权限。
#chmod u+s obj-name
3.将目标文件放置在执行用户的任意目录下,例如,tmp目录。
4.执行文件“sybase-kill”应该存放在仅可以允许访问该文件的目录下,并设置其权限。例如,只允许Sybase用户可以进行读写。
# mkdir /sybase/auto
#chmod 700 /sybase/atuo
#chmod g+t /sybase/atuo
#chown sybase:sybase /sybase/atuo
#cd /sybase/atuo
5.sybase-kill文件内容,具体如下。
trap '' 1 2 3 9 15 #设置屏蔽信号,目的是不允许中断产生。
for pid in ` echo "set nocount on \n
select distinct blocked from master..sysprocesses
where blocked>0 \ngo"|isql -Uaaa -Paaaaaa -w200 -SFEBS|sed "1,2d" `
do
echo "Kill "$pid
isql -Usa -w200 -Sserv_name <<EOF
password123321
kill $pid
go
EOF
done
echo "ok"
上述内容会处理所有阻塞的进程,不管是否最终是由它引起的。当然,您也可以找出是谁引起的阻塞,然后再处理该进程,仅仅通过修改其“sybase-kill”文件内容即可完成。]
免费看《Windows CE 嵌入式系统开发 从基础到实践》我们在使用Sybase数据库的过程中 经常会遇到Sybase数据库系统上锁的情况 而多数情况下 用户必须通过超级用户身份登录系统 以处理该进程 通常为了保障Sybase数据库系统的安全性 超级用户口令往往掌握在数据库管理员的手中
当上述情况发生时 如果数据库管理员不在现场或无法通过其他方式进行处理时 口头告知密码虽然可以解决一时的燃眉之急 但数据库系统的安全无疑会受到严重的威胁而重新启动Sybase数据库系统也是一种解决的方法 不过这种作法很有可能造成数据库中数据的丢失 甚至导致用户数据库的崩溃 不到万不得已 请不要使用此方法
如果能够对用户权限加以设置 使普通用户也能够进行进程的处理 而又不用知晓 Sybase数据库系统的超级用户密码 无疑是处理上述问题的最佳解决方法 现在 笔者就把针对上述情况的整个处理过程详细介绍给大家 以供参考 当然 您可以根据自己的需要设置普通用户密码 也可以限制更多的内容来处理数据库系统中的进程 具体的处理过程如下文所示
使用C语言编写一个程序如下
#include <stdlib h>#include <string h>#include <fcntl h>#include <time h>#include <sys/types h>char *passwd() /*普通用户需要的密码: 简单加密后字符串*/{struct tm *tplong secschar *buffbuff=(char *)malloc( )secs=time((long *) )tp=localtime(&secs)sprintf(buff % d% d%d tp >tm_mon+ + tp >tm_mday+ )return(buff)}main(){char str [ ] str [ ]int iprintf( passwd: )system( stty echo )/* 不显示*/gets(str )system( stty echo )for(i= i<i++)str [i ]=str [i]/*截取输入 个字符*/str [ ]= \ if (strcmp(str passwd() ) ){printf( passwd error!\n )exit( )}setuid( )system( /sybase/atuo/sybase_kill )printf( \n )}
然后进行编译
#cc c c o kill spid
lishixinzhi/Article/program/Sybase/201311/11217
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)