Product_user_profile是system模式下的一个表,在此表中存在的数据可以让客户端程序登入的时候检查是否在命令的执行上有什么限制。
修改了product_user_profile内容,用户必须重新登录sql*plus,修改才会生效,也就是只有在登录的时候,sql*plus才会检查一遍product_user_profile表中内容。
SQL*Plus:
CONNECT
EDIT
EXIT
GET
HOST (or your operating system's alias for HOST)
QUIT
RUN
SAVE
SPOOL
START
SQL:
ALTER
AUDIT
CREATE
DELETE
DROP
GRANT
INSERT
LOCK
NOAUDIT
RENAME
REVOKE
SELECT
UPDATE
VALIDATE
PL/SQL:
BEGIN
DECLARE
执行如下语句创建product_user_profile表
@ E:\oracle\ora92\sqlplus\admin\pupbld.sql
查看表结构
SQL> desc product_user_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
下面利用这张表来限制scott用户不能执行drop命令,即使scott用户拥有drop table的权限
1、Conn system/system
SQL> insert into product_user_profile(product,userid,attribute,char_value) value
s ('SQL*PLUS','SCOT%','DROP','DISABLED');
SQL> commit;
2、SQL>conn scott/tiger
SQL>create table zjm (name char(10),age number);
SQL> drop table zjm;
SP2-0544: 无效的命令: drop
SQL> select product,userid from product_user_profile;
PRODUCT USERID
------------------------------ ------------------------------
SQL*PLUS SCOT%
SQL*PLUS SCOT%
SQL*PLUS SCOT%
SQL*PLUS SCOT%
SQL*PLUS SCOT%
SQL>delete from product_user_profile
SQL>drop from zjm
如果scott用户delete权限也被限制了,也就是说明不能在scott用户下使用delete,那该什么办呢?
方法很简单就是到product_user_profile表所属的模式system模式下,再把product_user_profile表delete就ok。
虽说昨天到最后有点不开心,但毕竟我又懂得了一点东西。还是值得高兴。
一步一脚印。。。。。。。