Informix的用户权限管理完全版

2024-06-23 08:48

本文主要是介绍Informix的用户权限管理完全版,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

有关数据库的权限

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

  而目前众多的数据库管理系统总是更习惯于将用户权限的管理完全交给 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。

  Insert

  该权限表示用户能向表中增添新的数据。

  Delete

  该权限表示用户能删除表中的数据。

  Select

  该权限能扩展到指定字段,表示用户能查询表中的记录或指定字段。

  Update

  该权限能扩展到指定字段,表示用户能修改表中的记录或指定字段。

  References

  该权限能扩展到指定字段,表示用户能针对表中的记录或指定字段制定参考性约束条件。参考性约束条件用来执行诸如多级删除和字段之间关联的工作。赋予该权限的用户应该首先至少是resource级别的用户。

  Index

  该权限表示用户能建立或删除和表有关的索引。赋予该权限的用户应该首先至少是resource级别的用户。一个connect级别的用户即使被赋予该权限也不能建立索引。该权限不能扩展到指定字段,这是因为索引是建立在表的所有行的基础上的。

  Alter

  该权限表示用户能改动表的结构。所谓改动表的结构是指增加、删除和改动字段或改动字段的数据类型。该权限只能针对数据表。一般来说,只有对于具有数据库系统知识并知道怎么保护数据库系统的人,我们才会赋予此项权限。

  All

  该权限包含上面的所有七种权限。

  创建新表

  使用mydba登录到数据库,并使用如下语句创建一个新的数据表:

  CREATE TABLE customer_table (

  customer_id char(2) not null,

  balance decimal(16, 2) not null,

  primary key(customer_id));

  在创建新表后,系统将对public赋予该表All的权限。也就是说所有能访问该数据库的用户都能对该表执行select、insert、update和delete语句,这显然不是我们想要看到的。

  用户表级别和字段级别权限的解除

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

  REVOKE 权限[,权限] [(字段名[,字段名])] ON 表名 FROM 用户名[,用户名]

  我们首先需要解除public在该表上的All权限:

  REVOKE ALL ON customer_table FROM PUBLIC;

  其他示例:

  REVOKE INSERT ON customer_table FROM PUBLIC;/*解除所有用户对该表的INSERT权限*/

  REVOKE SELECT ON customer_table FROM myuser1;/*解除myuser1对该表的SELECT权限*/

  REVOKE UPDATE (customer_id, balance)

  ON customer_table FROM myuser1;/*解除myuser1对该表中customer_id, balance字段的UPDATE权限*/

  用户表级别和字段级别权限的赋予

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

  GRANT 权限[,权限] [(字段名[,字段名])] ON 表名 TO 用户名[,用户名]

  我们赋予myuser1以更改该表中balance字段的权限:

  GRANT UPDATE (balance) ON customer_table TO myuser1;

  赋予myuser2以浏览该表的权限:

  GRANT SELECT ON customer_table TO myuser2;

  多种权限的同时赋予和解除

  从上面的REVOKE和GRANT的格式,我们可看到,其实我们能使用一条命令同时针对某一用户赋予或解除多种表级别或字段级别的权限。例如:

  GRANT INSERT, DELETE, UPDATE ON customer_table TO PUBLIC;/*同时赋予所有用户对该表的INSERT、DELETE和UPDATE权限*/

  GRANT SELECT, UPDATE (balance)

  ON customer_table TO myuser2;/*同时赋予myuser2对该表中balance字段的SELECT和UPDATE权限*/

  REVOKE INDEX, ALTER ON customer_table FROM myuser1;/*同时解除myuser1对该表的INDEX和ALTER权限*/

  你也能在一条语句中同时针对某一用户赋予或解除表级别和字段级别的权限,这时字段级别的权限使用指定的字段,而表级别的权限使用指定的数据表。例如:

  GRANT INSERT, DELETE, SELECT, UPDATE (balance) ON customer_table TO myuser2;

  /*同时赋予myuser2对该表的INSERT、DELETE权限及对字段balance的SELECT和UPDATE权限*/

  REVOKE INDEX, SELECT, ALTER (balance) ON customer_table FROM myuser1;

  /*同时赋予myuser1对该表的INDEX、ALTER权 

这篇关于Informix的用户权限管理完全版的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1086688

相关文章

nvm如何切换与管理node版本

《nvm如何切换与管理node版本》:本文主要介绍nvm如何切换与管理node版本问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录nvm切换与管理node版本nvm安装nvm常用命令总结nvm切换与管理node版本nvm适用于多项目同时开发,然后项目适配no

SpringSecurity 认证、注销、权限控制功能(注销、记住密码、自定义登入页)

《SpringSecurity认证、注销、权限控制功能(注销、记住密码、自定义登入页)》SpringSecurity是一个强大的Java框架,用于保护应用程序的安全性,它提供了一套全面的安全解决方案... 目录简介认识Spring Security“认证”(Authentication)“授权” (Auth

mysql删除无用用户的方法实现

《mysql删除无用用户的方法实现》本文主要介绍了mysql删除无用用户的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 1、删除不用的账户(1) 查看当前已存在账户mysql> select user,host,pa

Spring Security注解方式权限控制过程

《SpringSecurity注解方式权限控制过程》:本文主要介绍SpringSecurity注解方式权限控制过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、摘要二、实现步骤2.1 在配置类中添加权限注解的支持2.2 创建Controller类2.3 Us

Redis实现RBAC权限管理

《Redis实现RBAC权限管理》本文主要介绍了Redis实现RBAC权限管理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1. 什么是 RBAC?2. 为什么使用 Redis 实现 RBAC?3. 设计 RBAC 数据结构

Vue中动态权限到按钮的完整实现方案详解

《Vue中动态权限到按钮的完整实现方案详解》这篇文章主要为大家详细介绍了Vue如何在现有方案的基础上加入对路由的增、删、改、查权限控制,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、数据库设计扩展1.1 修改路由表(routes)1.2 修改角色与路由权限表(role_routes)二、后端接口设计

mac安装nvm(node.js)多版本管理实践步骤

《mac安装nvm(node.js)多版本管理实践步骤》:本文主要介绍mac安装nvm(node.js)多版本管理的相关资料,NVM是一个用于管理多个Node.js版本的命令行工具,它允许开发者在... 目录NVM功能简介MAC安装实践一、下载nvm二、安装nvm三、安装node.js总结NVM功能简介N

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

SpringBoot中使用 ThreadLocal 进行多线程上下文管理及注意事项小结

《SpringBoot中使用ThreadLocal进行多线程上下文管理及注意事项小结》本文详细介绍了ThreadLocal的原理、使用场景和示例代码,并在SpringBoot中使用ThreadLo... 目录前言技术积累1.什么是 ThreadLocal2. ThreadLocal 的原理2.1 线程隔离2

TP-Link PDDNS服将于务6月30日正式停运:用户需转向第三方DDNS服务

《TP-LinkPDDNS服将于务6月30日正式停运:用户需转向第三方DDNS服务》近期,路由器制造巨头普联(TP-Link)在用户群体中引发了一系列重要变动,上个月,公司发出了一则通知,明确要求所... 路由器厂商普联(TP-Link)上个月发布公告要求所有用户必须完成实名认证后才能继续使用普联提供的 D