93SQL数据库安全 般网站都是基于数据库的,特别是ASP PHP、JSP这样的用数据库来动态显示的网站。很 多网站可能多注意的是操作系统的漏洞,但是对 数据库和这些脚本的安全总是忽略 对于 MS SQL Server数据库来说,安全问题不 仅仅局限在脚本上了。微软的系统性很强,整个 基于 Windows系统的应用都有很强的关联性,对 SQL Server来说,基本可以把数据库管理和系统管 理等同起来了。 SQL Server默认的管理员帐号“sa的密码是空 的,这给多数NT服务器产生一个安全漏洞。已经 有专用的程序,能够利用获得的数据库管理员帐 号执行系统命令
9.3 SQL数据库安全 一般网站都是基于数据库的,特别是ASP、 PHP、JSP这样的用数据库来动态显示的网站。很 多网站可能多注意的是操作系统的漏洞,但是对 数据库和这些脚本的安全总是忽略。 对于MS SQL Server数据库来说,安全问题不 仅仅局限在脚本上了。微软的系统性很强,整个 基于Windows系统的应用都有很强的关联性,对 SQL Server来说,基本可以把数据库管理和系统管 理等同起来了。 SQL Server默认的管理员帐号“sa”的密码是空 的,这给多数NT服务器产生一个安全漏洞。已经 有专用的程序,能够利用获得的数据库管理员帐 号执行系统命令
在 SQL Server中有很多系统存储过程,有些是 数据库内部使用的,还有一些就是通过执行存储 过程来调用系统命令。 931系统存储过程: xp cmdshell 就是以操作系统命令行解释器的方式执行给定 的命令字符串。具体语法是: xp cmdshell ' command string L, no output xp cashel在默认情况下,只有 sysadmin的成员 才能执行。但是, sysadmin可以授予其他用户这 个执行权限。在早期版本中,获得 xp cmdshell执 行权限的用户在 SQL Server服务的用户帐户中运彳 命令。可以通过配置选项配置 SQL Server,以便对 SQL Server无sa访问权限的用户能够在 SQLEXecutive CmdExec Windows NT帐户中运
在SQL Server中有很多系统存储过程,有些是 数据库内部使用的,还有一些就是通过执行存储 过程来调用系统命令。 9.3.1 系统存储过程:xp_cmdshell 就是以操作系统命令行解释器的方式执行给定 的命令字符串。具体语法是: xp_cmdshell {'command_string'} [, no_output] xp_cmdshell在默认情况下,只有sysadmin 的成员 才能执行。但是,sysadmin也可以授予其他用户这 个执行权限。在早期版本中,获得xp_cmdshell 执 行权限的用户在SQL Server服务的用户帐户中运行 命令。可以通过配置选项配置SQL Server,以便对 SQL Server 无sa访问权限的用户能够在 SQLExecutiveCmdExec Windows NT 帐户中运行
xp cmdshell在 SQL Server7.0中,该帐户称为 SQLAgentcmdExec。现在对于 SQL Server200 只要有一个能执行该存储过程的帐号就可以直接 运行命令了。 对于NT和WN2000,当用户不是 sysadmin组的 成 时 p cmdshell将模拟使用 xp sqlagent proxy account指定的 SQL Server代理程 序的代理帐户。如果代理帐户不能用,则 xp cmdshell将失败。所以即使有一个帐户是 master 数据库的拥有者,也不能执行这个存储过程 如果有一个能执行 xp cashel的数据库帐号, 比如是空口令的sa帐号。那么就可以执行这样的命 exec xp cmdshell 'net user refom 123456/add
xp_cmdshell。在 SQL Server 7.0 中,该帐户称为 SQLAgentCmdExec。现在对于SQL Server2000, 只要有一个能执行该存储过程的帐号就可以直接 运行命令了。 对于NT和WIN2000,当用户不是sysadmin组的 成员时 , xp_cmdshell 将 模 拟 使 用 xp_sqlagent_proxy_account指定的SQL Server代理程 序的代理帐户 。 如果代理帐户不能用 , 则 xp_cmdshell将失败。所以即使有一个帐户是master 数据库的拥有者,也不能执行这个存储过程。 如果有一个能执行xp_cmdshell的数据库帐号, 比如是空口令的sa帐号。那么就可以执行这样的命 令: exec xp_cmdshell 'net user refdom 123456 /add
exec xp cmdshell ' net localgroup administrators refom /add' 上面两次调用就在系统的管理员组中添加了 个用户: refom 获得了数据库的sa管理员帐号后,就应该可以 完全控制这个机器了,可见数据库安全的重要性 下面这些存储过程都是对 Public可以执行的: xp fileexist用来确定一个文件是否存在。 xp getfiledetails可以获得文件详细资料 xp dirtree可以展开你需要了解的目录,获得所有 目录深度 xp getnetname可以获得服务器名称
exec xp_cmdshell 'net localgroup administrators refdom /add' 上面两次调用就在系统的管理员组中添加了一 个用户:refdom。 获得了数据库的sa管理员帐号后,就应该可以 完全控制这个机器了,可见数据库安全的重要性。 下面这些存储过程都是对Public可以执行的: xp_fileexist 用来确定一个文件是否存在。 xp_getfiledetails 可以获得文件详细资料。 xp_dirtree 可以展开你需要了解的目录,获得所有 目录深度。 xp_getnetname 可以获得服务器名称
还有可以操作注册表的存储过程,这些不是对 Public可以执行的,需要系统管理员或者授权执行 xp regadamultistring xp regdeletekey xp rewrite 932 SQL Server的安全配置 除了及时安装补丁程序外,还需要加强数据库 的安全。 (1)首先,需要加强象sa这样的帐号的密码。跟 系统帐号的使用配置相似,一般操作数据库不要 使用象sa这样的最高权限的帐号,而使用能满足你 的要求的一般帐号
还有可以操作注册表的存储过程,这些不是对 Public可以执行的,需要系统管理员或者授权执行: xp_regaddmultistring xp_regdeletekey xp_regwrite 9.3.2 SQL Server的安全配置 除了及时安装补丁程序外,还需要加强数据库 的安全。 (1)首先,需要加强象sa这样的帐号的密码。跟 系统帐号的使用配置相似,一般操作数据库不要 使用象sa这样的最高权限的帐号,而使用能满足你 的要求的一般帐号