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

相关文章

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

软考系统规划与管理师考试证书含金量高吗?

2024年软考系统规划与管理师考试报名时间节点: 报名时间:2024年上半年软考将于3月中旬陆续开始报名 考试时间:上半年5月25日到28日,下半年11月9日到12日 分数线:所有科目成绩均须达到45分以上(包括45分)方可通过考试 成绩查询:可在“中国计算机技术职业资格网”上查询软考成绩 出成绩时间:预计在11月左右 证书领取时间:一般在考试成绩公布后3~4个月,各地领取时间有所不同

安全管理体系化的智慧油站开源了。

AI视频监控平台简介 AI视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。用户只需在界面上进行简单的操作,就可以实现全视频的接入及布控。摄像头管理模块用于多种终端设备、智能设备的接入及管理。平台支持包括摄像头等终端感知设备接入,为整个平台提

从状态管理到性能优化:全面解析 Android Compose

文章目录 引言一、Android Compose基本概念1.1 什么是Android Compose?1.2 Compose的优势1.3 如何在项目中使用Compose 二、Compose中的状态管理2.1 状态管理的重要性2.2 Compose中的状态和数据流2.3 使用State和MutableState处理状态2.4 通过ViewModel进行状态管理 三、Compose中的列表和滚动

【Kubernetes】K8s 的安全框架和用户认证

K8s 的安全框架和用户认证 1.Kubernetes 的安全框架1.1 认证:Authentication1.2 鉴权:Authorization1.3 准入控制:Admission Control 2.Kubernetes 的用户认证2.1 Kubernetes 的用户认证方式2.2 配置 Kubernetes 集群使用密码认证 Kubernetes 作为一个分布式的虚拟

Sentinel 高可用流量管理框架

Sentinel 是面向分布式服务架构的高可用流量防护组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性。 Sentinel 具有以下特性: 丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应

NGINX轻松管理10万长连接 --- 基于2GB内存的CentOS 6.5 x86-64

转自:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=190176&id=4234854 一 前言 当管理大量连接时,特别是只有少量活跃连接,NGINX有比较好的CPU和RAM利用率,如今是多终端保持在线的时代,更能让NGINX发挥这个优点。本文做一个简单测试,NGINX在一个普通PC虚拟机上维护100k的HTTP

PMBOK® 第六版 规划进度管理

目录 读后感—PMBOK第六版 目录 规划进度管理主要关注为整个项目期间的进度管理提供指南和方向。以下是两个案例,展示了进度管理中的复杂性和潜在的冲突: 案例一:近期,一个长期合作的客户因政策要求,急需我们为多家医院升级一个小功能。在这个过程中出现了三个主要问题: 在双方确认接口协议后,客户私自修改接口并未通知我们,直到催进度时才发现这个问题关于UI设计的部分,后台开发人员未将其传递给

PHP原理之内存管理中难懂的几个点

PHP的内存管理, 分为俩大部分, 第一部分是PHP自身的内存管理, 这部分主要的内容就是引用计数, 写时复制, 等等面向应用的层面的管理. 而第二部分就是今天我要介绍的, zend_alloc中描写的关于PHP自身的内存管理, 包括它是如何管理可用内存, 如何分配内存等. 另外, 为什么要写这个呢, 因为之前并没有任何资料来介绍PHP内存管理中使用的策略, 数据结构, 或者算法. 而在我们