首页 首页 人工智能 查看内容

如何让应用开发者工作、安全两不误

木马童年 2019-5-28 09:15 45 0

应用开发者在数据库管理中扮演了一个很特殊的角色。其不同于数据库管理员,没有数据库的完全管理能力,如无法创建基础表等等;其也不同于普通的数据库用户,他可能具有一定的数据库开发能力,如创建用户、建立视图等 ...

应用开发者在数据库管理中扮演了一个很特殊的角色。其不同于数据库管理员,没有数据库的完全管理能力,如无法创建基础表等等;其也不同于普通的数据库用户,他可能具有一定的数据库开发能力,如创建用户、建立视图等等。

在实际工作中,承担这类角色的往往是企业的项目管理员。如某个企业在用一套商业ERP软件,而这套软件中有报表自定义功能。当企业的ERP软件管理人员通过报表自定义功能创建新报表时,他就是数据库应用开发者。

由于这些应用开发者具有一定的数据库操作权限,为此,从安全考虑,数据库管理员必须为这些应用开发者定义一类特殊的安全策略。一方面,应用开发者应该具有创建他们工作所需对象的权限;另一方面,也需要确保其不能够对其他一些基础对象进行修改,以造成对其他应用的影响。如现在有一张产品基本信息表与供应商价格表。现在应用开发者想设计一种报表,用来分析系统默认供应商的价格是否是所有该产品供应商价格中最低的一个。此时,应用开发者只能够具有视图创建的权限,而不能够具有修改这两张基础表的权利。如果他们一不小心,把基础表的内容进行了修改。如把产品的编号字段从不允许为空更改为允许为空;或者把产品编号的长度从10位改为了20位。那么在其他单据中,如采购订单中引用整个产品编号就会产生问题。因为其默认显示长度为10位,而不是20位。可见,对应用开发者进行一定的权限控制,是非常有必要的。

那么,该如何设置,才能够让应用开发者工作、安全两不误呢?笔者在实际工作中,主要采取两种策略。

一、推荐两个原则性的策略。

一是完全杜绝应用开发者的数据库操作权限。也就是说,不允许应用开发者创建新的数据库对象。包括所有的表、视图、过程、函数等等。若他们需要创建这些对象,则需要向数据库管理员申请才行。数据库管理员受到他们的申请之后,再根据实际情况来进行创建。这种方式的好处就是数据库管理员完全控制了数据库的操作,有利于保障数据库各个对象的统一性;同时,也有利于保障数据库的安全。不过缺点就是会丧失应用软件一定的灵活性。如一些报表自定义、应用字典等提高应用软件灵活性的手段,都需要应用开发者具有一定的数据库管理权限。

二是对应用开发者的权限进行控制。也即是说,应用开发者可以在一定的范围之内,创建表、索引、过程、包等等数据库对象。但是,必须对他们的权限进行限制,不能够让他们具有数据库中总体权利。如此的话,是非常危险的。若这么处理,好处就是能够充分提高应用软件的灵活性。应用开发者可以通过数据字典或者报表自定义系统平台来创建所需要的对象,甚至也可以更改原有基础表的内容等等。但是,其不利之处也有很多。如应用开发者在不熟悉数据库背后逻辑的情况下,可能会影响应用软件的稳定性。例如,在产品基本信息表中,应用开发者可能觉得规格字段不够长,把长度从200改为250。但是,在订单行中,这个产品描述的字段长度仍然为200。此时,在订单中保存就会出现错误。因为有些ERP系统中,再销售订单行中规格字段也是一个实体字段,主要方便销售人员在销售订单上直接对相关的产品规格进行修改。并且,还可以控制是否直接更新产品信息表中的描述字段。也就是说,某个字段可能会在多个表单中使用,而应用开发者可能由于不熟悉这个字段到底在哪几个表单使用。在修改的时候,只修改了部分的,从而给其他表单的应用造成了不必要的麻烦。

二、三个具体的指导意见。

