ITPub博客

首页 > 数据库 > 数据库开发技术 > 使用产品配置文件保护 SQL*Plus

使用产品配置文件保护 SQL*Plus

原创 数据库开发技术 作者:davies 时间:2007-04-11 19:01:34 0 删除 编辑

使用产品配置文件保护 SQL*Plus

[@more@]

背景使用 SQL*Plus 时,您可能注意到,您可以发出 host 命令转到 *nix 提示符,或发出 run 命令执行某个脚本。一个很少使用但却有可能造成致命破坏的攻击便源自此功能。 您可能编写了某个从 shell 中调用的 SQL*Plus 脚本,如下所示:

sqlplus someuser/somepass@remotedb @myscript.sql

此处的 myscript.sql 是一个先执行然后退出的 SQL*Plus 脚本文件。在该文件执行过程中,用户可以按 Control-C(或特定 OS 的 break 键序列)中断程序流。 这种情况下,用户将获得 SQL*Plus 提示符(以 someuser 的身份连接)。 在此阶段,用户几乎可以执行从 SQL*Plus 提示符中所能执行的所有操作,并因此而造成某种程度的破坏。

这是一个应立即修复的安全漏洞。

策略修复方法很简单: 您所要做的就是在运行命令之前,将这些命令限制到一个由 SQL*Plus 引用的“特殊位置”。 此特殊位置是 SYSTEM 模式中一个名为 SQLPLUS_PRODUCT_PROFILE 的表。 如果该表不存在,则您在每次启动 SQL*Plus 时将获得一个类似“Product User Profile Not Loaded”这样的警告。

SQL> select * from system.SQLPLUS_PRODUCT_PROFILE

2 /

no rows selected

SQL> insert into system.SQLPLUS_PRODUCT_PROFILE

2 values ('SQL*Plus','%','HOST',null,null,'DISABLED',null,null)

3 /

1 row created.

SQL> commit;

Commit complete.

现在,当您启动 SQL*Plus 并输入 host 命令(或它的等价形式“!”)时,您将收到以下错误:

SQL> host;

SP2-0544: Command "host" disabled in Product User Profile

如果要对某个用户禁用此功能,只需使用要限制的用户名替换上面的 insert 命令中的“%”(表示所有用户)。 例如,如果只希望对用户 SCOTT 禁用此功能,请使用以下语句:

SQL> insert into system.SQLPLUS_PRODUCT_PROFILE

2 values ('SQL*Plus','SCOTT','HOST',null,null,'DISABLED',null,null)

3 /

还可以在用户名中使用通配府 - 例如,使用 APP% 表示所有以 APP 开头的用户(APPUSER1、APPUSER2)。

该方法也适用于其他命令(及其缩写或简写形式):

accept edit repheader

append execute run

archive log exit save

attribute quit set

break get show

btitle help shutdown

change host spool

clear input start

column list startup

compute password store

connect pause timing

copy print ttitle

define prompt undefine

del recover variable

describe remark whenever oserror

disconnect repfooter whenever sqlerror

除了 SQL*Plus 以外,该方法还适用于 SQL 命令。 例如,如果要禁用 lock 命令,则需要插入:

insert into system.SQLPLUS_PRODUCT_PROFILE

values ('SQL*Plus','%','LOCK',null,null,'DISABLED',null,null)

/

注意,SQL 命令 lock 已被禁用,此外我们还在上面使用了“SQL*Plus”关键字。

可以禁用的 SQL 命令如下:

alter drop revoke

analyze explain rollback

associate flashback savepoint

audit grant select

call insert set constraints

comment lock set role

commit merge set transaction

create noaudit truncate

delete purge update

disassociate rename validate

可能的影响开始前,请注意一个重要问题: 该方法适用于在服务器本身中运行的 SQL*Plus, 而不会影响在其他位置运行(如在客户端中运行)的 SQL*Plus。

该操作需要仔细的规划。如果 shell 脚本依赖于 SQL*Plus 中的 host 命令,则禁用它们将会明显停止这些作业。 一个非常典型的例子就是旧式的 host backup 命令。 一个典型的 SQL 脚本可能如下所示:

alter tablespace xyz begin backup;

host cp /fs1/xyz.dbf /backup/xyz.dbf

alter tablespace xyz end backup;

等等(适用于所有表空间)。该脚本将注定失败 - 除非以 SYS 用户的身份运行它,这时命令禁用将不起作用。

操作计划当所有这些命令使用的可能性最小时,从 SQL*Plus 中禁用它们。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/178357/viewspace-910001/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    81
  • 访问量
    507771