|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
终于理解了数据库的概念,而且让你兴奋不已的是你终于可以通过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 窗口创立新表。上面是创立该表的代码:
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) 和标签平安性。告诉你了一个方式,但是缺少努力这一环节,那也是白搭。 |
|