为了管理应用开发者在工作时所需要的权限,同时实现不影响工作、又对数据库不会产生安全隐患的两个目的,则数据库管理员最好能够为应用开发者创建特殊的角色,以对他们的权限进行控制。

一是需要限制应用开发者对原有对象的修改。如应用开发者只可以新建数据库对象,如新建数据视图或者数据表,但是,不能够对原有的数据库对对象进行更改。如应用开发者不能够调整原有数据库表中字段的存储大小,等等。如此的话,就可以避免因为应用开发者不小心改变了字段的定义,而给应用程序的其他表单产生不利的影响。要实现这个限制的话,有两种途径。一是通过数据库来进行限制。如可以利用数据库中对象的所有者来控制。即对于应用程序开发者,对于原有的数据库对象只有查询权限。而对于新建的数据库对象,由于应用程序开发者是其主人,所以对其建立的数据库对象则有完全控制的权限。这个处理方式有一个权限,就是不能够细化到字段。也就说,如果应用程序想在原有的表单中插入一个字段,这么简单的二次开发也是不能够完成的。因为其对原始的数据表只有查询权限,而没有修改数据库对象的权限。二是可以通过前台的应用程序来控制。因为应用开发者往往是通过前台应用程序所提供的应用字典等平台来进行对数据库的调整。为此,可以在应用程序把更改传递到数据库之前,先进行判断。看看应用开发者是否在对原始的数据表进行更改。若没有的话,则可以把更改结果直接应用到数据库中。如果是在对原始数据表进行更改的话,则就需要判断其在进行什么操作。如果是插入一个新的字段则是允许的;若是更改原始字段的长度、删除原始字段等等的操作则是不允许的。所以,通过应用程序来控制的话,可以更加细分。但是,就是会增加应用程序开发的复杂性。

二是为应用开发者创建独立的表空间,方便对他们进行管理。当数据库管理员给了应用开发了一定的数据库权限,让他们可以在数据库中创建对象时,数据库管理员最好能够为他们创建一个独立的空间。如此的话,无论是在数据库的日产维护中,而且在后续应用软件的升级中,都会省去不少的麻烦。如在以后应用程序升级中,则数据库管理员只需要负责原始的部分。而对于应用开发者创建的数据库对象,则仍然可以由其进行升级。很明显,若把他们存放在不同的表空间上,则后面区分起来,就会容易许多。具体的来说,数据库管理员可以这么做。如创建一个独立的表空间,应用开发者只能够在这个表空间中创建数据库对象;若有必要的情况下,还可以为这个应用开发者创建表空间限额,以利于数据库管理员对数据库表空间进行一个整体的规划。总之一个原则就是,数据库管理员要与应用开发者建立一个明确的界限,让双方都能够非常容易而且准确的定位自己所开发的数据库对象。

三是授予Create系统权限,而禁用Create Any权限。笔者往往会将数据库的Create权限授予给应用开发者。这可以容纳给他们创建自己所需要的对象。允许应用开发者为了开发目的而创建他们自己的对象,这种方法很实用,也可以提高应用开发者的灵活性。但是,千万不能够给他们Create Any权限。因为这个系统权限,将允许应用开发者在任何用户的方案中创建对象。为此,通常情况下,不应该把这个权限授予普通的应用开发者。只授予 Create权限,而不授予Create Any权限,则应用开发者只有在自己的用户方案下创建对象,而不会去影响其他用户的方案。这显然即方便了应用开发者的开发工作,也有利于提供数据库的安全性与一致性。跟上面所说的表空间限制结合,则可以在很大程度上规范应用开发者的开发行为;并且让应用开发者与数据库管理员的工作在一定程度上隔离开来。从而实现应用开发者工作、数据库安全两不误的目的。

在不久的将来,多智时代一定会彻底走入我们的生活,有兴趣入行未来前沿产业的朋友,可以收藏多智时代,及时获取人工智能、大数据、云计算和物联网的前沿资讯和基础知识,让我们一起携手,引领人工智能的未来!

数据库 供应商 应用软件 数据视图 应用程序 安全性
0