限制SQLPLUS工具可执行的命令[转帖]_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3949 | 回复: 0   主题: 限制SQLPLUS工具可执行的命令[转帖]        下一篇 
wayne
注册用户
等级:中校
经验:1690
发帖:221
精华:0
注册:2011-7-21
状态:离线
发送短消息息给wayne 加好友    发送短消息息给wayne 发消息
发表于: IP:您无权察看 2011-8-25 18:09:35 | [全部帖] [楼主帖] 楼主

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

一般数据库创建的时候,DBCA都会自动在SYSTEM用户下加载$ORACLE_HOME/sqlplus/admin/pupbld.sql脚本,来创建SQLPLUS_PRODUCT_PROFILE表,如果这个表没有创建,则在普通用户登陆时候会出现告警。关于这个错误可以参考:http://yangtingkun.itpub.net/post/468/488833

这个表可以限制除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 Release 9.2.0.4.0 - 64bit Production 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 Database 10g Enterprise Edition Release 10.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




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论