限制用户从SQL*Plus访问Oracle对象

日期: 2008-07-20 作者:Murali Krishna翻译:April 来源:TechTarget中国 英文

许多Oracle产品都使用PRODUCT_USER_PROFILE,SYSTEM帐户里的表,提供产品层安全来补充SQL GRANT产品层安全,并且撤销用户role。这个表能用于限制用户从SQL*Plus访问Oraclel对象。我们提到的这个技巧适用于Oracle版本8,8i和9i。   一般观点:   在SQL*Plus环境里数据库管理员能够用PRODUCT_USER_PROFILE使SQL和SQL*Plus命令无效。

SQL*Plus而不是Oracle加强了数据库的安全性能。这样数据库管理员还能够限制用户访问GRANT, REVOKE和SET ROLE命令、控制用户改变访问数据库权限的能力。 ……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

许多Oracle产品都使用PRODUCT_USER_PROFILE,SYSTEM帐户里的表,提供产品层安全来补充SQL GRANT产品层安全,并且撤销用户role。这个表能用于限制用户从SQL*Plus访问Oraclel对象。我们提到的这个技巧适用于Oracle版本8,8i和9i。

  一般观点

  在SQL*Plus环境里数据库管理员能够用PRODUCT_USER_PROFILE使SQL和SQL*Plus命令无效。SQL*Plus而不是Oracle加强了数据库的安全性能。这样数据库管理员还能够限制用户访问GRANT, REVOKE和SET ROLE命令、控制用户改变访问数据库权限的能力。

  SQL*Plus从PRODUCT_USER_PROFILE语句读取限制范围。用户下次登录到SQL*Plus时,PRODUCT_USER_PROFILE的操作就会生效。

  创建表

  你可以通过运行带有SQL扩展名的PUPBLD命令文件,如SYSTEM创建PRODUCT_USER_PROFILE语句。准确地文件扩展名格式以及文件位置由SYSTEM决定。注意Oracle设置和用户指南为你或你的DBA提供了更多的有关操作系统方面的信息。

  表结构
  PRODUCT_USER_PROFILE表由下面这些column组成:

  PRODUCT  NOT NULL char (30) 
  USERID  char(30) 
  ATTRIBUTE  char(240) 
  SCOPE  char(240) 
  NUMERIC_VALUE  NUMBER(15,2) 
  char_VALUE  char(240) 
  DATE_VALUE  DATE 
  LONG_VALUE  LONG

  Column的说明和用途:

  下面的列表示对PRODUCT_USER_PROFILE表里Column的说明以及对每个column的用法。

  Product:必须包括产品名称(在SQL *Plus文件)。你不能在这一column里输入通配符或NULL,还必须注意产品名称SQL*Plus必须在列入混合文件中,以便经过验证。

  Userid:必须包括你想禁用的命令的用户名(在uppercase里)。为了使一个以上的用户不执行这个命令,使用SQL通配符(%)或输入多条语句。因此,下面的语句无效:

  SCOTT
  CLASS1
  CLASS% ( 所有名字以CLASS开头的用户)
  % (所有用户)

  Attribute:必须包括SQL、SQL*Plus或你想禁用的PL/SQL命令(如GET)。如果你禁用了一个role,那么它必须包括字符串“ROLES”,但是你不能输入一个通配符。参考下面在SQL和能禁用的SQL*Plus列表中的“Administration”。

  Scope:SQL*Plus不用包括这个列,你只需要输入NULL。其他产品可以在它里面存储一些数值。

  char_Value:必须包括字符串DISABLED用来禁用一个SQL、SQL*Plus或者PL/SQL命令。如果你正禁用role,那么它一定要包含你想禁用的role的名称。你不能用通配符。

  Date_Value:SQL*Plus不用包含列。你可以在这一列里输入NULL。其他的产品可在column里存储DATE值。

  Long_Value:SQL*Plus不包含这一列。你可以在它里面输入NULL。其他的产品可以在这一列中储存LONG数值。

  管理

  DBA用户SYSTEM拥有PRODUCT_USER_PROFILE.上的所有权限(当用户SYSTEM登录时,SQL*Plus不执行读PRODUCT_USER_PROFILE.的任务。因此,对于用户SYSTEM.没有权县范围的限制)。其他Oracle用户名只能通过select访问这个表,这样他们就能够了解表对用户名和对PUBLIC的限制范围。当PUPBLD命令文件运行时,它就允许select语句访问PRODUCT_USER_PROFILE to PUBLIC。

  禁用SQL*Plus、SQL以及PL/SQL命令

  如果想让用户禁用SQL*Plus、SQL以及PL/SQL命令,就只需要在Userid栏里插入一行用户名、在Attribute列里插入一行命令名、在char_Value栏里插入DISABLED。Scope、Numeric_Value以及Date_Value栏都应该包含NULL。如:

  PRODUCT   USERID ATTRIBUTE char_VALUE
  --------  ------ --------- ----------
  SQL*Plus  SCOTT  HOST      DISABLED  
  SQL*Plus  %      insert    DISABLED  
  SQL*Plus  %      update    DISABLED  
  SQL*Plus  %      delete    DISABLED  

  再运行这些命令时,需要删除含限制范围的行。

  你能禁用如下SQL*Plus命令:COPY、 EDIT、execute、EXIT、GET、HOST(或者是HOST操作系统的别名,如VMS 上的$以及UNIX上的!)、QUIT、 PASSWORD、RUN、SAVE、SET (查看下面的注释)、 SPOOL和START。

  注:禁用SQL*Plus SET指令的同时也会禁用SQL SET ROLE和SET TRANSACTION命令。禁用SQL*Plus START的同时也会禁用SQL*Plus @和@@命令。

  你同样也可以禁用下面的SQL命令:alter、ANALYZE、AUDIT、CONNECT、create、delete、drop、GRANT、insert、 LOCK、NOAUDIT、rename、REVOKE、select、SET ROLE、SET TRANSACTION、truncate和update。

  你还可以禁用PL/SQL命令:BEGIN,DECLARE。

  注:禁用BEGIN和DECLARE并不妨碍使用SQL*Plus execute命令。SQL*Plus execute必须分开禁用。

翻译

April
April

相关推荐