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

相关文章

使用jenv工具管理多个JDK版本的方法步骤

《使用jenv工具管理多个JDK版本的方法步骤》jenv是一个开源的Java环境管理工具,旨在帮助开发者在同一台机器上轻松管理和切换多个Java版本,:本文主要介绍使用jenv工具管理多个JD... 目录一、jenv到底是干啥的?二、jenv的核心功能(一)管理多个Java版本(二)支持插件扩展(三)环境隔

如何搭建并配置HTTPD文件服务及访问权限控制

《如何搭建并配置HTTPD文件服务及访问权限控制》:本文主要介绍如何搭建并配置HTTPD文件服务及访问权限控制的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、安装HTTPD服务二、HTTPD服务目录结构三、配置修改四、服务启动五、基于用户访问权限控制六、

Python中bisect_left 函数实现高效插入与有序列表管理

《Python中bisect_left函数实现高效插入与有序列表管理》Python的bisect_left函数通过二分查找高效定位有序列表插入位置,与bisect_right的区别在于处理重复元素时... 目录一、bisect_left 基本介绍1.1 函数定义1.2 核心功能二、bisect_left 与

Spring中管理bean对象的方式(专业级说明)

《Spring中管理bean对象的方式(专业级说明)》在Spring框架中,Bean的管理是核心功能,主要通过IoC(控制反转)容器实现,下面给大家介绍Spring中管理bean对象的方式,感兴趣的朋... 目录1.Bean的声明与注册1.1 基于XML配置1.2 基于注解(主流方式)1.3 基于Java

基于Python+PyQt5打造一个跨平台Emoji表情管理神器

《基于Python+PyQt5打造一个跨平台Emoji表情管理神器》在当今数字化社交时代,Emoji已成为全球通用的视觉语言,本文主要为大家详细介绍了如何使用Python和PyQt5开发一个功能全面的... 目录概述功能特性1. 全量Emoji集合2. 智能搜索系统3. 高效交互设计4. 现代化UI展示效果

SpringBoot整合Sa-Token实现RBAC权限模型的过程解析

《SpringBoot整合Sa-Token实现RBAC权限模型的过程解析》:本文主要介绍SpringBoot整合Sa-Token实现RBAC权限模型的过程解析,本文给大家介绍的非常详细,对大家的学... 目录前言一、基础概念1.1 RBAC模型核心概念1.2 Sa-Token核心功能1.3 环境准备二、表结

Mysql中的用户管理实践

《Mysql中的用户管理实践》:本文主要介绍Mysql中的用户管理实践,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录13. 用户管理13.1 用户 13.1.1 用户信息 13.1.2 创建用户 13.1.3 删除用户 13.1.4 修改用户

linux服务之NIS账户管理服务方式

《linux服务之NIS账户管理服务方式》:本文主要介绍linux服务之NIS账户管理服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、所需要的软件二、服务器配置1、安装 NIS 服务2、设定 NIS 的域名 (NIS domain name)3、修改主

详解如何在SpringBoot控制器中处理用户数据

《详解如何在SpringBoot控制器中处理用户数据》在SpringBoot应用开发中,控制器(Controller)扮演着至关重要的角色,它负责接收用户请求、处理数据并返回响应,本文将深入浅出地讲解... 目录一、获取请求参数1.1 获取查询参数1.2 获取路径参数二、处理表单提交2.1 处理表单数据三、

Python+PyQt5开发一个Windows电脑启动项管理神器

《Python+PyQt5开发一个Windows电脑启动项管理神器》:本文主要介绍如何使用PyQt5开发一款颜值与功能并存的Windows启动项管理工具,不仅能查看/删除现有启动项,还能智能添加新... 目录开篇:为什么我们需要启动项管理工具功能全景图核心技术解析1. Windows注册表操作2. 启动文件