ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 如何限制用户能够在SQL*Plus发出哪些命令以及不能发出哪些命令

如何限制用户能够在SQL*Plus发出哪些命令以及不能发出哪些命令

原创 Linux操作系统 作者:hanson 时间:2019-03-14 12:03:05 0 删除 编辑
在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/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2002-04-14

  • 博文量
    54
  • 访问量
    52805