您在这里:首页 > 学员专区 > 技术文章
Oracle视频
Oracle
CUUG课程

限制SQLPLUS工具可执行的命令

 

Oracle除了提供数据库级的各种权限来控制安全以外,对于SQLPLUS工具而言,还提供了特殊的控制方法。

 

 

一般数据库创建的时候,DBCA都会自动在SYSTEM用户下加载$ORACLE_HOME/sqlplus/admin/pupbld.sql脚本,来创建SQLPLUS_PRODUCT_PROFILE表,如果这个表没有创建,则在普通用户登陆时候会出现告警。这个表可以限制除SYS、SYSTEM以及SYSDBA/SYSOPER身份登陆以外的所有普通用户。通过这个表可以限制绝大部分的SQLPLUS命令、SQL命令和PL/SQL命令。

一个简单的例子:

SQL> CONN SYSTEM

请输入口令: 

已连接。

SQL> DESC SQLPLUS_PRODUCT_PROFILE

 名称                                     是否为空?类型

 ----------------------------------------- -------- ----------------------------

 PRODUCT                                   NOT NULL VARCHAR2(30)

 USERID                                             VARCHAR2(30)

 ATTRIBUTE                                          VARCHAR2(240)

 SCOPE                                              VARCHAR2(240)

 NUMERIC_VALUE                                      NUMBER(15,2)

 CHAR_VALUE                                         VARCHAR2(240)

 DATE_VALUE                                         DATE

 LONG_VALUE                                         LONG

SQL> INSERT INTO SQLPLUS_PRODUCT_PROFILE

  2  VALUES ('SQL*Plus', 'U1', 'DROP', NULL, NULL, 'DISABLED', NULL, NULL);

已创建1行。

SQL> COMMIT;

提交完成。

SQL> CONN U1/U1

已连接。

SQL> SELECT * FROM TAB;

TNAME                          TABTYPE  CLUSTERID

------------------------------ ------- ----------

T                              TABLE

SQL> DROP TABLE T;

SP2-0544:无效的命令: drop

SQL> SELECT * FROM V$VERSION;

BANNER

----------------------------------------------------------------

Oracle9i Enterprise Edition Release9.2.0.4.0 - 64bitProduction

PL/SQL Release 9.2.0.4.0 - Production

CORE    9.2.0.3.0       Production

TNS for Linux: Version 9.2.0.4.0 - Production

NLSRTL Version 9.2.0.4.0 - Production

由于SQLPLUS_PRODUCT_PROFILE表只是专门针对SQLPLUS工具的,因此对于PRODUCT列需要输入‘SQL*Plus’。USERID列输入需要限制的用户名,如果输入通配符‘%’,则对所有用户生效。ATTRIBUTE输入限制的命令,这里限制的是DROP命令。CHAR_VALUE必须输入‘DISABLED’,而其余的列目前没有使用,输入NULL。

可以看到,在9i中错误信息很不明确,用户如果碰到这个错误,根本不清楚到底是什么原因导致了命令的失败。

而在10g中,错误信息就清晰多了:

SQL> conn / as sysdba

Connected.

SQL> insert into system.sqlplus_product_profile

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

1 row created.

SQL> commit;

Commit complete.

SQL> conn u1/u1

Connected.

SQL> select * from tab;

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

SQL> conn / as sysdba

Connected.

SQL> delete system.sqlplus_product_profile;

1 rows deleted.

SQL> commit;

Commit complete.

SQL> select * from v$version;

BANNER

----------------------------------------------------------------

Oracle Database10gEnterpriseEdition Release10.2.0.3.0 - 64bi

PL/SQL Release 10.2.0.3.0 - Production

CORE    10.2.0.3.0      Production

TNS for Linux: Version 10.2.0.3.0 - Production

NLSRTL Version 10.2.0.3.0 - Production

相关文章 [上一篇] 在查询列表中使用PRIOR操作
010-88589926(88587026)
CUUG热门培训课程
Oracle DBA就业培训
CUUG名师
网络课程
技术沙龙
最新动态

总机:(010)-88589926,88589826,88587026 QQ讨论群:243729577 182441349 邮箱:cuug_bj@cuug.com
通信地址:北京市海淀区紫竹院路98号北京化工大学科技园609室(CUUG)邮政编码:100089 
中国UNIX用户协会 Copyright 2010  ALL Rights Reserved 北京神脑资讯技术有限公司
京ICP备11008061号  京公网安备110108006275号