如何锁定SQL*Plus命令安全

日期: 2008-07-10 作者:Amar Kumar Padhi翻译:April 来源:TechTarget中国 英文

你的数据安全吗?用户能用无效用户名和密码从SQL*Plus命令访问数据库,并且从应用程序中访问或编辑危险数据,而这些数据在应用程序中是访问不到的。问题是,你如何不让用户通过SQL*Plus连接到数据?学会怎样在用户的PRODUCT_USER_PROFILE (PUP)表中插入限定条件。   用户通过登录IDS能够访问应用程序。如果用户使用其用户名和密码无法登录数据库,那么他还能用用户名和密码通过SQL*Plus命令登录,这样用户还能够访问和编辑危险数据。

问题是你怎么阻止这些用户通过SQL*Plus命令访问数据?   一种办法就是设置密码,授予用户在应用程序中的权限,这样一来用户就不能通过SQL……

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

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

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

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

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

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

你的数据安全吗?用户能用无效用户名和密码从SQL*Plus命令访问数据库,并且从应用程序中访问或编辑危险数据,而这些数据在应用程序中是访问不到的。问题是,你如何不让用户通过SQL*Plus连接到数据?学会怎样在用户的PRODUCT_USER_PROFILE (PUP)表中插入限定条件。

  用户通过登录IDS能够访问应用程序。如果用户使用其用户名和密码无法登录数据库,那么他还能用用户名和密码通过SQL*Plus命令登录,这样用户还能够访问和编辑危险数据。问题是你怎么阻止这些用户通过SQL*Plus命令访问数据?

  一种办法就是设置密码,授予用户在应用程序中的权限,这样一来用户就不能通过SQL*Plus命令登录。另一种方法就是撤销从网上访问SQL*Plus的权限。保证操作程序和网络的安全才能使用户访问不到数据,而且还避免了对所有用户安装访问数据库的程序。这么麻烦的任务和选择对象能可使用下面的功能完成:

  产品层安全

  用户在基于SQL*Plus产品使用上受到限制。通过在用户的PRODUCT_USER_PROFILE (PUP)表里插入限定条件就能使他们在基于SQL*Plus产品使用上受限。当用户登录并用到那些记录限定条件时,SQL*Plus命令就会在PUP表里读取限定条件。

  如果用户用SYSDBA或SYSOPER登录时,SQL*Plus就不会读取PUP表,因此也就不会涉及到限制条件。

  创建

  在SYSTEM里自动创建SQLPLUS_PRODUCT_PROFILE表。

  PRODUCT_USER_PROFILE和PRODUCT_PROFILE都能够访问这个表,以前就有这些表,但是现在变成了相近的SQLPLUS_PRODUCT_PROFILE。PRODUCT_PRIVS同样也存在。

  为了创建这个表,需要运行pupbld.sql脚本。通常,这个脚本在$ORACLE_HOME/sqlplus/admin 路径中运行,具体的位置由系统决定。

  PUP表

  以下是PRODUCT_USER_PROFILE表的主要内容:

  PRODUCT——产品名称,SQL*Plus。

  USERID——大写的用户名。

  ATTRIBUTE——大写的不能用的指令。

  char_VALUE——也就是"DISABLED"。为限制这些对象,应该给这些列取一个对象名。

  SYSTEM保留了这一表的权限,所有用户有在该表上select权限。避免其他用户连接到这个表里的数据库操纵语言。

  可阻止的命令

  这个功能能阻止SQL, PL/SQL以及SQL*PLUS命令运行。使用这一功能还能阻止运行下列命令:

  SQL: alter, AUDIT, ANALYZE, create, delete, drop, insert, LOCK, NOAUDIT, rename,

  select, update, VALIDATE, truncate, GRANT, REVOKE, SET ROLE, SET TRANSACTION

  PL/SQL:DECLARE, BEGIN

  SQL*PLUS: COPY, HOST, SET, EDIT, PASSWORD, SPOOL, execute, QUIT, START, EXIT, RUN, GET, SAVE

  示例:

  insert into product_user_profile(product, userid, attribute, char_value)
                            values(’SQL*Plus’, ’APPS’, ’delete’, ’DISABLED’);

  insert into product_user_profile(product, userid, attribute, char_value)
                            values(’SQL*Plus’, ’APPS’, ’insert’, ’DISABLED’);

  insert into product_user_profile(product, userid, attribute, char_value)
                            values(’SQL*Plus’, ’APPS’, ’select’, ’DISABLED’);

  insert into product_user_profile(product, userid, attribute, char_value)

  如果需要对SQL*Plus阻止一个对象,就应该在下面的表中增加这个对象。

  应该给ATTRIBUTE COLUMN付’ROLES’值,char_VALUE就是要阻止的对象。下列语句用于从内部设定对象,不包括没有设定的对象。

insert into product_user_profile(product, userid, attribute, char_value)
                            values(’SQL*Plus’, ’APPS’, ’ROLES’, ’DBA’);
  避免使用PL/SQL

  例如,用户AMAR 没有delete权限,但他很容易通过PL/SQL块实现!删除PL/SQL块创建权限就能够避免这一点。通过这个功能还能锁定DECLARE和BEGIN语句阻止PL/SQL的运行。

  insert into system.product_profile (product, userid, attribute, char_value)
                               values (’SQL*Plus’, ’AMAR’, ’DECLARE’, ’DISABLED’);

   insert into system.product_profile (product, userid, attribute, char_value)
                             values (’SQL*Plus’, ’AMAR’, ’BEGIN’, ’DISABLED’);
  局限性:

  很容易就能看出这一功能有一些局限性:

  1、它只适用于SQL*Plus命令!对其他可以代替SQL*Plus命令的工具不管用。Oracle为数据层安全提供了FGAC机制,这一机制能够限制使用其他工具。

  2、PUP表适用于本地数据库。使用数据库链接会使PUP表里的限制条件也适用于其他远程数据库。

  总结:

  我用安全性能封闭应用程序用户权限,不许他们通过SQL*Plus命令访问数据库。然而这一功能有它自身的优点,应该注意防止使用错误的数据。正如我的DDL Event Security一文中提到的,你可使用的一些类似的功能。它们不是通过设置密码而建立的基本安全,也不是通过设置对象和权限而建立的安全。请按照setup要求启用上面的功能。

翻译

April
April

相关推荐