如何限制使用者能夠在SQL*Plus發出哪些命令以及不能發出哪些命令

hanson發表於2019-03-14
在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部落格 ” ,連結:http://blog.itpub.net/9842/viewspace-468355/,如需轉載,請註明出處,否則將追究法律責任。

相關文章