你的数据安全吗?用户能用无效用户名和密码从SQL*Plus命令访问数据库,并且从应用程序中访问或编辑危险数据,而这些数据在应用程序中是访问不到的。问题是,你如何不让用户通过SQL*Plus连接到数据?学会怎样在用户的PRODUCT_USER_PROFILE (PUP)表中插入限定条件。 用户通过登录IDS能够访问应用程序。如果用户使用其用户名和密码无法登录数据库,那么他还能用用户名和密码通过SQL*Plus命令登录,这样用户还能够访问和编辑危险数据。
问题是你怎么阻止这些用户通过SQL*Plus命令访问数据? 一种办法就是设置密码,授予用户在应用程序中的权限,这样一来用户就不能通过SQL……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属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要求启用上面的功能。
翻译
相关推荐
-
关乎企业文化的BYOD
如今,BYOD已经以星火燎原之势在企业内部迅速蔓延,然而对于BYOD的普及,很多企业仍然持观望态度
-
Oracle 数据库12c新特性总结(四)
本文是Oracle数据库12c新特性的系列文章的第四篇,作者将重点介绍一些对开发者而言非常有用的新特性。
-
甲骨文针对Java 7发布零天漏洞更新
甲骨文公司昨日发布了两个针对Java零天(zero day)漏洞的带外(out-of-band)安全更新,其中漏洞CVE-2013-0422在发现当天就已被攻击。
-
SSH 加密MySQL复制的正确建制
MySQL数据库很受人欢迎的原因,有它的免费性与开源性,而且MySQL数据库拥有比较详细的文档与内置支持数据MySQL复制等。