首页 > Linux操作系统 > Linux操作系统 > SQL*Plus安全(一)
SQL*Plus是目前Oracle开发、管理人员最常用的开发管理工具。虽然Oracle在10g、11g新版本中,提供了诸多可视化管理工具,来简化Oracle数据库管理和使用,但是SQL*Plus在多种平台上仍占有不可替代的地位。
安全问题是数据库管理系统的一个重点。对数据进行有效的权限控制管理,是保护数据完整性的一种手段。我们通常熟悉的安全性方法,是借助grant和revoke权限控制语句,将Oracle相关权限附加到某个特定的用户或者角色(用户集合)。我们称这种安全控制附加在用户级别的技术,为user-level security(基于用户安全技术)。
但是,在某些时候,这种权限控制方式是存在一些漏洞的。比较明显的就是Grant、Revoke和Set Role等命令,这些命令可以动态的将用户数据库访问权限(对象权限、角色权限和系统权限)进行修改。所以,Oracle针对这种问题,提供了程序级别(Product-Level Security)的安全配置,作为User-Level Security的一种补充。
SQL*PLUS与PUP
Product-Level Security技术的基础是基于名为Product_User_Profile(以下简称为PUP)的数据表。这个数据表是在System用户的Schema下,通常随着数据库的创建而一同生成。
SQL> conn system/system@orcl;
Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0
Connected as system
SQL> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for 32-bit Windows: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production
SQL> desc product_user_profile;
Name Type Nullable Default Comments
------------- ------------- -------- ------- --------
PRODUCT VARCHAR2(30)
USERID VARCHAR2(30) Y
ATTRIBUTE VARCHAR2(240) Y
SCOPE VARCHAR2(240) Y
NUMERIC_VALUE NUMBER(15,2) Y
CHAR_VALUE VARCHAR2(240) Y
DATE_VALUE DATE Y
LONG_VALUE LONG Y
SQL>
说明,如果这个数据表不存在,可以手工的执行脚本pupbld.sql,但要注意是使用system用户登录执行。一般这个脚本位置在$ORACLE_HOME/sqlplus/admin目录下。
PUP的含义就是一组定义规则。定义了某个用户(USERID)在使用某种产品(PRODUCT)的使用,允许执行什么命令和不允许使用什么命令。就SQL*PLUS而言,在用户登录的时候,SQL*PLUS会自动的读取PUP数据表的配置项。
注意:这里面有一个技术细节!就是使用配置项的获取点,是在用户login入系统的时候。也就是说如果我们设置了一个新的权限规则,用户只有重新登录入产品才能应用最新的权限规则。
PUP使用
PUP数据表的结构中,每行就是一个规则项目。规定了使用某项产品的时候,某个用户使用的权限。下面是各列的含义和取值(部分参考Oracle官方文档:SQL*PLUS user guide)。
|
PUP列 |
列信息描述 |
备注 |
|
PRODUCT |
必填项目,应用产品的名称。不允许为空; |
对SQLPLUS使用‘SQL*PLUS’,不支持通配符; |
|
USERID |
规则应用的数据库用户ID,来disabled某个用户执行某种操作的能力; |
支持使用通配符%;可以为hr、SC%、%; 意味着规则可以对多个用户使用; 必须为大写! |
|
ATTRIBUTE |
包括在SQL、PL/SQL和SQL*PLUS中需要禁用的命令。 |
如果要禁用角色设置功能,则需要加入“ROLES”在字符串中; |
|
SCOPE |
无输入,Oracle推荐输入null; |
留待其他产品使用; |
|
NUMBERIC_VALUE |
无输入,Oracle推荐输入null; |
留待其他产品使用; |
|
CHAR_VALUE |
如果采用禁用SQL、SQLPLUS和PLSQL命令的方式,输入“DISABLED”; |
如果要禁用角色设置功能,必须包括要禁用的角色名称; |
|
DATE_VALUE |
无输入,Oracle推荐输入null; |
留待其他产品使用; |
|
LONG_VALUE |
无输入,Oracle推荐输入null; |
留待其他产品使用; |
|
|
|
|
从数据列的解析上看,Oracle是希望将PUP作为一个安全体系来进行推广,构建所谓的“Product-Level Security”。虽然目前使用的主要是SQL*PLUS,但以后存在拓展的空间。
PUP数据表是在SYSTEM用户下,SYSTEM用户具有全部权限。其他用户只有select权限。这样可以尽可能的保护配置项目安全。
下面,我们进行一系列的配置实验。配置PUP的过程是比较简单的,使用简单的insert语句就可以将配置规则插入到其中,不过记住一定是使用system用户登录。
//使用system登录
SQL> conn system/system@orcl;
Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0
Connected as system
//向数据表中插入数据
SQL> insert into product_user_profile (product, userid, attribute, char_value)
2 values ('SQL*PLUS','%','INSERT','DISABLED');
1 row inserted
SQL> commit; //建立一条规则
……(篇幅原因,略)
SQL> col attribute format a10;
SQL> col product format a10;
SQL> col userid format a10;
SQL> col char_value format a10;
SQL> select product,userid,attribute,char_value from product_user_profile;
PRODUCT USERID ATTRIBUTE CHAR_VALUE
---------- ---------- ---------- ----------
SQL*PLUS % INSERT DISABLED
SQL*PLUS % UPDATE DISABLED
SQL*PLUS % DELETE DISABLED
SQL*PLUS SCOTT HOST DISABLED
上面脚本定义了一个规则集合。简要的说,就是所有的用户在使用SQL*PLUS的时候,不能使用insert、update和delete类型的dml语句。用户scott,不允许使用sqlplus命令host(host命令的作用就是在sqlplus中调用操作系统命令行方法)。通配符%表示使用所有用户。下面进行试验:
SQL*Plus: Release 10.2.0.1.0 - Production on 星期三 2月 9 20:29:44 2011
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> conn hr/hr@orcl;
已连接。
SQL> select count(*) from jobs; //Select命令没有禁止
COUNT(*)
----------
19
SQL> delete from jobs;
SP2-0544: 在产品用户概要文件中禁用命令 "delete" //报错禁止!
SQL> insert into region values(10,'dkk');
SP2-0544: 在产品用户概要文件中禁用命令 "insert" //报错禁止!
SQL> update employees set first_name=null;
SP2-0544: 在产品用户概要文件中禁用命令 "update" //报错禁止!
SQL>
SQL> host notepad //OS命令行工具,可以使用!
现在我们转换用户为scott。
SQL> conn scott/tiger@orcl
已连接。
SQL> delete from emp;
SP2-0544: 在产品用户概要文件中禁用命令 "delete" //作为%用户的一员,被禁用!
SQL> host calc
SP2-0544: 在产品用户概要文件中禁用命令 "host" //针对scott用户的设置,被禁用!
SQL>
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/17203031/viewspace-686923/ ,如需转载,请注明出处,否则将追究法律责任。