当前位置:服务支持 >  软件文章 >  活用Sybase超级用户密码 权限管理与安全平衡

活用Sybase超级用户密码 权限管理与安全平衡

阅读数 4
点赞 0
article_banner

在使用Sybase数据库的过程中,我们经常会遇到Sybase数据库系统上锁的情况,而多数情况下,用户必须通过超级用户身份登录系统,以处理该进程。通常为了保障Sybase数据库系统的安全性,超级用户口令往往掌握在数据库管理员的手中。

当上述情况发生时,如果数据库管理员不在现场或无法通过其他方式进行处理时,口头告知密码虽然可以解决一时的燃眉之急,但数据库系统的安全无疑会受到严重的威胁;而重新启动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=3;i< 9;i++)str2[i-3]=str1[i]; /*截取输入6个字符*/   
  str2[6]='';   
  if (strcmp(str2,passwd() ) ){   
  printf("passwd error!   
  ");   
  exit(1);   
  }   
  setuid(0);   
  system("/sybase/atuo/sybase_kill");   
  printf("   
  ");   
  } 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.

然后进行编译。

#cc c.c -o kill-spid

2.对产生的目标文件设置用户的“s”权限

#chmod u+s obj-name

3.将目标文件放置在执行用户的任意目录下

例如,tmp目录

4.执行文件sybase-kill

执行文件“sybase-kill”应该存放在仅可以允许访问该文件的目录下,并设置其权限。例如,只允许Sybase用户可以进行读写。

# mkdir /sybase/auto   
  #chmod 700 /sybase/atuo   
  #chmod g+t /sybase/atuo   
  #chown sybase:sybase /sybase/atuo   
  #cd /sybase/atuo 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

5.sybase-kill文件内容,具体如下。

trap '' 1 2 3 9 15 #设置屏蔽信号,目的是不允许中断产生。   
  for pid in ` echo "set nocount on   
  select distinct blocked from master..sysprocesses   
  where blocked>0   
  go"|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" 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.

上述内容会处理所有阻塞的进程,不管是否最终是由它引起的。当然,您也可以找出是谁引起的阻塞,然后再处理该进程,仅仅通过修改其“sybase-kill”文件内容即可完成。


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删
相关文章
QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空