实际上,应用程序的使用,并不一定要用到管理员账户,使用管理员账户,反而给了攻击者更多的机会。如在SQL Server中,当连接以sa账户进行,且SQL代码中有bug,攻击者可以执行任何管理员账户可以执行的任务,如:
删除系统中的数据库或表;
删除系统中表中的数据;
修改系统中表中数据;
修改存储过程、触发器;
删除日志;
添加新的数据库用户,等等。
很多情况下,程序员会将口令以明文的形式存放于代码中,运行阶段,这些口令置人进程的内存空间。此时,口令如果被攻击者获知,则可执行攻击者希望执行的任何代码。危险性也很大。
解决以上问题的方法主要有:
不到万不得已,不使用管理员账户;
使用最小特权账户,不给以额外的权限;
不允许使用空口令连接数据库,防止管理员疏忽而创建了空口令;
数据库连接字符串存放在配置文件中,***可以加密,而不是代码中以明文显示;
发生错误时,仅给客户端通知信息,不给具体原因,防止攻击者利用这些通知信息进行数据库猜测,等等。