Linux中国 Linux中国门户站!
设为主页 设为主页
收藏本站 收藏本站
 
当前位置 :首页 ->Linux技术 ->系统管理 ->正文

Informix的用户权限管理

来源:Linux-cn.com 作者:Webmaster 时间:2007-05-05 点击: [收藏] [投稿]

有关数据库的权限

  存储在数据库中的数据对于一个商务活动来说是非常重要的。不仅要通过备份和制作日志来保证数据的不丢失,还要通过设置不同的访问权限来防止来自用户的善意的或恶意的破坏。一个公司不可能总是使用一个完全独立的数据库系统来保存雇员的工资信息。工资信息可能是与是保存在通常的数据库中,这样你就不需要两台机器和两个数据库服务软件包。即使你在一台服务中使用了两个完全独立的数据库,针对每个用户确定其访问数据库、数据表以及数据字段的权限还是很必要的。

  而目前众多的数据库管理系统总是更习惯于将用户权限的管理完全交给Application来完成。而真正操作数据库的往往是诸如DBA这样的拥有超级权限的数据库用户。我不能说这样的系统就一定会出安全性问题,但是至少这种做法会带来有关安全性的隐患。对于数据库用户权限的设置,绝大多数成熟的数据库都提供了一种大同小异的做法。我们这里以Informix为例,仅仅是因为我在使用Informix时发现网上对于Informix的用户权限设置缺少详实的资料。希望这份文档能对Informix的应用者有所帮助(尽管现在Informix的市场占有率是出奇的低。)

有关我们的系统

  我们使用的数据库数据服务器上的操作系统是SCO UNIX 5.05,数据库选用Informix 7.3。由于选用操作系统和数据库的不同,以下的操作可能会用细微的差别。

创建新用户

  在我们使用的平台上,Informix的数据库用户对应于UNIX的系统用户,因此创建新用户的过程也就是创建UNIX系统用户的过程,我们可以用root登录后使用如下命令创建三个新的用户:


#useradd mydba
#useradd myuser1
#useradd myuser2

  然后使用passwd给这三个用户设置相应的口令,我们可以看到由于我们的useradd命令没有采用完整的格式,因此这三个用户并不能真正用来登录到我们的UNIX主机,而只能作为数据库用户来使用。

数据库级别的用户权限

  对于所有的有权使用(这里的有权使用可能意味着该用户只能浏览该数据库中某一数据表的某一字段)该数据库的数据库用户都必须赋予其数据库级别的用户权限。在Informix中,数据库级别的用户权限有三种,按权限的大小依次是connect、resource和DBA。

Connect

  这是级别最低的一种数据库级别的用户权限。拥有该权限的用户可以执行select、insert、update和delete语句,针对数据表执行存储过程,创建数据表的视图,创建临时表(这样的临时表可以有索引,也可以没有索引)。

Resource

  拥有该权限的用户除拥有connect的全部权限以外,他还可以创建新的表,并可以对它自己所创建的表执行alter和drop操作,并可以对这些表创建索引。

DBA

  数据库的建立者和拥有者被自动赋予这种权限。拥有该权限的用户除拥有resource的全部权限以外,他还可以对其他用户赋予或解除connect、resource和DBA权限,可以对其它用户创建的表的视图执行drop和alter操作。甚至他还可以对数据库执行drop、start、stop和recover操作。

新数据库的建立并为各用户赋予相应的数据库级别的权限

  使用有权登录到UNIX主机的用户创建一个新的数据库(create database databasename命令)。如上所述,现在该用户将对新创建的databasename数据库拥有DBA的权限。连接到这个库后,采用GRANT命令可以对其它用户赋予相应的数据库级别的权限。(事实上这是一个真正意义上的超级用户,换言之也是最危险的用户,在我们下面赋予了mydba以该表的DBA权限以后,我们将不再使用这个用户)。

  赋予用户相应的数据库级别的权限的格式是:

GRANT 权限 TO 用户名[,用户名]

  于是,我们可以使用下面的三个命令给我们新创建的用户赋予相应的数据库级别的权限。


GRANT DBA TO mydba;/*赋予mydba以DBA的权限*/ 
GRANT CONNECT TO myuser1,myuser2;/*赋予myuser1,myuser2以CONNECT的权限*/ 

  在这里,我们有必要介绍一个特殊的用户public,如果使用GRANT ... TO PUBLIC,这将意味着赋予所有用户某种权限,当然,这种做法也许并不可取。

用户数据库级别权限的解除

  解除用户相应的数据库级别的权限的格式是:

REVOKE 权限 FROM 用户名[,用户名]

  对于拥有DBA、RESOURCE权限的用户,解除其相应的DBA、RESOURCE权限将自动将其降格为CONNECT权限。

  而对于只拥有CONNECT权限的用户,解除其CONNECT权限实际上也就意味着删除该数据库用户。

  示例:


REVOKE DBA FROM mydba;/*将mydba降格为CONNECT权限*/
REVOKE CONNECT FROM myuser1;/*解除myuser1对该数据库的访问权限*/

表级别和字段级别的权限

  当一个用户访问数据库时,DBA可以限制其对指定表和表中指定字段的访问。任何resource级别或DBA级别的用户都可以创建表。表的拥有者或任何DBA级别的用户都可以对其它用户赋予或解除针对该数据表的表级别和字段级别的权限。这样的权限共有八种:insert、delete、select、update、references、index、alter和all。

 如果您对本文有任何疑问或者建议,请到讨论区发表您的意见: >> 论坛入口 <<



上一篇:优化Entity Beans的七条守则   下一篇:动态负载平衡DNS简介

文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【我要投稿】 【论坛讨论
更多相关文章
Power by linux-cn.com 粤ICP备05006655号