热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

将Oracle内置的安全特性用于PHP

php教程|php手册CONTENT,CMS,Web,Oracle,EDITORphp教程-php手册当今大多数Web应用程序都需要至少采用某种基本的安全策略。例如,提供用口令保护

php教程|php手册将 Oracle 内置的安全特性用于 PHP
CONTENT,CMS,Web,Oracle,EDITOR
php教程-php手册
当今大多数 Web 应用程序都需要至少采用某种基本的安全策略。例如,提供用口令保护的内容的网站、仅具有管理员后端的网站、网志和个人杂志、电子商务网站、企业内联网,等等。

构建这些类型的 Web 应用程序最常用的设计方法是将安全策略整合到 Web 应用程序的业务逻辑中,即由应用程序决定某个用户是否有权访问数据库中的某个数据。在这种情形下,数据库的角色仅为存储数据和依请求提供数据。换句话说,如果 Web 应用程序命令数据库提供特定信息,则数据库会直接执行该命令而不检查用户的权限。

在该文中,您将学习如何利用 Oracle 内置的安全特性在数据库级执行应用程序安全规则,以提高应用程序的整体安全性。作为附带的好处,直接在数据库中实现数据访问安全不但有助于提高应用程的安全性,而且有助于降低复杂性。

对数据库端安全性的需求

从 Web 应用程序控制数据访问会怎么样?大多数情况下没有问题;这是个不错的解决方案,尤其是在涉及的数据为非任务关键或绝密的时候。许多书和在线资源中都用到了该方法。实际上,有本很受欢迎的 PHP/MySQL 书明确反对每个应用程序创建一个以上的数据库用户帐户,这是因为“额外的用户或复杂的权限会因某个操作在继续前要检查更多的信息而降低 MySQL 的执行速度”。确实如此;但是,在放弃将安全性整合到数据库逻辑中的想法前可能要考虑几件事情。我们来看以下示例。

假设创建一个内容管理系统 (CMS)。其中使用数据库来存储网站上发布的内容。大部分数据是公开的,允许匿名 Web 用户读取;但只允许编辑更改数据。使用单一数据库帐户访问和修改数据库中的记录,并通过用口令保护仅管理员可以访问的页面的访问权限用 PHP 代码控制安全性。

如果 Web 应用程序的公共端遭受了一个诸如公共搜索表单(即编码不够严密的表单)上的 SQL 注入的攻击,则该入侵者可能能够对该公共帐户可以访问的数据库对象执行任意 SQL 语句。当然,就这里的情形而言,执行 SELECT 语句不会造成什么大问题,这是因为数据本来就是公共的。但由于公共权限和管理权限使用同一数据库帐户,因此入侵者还能执行 UPDATE 和 DELETE 语句,甚至是从数据库中删除表。

怎么才能防止该情况的发生呢?最简单的方法就是彻底限制公共数据库帐户修改数据的权限。我们来看看 Oracle 是如何解决这个问题的。

Oracle 安全性基本概述

Oracle 数据库为 Web 开发人员提供了控制数据访问的许多方法,从管理对特定数据库对象(如表、视图和过程)的访问到控制个别行或列的数据的访问。很显然,对 Oracle 每个安全特性或可用选项的讨论超出了本文的范围。在这里,我们将不涉及过多细节,而仅介绍 Oracle 数据访问安全性的最基本方面: 验证和用户帐户、权限、角色

验证和用户帐户。 与其他数据库一样,请求访问 Oracle 的每个用户(数据库帐户)必须通过验证。验证工作可以由数据库、操作系统或网络服务来做。除基本的验证(口令验证)外,Oracle 还支持强验证机制,如Kerberos、CyberSafe、RADIUS,等等。

角色。 Oracle 角色是一个权限的有名集。尽管可以直接授予用户帐户权限,但使用角色可以极大简化用户管理,尤其是需要管理大量用户时。创建易管理的小角色,然后根据用户的安全级别授予用户一个或多个角色,这样做的效率非常高。更不用说修改权限变得如何简单了 — 只需修改角色关联的角色即可,无需修改每个用户帐户。

为了简化新用户创建初期的工作,Oracle 自带了三个预定义的角色:

CONNECT 角色 — 该角色使用户可以连接数据库以及执行基本的操作,如创建自己的表。默认情况下,该角色不能访问其他用户的表。

RESOURCE 角色 — RESOURCE 角色与 CONNECT 角色相似,但它允许用户拥有较多的系统权限,如创建触发器或存储过程。

