在system schema下有个表:product_user_profile,这个表很有意思。能够控制哪些用户在SQL*Plus里能够执行哪些命令以及不能执行哪些命令,这些命令既包括SQL命令,也包括SQL*Plus本身的命令,比如set、exit等。
先来看看该表的结构:
SQL> connect system/oracle
Connected.
SQL> desc product_user_profile;
Name Null? Type
----------------------------------------- -------- ----------------------------
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*Plus操作包括:
COPY EXIT PASSWORD SAVE START
EDIT GET QUIT SET
EXECUTE HOST RUN SPOOL
而可以限制的SQL操作包括:
ALTER DELETE NOAUDIT SET ROLE
ANALYZE DROP RENAME SET TRANSACTION
AUDIT GRANT REVOKE TRUNCATE
CONNECT INSERT SELECT UPDATE
CREATE LOCK SET CONSTRAINTS
你甚至还可以禁止PL/SQL操作:
BEGIN DECLARE
比如,我要限制HR用户不能在SQL*Plus里发出insert命令,则
SQL> insert into product_user_profile values('SQL*Plus','HR','INSERT',null,null,'DISABLED',null,null);
1 row created.
SQL> commit;
Commit complete.
SQL> select product,userid,attribute,char_value from product_user_profile;
PRODUCT USERID
------------------------------ ------------------------------
ATTRIBUTE
--------------------------------------------------------------------------------
CHAR_VALUE
--------------------------------------------------------------------------------
SQL*Plus HR
INSERT
DISABLED
如果插入的char_value为'ENABLED'则表示可以进行某种操作。然后来测试一下:
SQL> connect hr/hr
Connected.
SQL> insert into jobs values('A','A',1,1);
SP2-0544: Command "insert" disabled in Product User Profile
可以看到,HR用户无法通过SQL*Plus进行insert了。
要让HR用户能够通过SQL*Plus进行insert,则直接将product_user_profile里的记录删除即可:
SQL> delete product_user_profile where userid='HR' and product='SQL*Plus';
1 row deleted.
SQL> commit;
Commit complete.
然后再次测试hr的insert操作:
SQL> insert into jobs values('A','A',1,1);
1 row created.
SQL> commit;
Commit complete.
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/9842/viewspace-468355/
,如需转载,请注明出处,否则将追究法律责任。