javascript和JQuery焦点图和代码特效大全
当前最流行的开源CMS网站系统大全
当前位置:主页 > 数据库 > Oracle >

将oracle内置的安全特性用于PHP(2)

来源:IT技术网编辑:素还真发布于:2013-09-04人围观安全PhpOracle特性

使用中的授权和权限

在本部分中,我们将讨论如何使用 Oracle 的授权和权限来提高本文开头部分讨论的那个简单 CMS 示例的安全性。假定,提供给应用程序用户的内容存储在 WEB_CONTENT 表中。

首先,创建该表。启动 Oracle 特别版,以系统管理员身份登录。如果还没有释放示例 HR 用户,请将其释放。按照特别版安装附带的入门指南中的指示操作。请注意,默认情况下,HR 用户被赋予 RESOURCE 角色。在这里,赋予该用户 DBA 角色,这样就可以使用该帐户管理 CMS 应用程序的方面了。当然,不会使用 HR 用户帐户进行在线访问,只用它管理。

现在,可以使用对象浏览器或通过执行 SQL Commands 窗口创建新表。下面是创建该表的代码:

CREATE TABLE WEB_CONTENT (
page_id NUMBER PRIMARY KEY,
page_content VARCHAR2(255)
);


  由于该表是使用 HR 用户帐户创建的,因此该表归 HR 帐户所有并位于 HR 模式中,并且在明确授予其他用户访问该表的权限前,其他用户无法访问该表。如果不信,可以创建一个新用户,用该用户访问 WEB_CONTENT 表试试。

  现在,创建两个新用户,CMS_USER 和 CMS_EDITOR。最终,将授予 CMS_USER 对 WEB_CONTENT 表的只读权限,并将该用户用作为匿名 Web 用户提供内容的帐户。CMS_EDITOR 帐户将在该表上拥有更多权限,将被用作 CMS 编辑的帐户(该帐户需要更改和维护该表中的数据)。

  可以使用 XE 的图形界面或通过执行以下命令创建新用户:

CREATE USER cms_user IDENTIFIED BY cms_user;
CREATE USER cms_editor IDENTIFIED BY cms_editor;

    (出于简化的目的,此处的口令与用户名对应。)

  为了让这两个帐户都登录,我们需要赋予它们 CONNECT 角色。为此,在 XE 图形界面的 Administration/Database Users 部分选中用户信息下的 CONNECT 复选框,或执行以下命令:

GRANT CONNECT to cms_user;
GRANT CONNECT to cms_editor;


  现在,如果尝试以 CMS_USER 或 CMS_EDITOR 用户登录并试图从 WEB_CONTENT 表读取数据 (select * from hr.web_content;),将遇到以下错误:

ORA-00942:table or view does not exist


  为了访问数据或仅是看到表,需要授予 CMS_USER 和 CMS_EDITOR 帐户对 WEB_CONTENT 表的只读权限:

GRANT SELECT on hr.web_content to cms_user;
GRANT SELECT on hr.web_content to cms_editor;


  以上代码使这两个帐户可以对 WEB_CONTENT 表执行 SELECT 语句。如果尝试执行其他语句,则会遇到错误。例如,插入一行:

INSERT INTO hr.web_content (page_id,page_content) VALUES (1,'hello world');


  将产生错误消息

ORA-01031:insufficient privileges


  要允许 CMS_EDITOR 更改该表的内容,需要授予以下权限:

GRANT INSERT,UPDATE,DELETE on hr.web_content to cms_editor;


  从现在起,CMS_EDITOR 帐户可以对 WEB_CONTENT 表执行 INSERT、UPDATE 和 DELETE 语句。

  您看,这有多简单!可见通过角色管理权限是更有效的方法。如果使用的 Oracle 不是 XE,可以执行如下操作:

  创建角色:

CREATE ROLE reader;
CREATE ROLE writer;


  授予角色权限:

GRANT SELECT ON web_content TO reader;
GRANT INSERT,UPDATE,DELETE ON web_content TO writer;


  赋予用户角色:

GRANT reader TO cms_user;
GRANT reader TO cms_editor; (they need to read too)
GRANT writer TO cms_editor;


  请注意,如果更改 READER 角色的定义,则这些更改会影响所有具有该角色的用户帐户。如果是直接将权限授予用户的,则必须逐个更新每个用户帐户。

  完成上述步骤后,可以配置 PHP 应用程序,使之对由匿名 Web 用户请求的所有连接均使用 CMS_USER 帐户,对由受口令保护的管理页面引发的连接使用 CMS_EDITOR 帐户。现在,即使公共 Web 表单受到攻击,该攻击对的影响将微乎其微,这是因为 CMS_USER 帐户仅具有只读权限。

  结论

  在本文中,我们只是简单介绍了 Oracle 数据访问安全性的一些最基本的特性。此外,Oracle 还有许多其他特性,可把您的 Web 应用程序的安全性提高到一个新的等级 — 包括虚拟专用 (VPD) 和标签安全性。

安全,Php,Oracle,相关的文章
有时间的话来看看IT界的突发事件