DBA 角色 — 允许用户拥有所有系统权限。

使用中的授权和权限

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

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

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

小学整站源码破解版,ubuntu主题深度定制,修改tomcat端口号80,美女爬虫安卓,php把数组存入数据库,爱战seolzw

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 的图形界面或通过执行以下命令创建新用户:

闽玩十三水源码,vscode禁用快捷键,ubuntu 恢复历史,tomcat在哪修改路径,夏天褐色爬虫,php 政府网站源码,seo到底能做什么优化,烧烤网站源码,dedecms怎么没有会员登录模板lzw

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

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

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

网页管理文件源码下载,Vscode 支持mfc吗,ubuntu设置777,tomcat的网页后缀,贵州爬虫,PHP 文件长度,江门市seo优化,asp网站手机模版,c winform 界面模板lzw

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 为背景的数据库安全问题,请参阅我的 OTN 文章,“为 PHP 应用程序增加数据安全性”。


推荐阅读
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • 本文介绍了使用哈夫曼树实现文件压缩和解压的方法。首先对数据结构课程设计中的代码进行了分析,包括使用时间调用、常量定义和统计文件中各个字符时相关的结构体。然后讨论了哈夫曼树的实现原理和算法。最后介绍了文件压缩和解压的具体步骤,包括字符统计、构建哈夫曼树、生成编码表、编码和解码过程。通过实例演示了文件压缩和解压的效果。本文的内容对于理解哈夫曼树的实现原理和应用具有一定的参考价值。 ... [详细]
  • Oracle 和 mysql的9点区别【MySQL】
    数据库|mysql教程oracle,Oracle,money,mysql,coun数据库-mysql教程1.组函数用法规则mysql中组函数在select语句中可以随意使用,但在o ... [详细]
  • 首先,给栏目分类表dede_arctype表增加缩略图字段typeimg,用phpMyAdmin或其他数据库管理工具,直接在数据表中添加该字段,或者运行下面的SQL语句:alter ... [详细]
  • YII Framework框架教程之国际化实现方法【PHP】
    后端开发|php教程YII,Framework,国际化后端开发-php教程本文讲述了YIIFramework框架教学之国际化实现方法。分享给大家供大家参考,具体如下:php图书馆源 ... [详细]
  • Redis抢票先进先出
    php教程|php手册Redis,抢票,先进,先出,Redis+Thinkphp,php教程-php手册手机端模版源码,vscode怎么写c加加,ubuntu安装.run,tomc ... [详细]
  • 本文介绍了游标的使用方法,并以一个水果供应商数据库为例进行了说明。首先创建了一个名为fruits的表,包含了水果的id、供应商id、名称和价格等字段。然后使用游标查询了水果的名称和价格,并将结果输出。最后对游标进行了关闭操作。通过本文可以了解到游标在数据库操作中的应用。 ... [详细]
  • 2016 linux发行版排行_灵越7590 安装 linux (manjarognome)
    RT之前做了一次灵越7590黑苹果炒作业的文章,希望能够分享给更多不想折腾的人。kawauso:教你如何给灵越7590黑苹果抄作业​zhuanlan.z ... [详细]
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
  • 深入解析Linux下的I/O多路转接epoll技术
    本文深入解析了Linux下的I/O多路转接epoll技术,介绍了select和poll函数的问题,以及epoll函数的设计和优点。同时讲解了epoll函数的使用方法,包括epoll_create和epoll_ctl两个系统调用。 ... [详细]
  • 面试经验分享:华为面试四轮电话面试、一轮笔试、一轮主管视频面试、一轮hr视频面试
    最近有朋友去华为面试,面试经历包括四轮电话面试、一轮笔试、一轮主管视频面试、一轮hr视频面试。80%的人都在第一轮电话面试中失败,因为缺乏基础知识。面试问题涉及 ... [详细]
  • 程序员如何选择机械键盘轴体?红轴和茶轴对比
    本文介绍了程序员如何选择机械键盘轴体,特别是红轴和茶轴的对比。同时还介绍了U盘安装Linux镜像的步骤,以及在Linux系统中安装软件的命令行操作。此外,还介绍了nodejs和npm的安装方法,以及在VSCode中安装和配置常用插件的方法。最后,还介绍了如何在GitHub上配置SSH密钥和git的基本配置。 ... [详细]
author-avatar
没有水的鱼0713
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有