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

相关文章

用Microsoft.Extensions.Hosting 管理WPF项目.

首先引入必要的包: <ItemGroup><PackageReference Include="CommunityToolkit.Mvvm" Version="8.2.2" /><PackageReference Include="Microsoft.Extensions.Hosting" Version="8.0.0" /><PackageReference Include="Serilog

关于如何更好管理好数据库的一点思考

本文尝试从数据库设计理论、ER图简介、性能优化、避免过度设计及权限管理方面进行思考阐述。 一、数据库范式 以下通过详细的示例说明数据库范式的概念,将逐步规范化一个例子,逐级说明每个范式的要求和变换过程。 示例:学生课程登记系统 初始表格如下: 学生ID学生姓名课程ID课程名称教师教师办公室1张三101数学王老师101室2李四102英语李老师102室3王五101数学王老师101室4赵六103物理陈

springboot家政服务管理平台 LW +PPT+源码+讲解

3系统的可行性研究及需求分析 3.1可行性研究 3.1.1技术可行性分析 经过大学四年的学习,已经掌握了JAVA、Mysql数据库等方面的编程技巧和方法,对于这些技术该有的软硬件配置也是齐全的,能够满足开发的需要。 本家政服务管理平台采用的是Mysql作为数据库,可以绝对地保证用户数据的安全;可以与Mysql数据库进行无缝连接。 所以,家政服务管理平台在技术上是可以实施的。 3.1

Java研学-RBAC权限控制(八)

九 登录登出 1 登录作用   判断员工是否有权限访问,首先得知道现在操作的人是谁,所以必须先实现登录功能 2 登录流程   ① 提供登录页面,可输入用户名与密码信息,并添加执行登录的按钮。(登录页面不能被拦截)   ② 给按钮绑定点击事件(异步操作,POST请求)   ③ 事件中发送登录请求,使用 AJAX 方式提交。(使用 AJAX 原因:用户体验更好,既可保留用户刚输入的用户名和密码

vue3项目将所有访问后端springboot的接口统一管理带跨域

vue3项目将所有访问后端springboot的接口统一管理带跨域 一、前言1.安装Axios2.创建Axios实例3.创建API服务文件4.在组件中使用API服务 二、跨域三、总结 一、前言 在Vue 3项目中,统一管理所有访问后端Spring Boot接口的最佳实践是创建一个专门的API服务层。这可以让你的代码更加模块化、可维护和集中管理。你可以使用Axios库作为HTT

逆向学习汇编篇:内存管理与寻址方式

本节课在线学习视频(网盘地址,保存后即可免费观看): ​​https://pan.quark.cn/s/3ceeb9ae6d98​​ 在汇编语言的世界中,内存管理和寻址方式是构建程序的基础。理解这些概念不仅对于编写高效的汇编代码至关重要,也是进行逆向工程分析的关键技能。本文将深入探讨内存管理的基本原则和多种寻址方式,并通过代码案例来展示它们的实际应用。 1. 内存管理 内存管理涉及如何分配

Git代码管理的常用操作

在VS022中,Git的管理要先建立本地或远程仓库,然后commit到本地,最后push到远程代码库。 或者不建立本地的情况,直接拉取已有的远程代码。 Git是一个分布式版本控制系统,用于跟踪和管理文件的变化。它可以记录文件的修改历史,并且可以轻松地回滚到任何历史版本。 Git的基本概念包括: 仓库(Repository):Git使用仓库来存储文件的版本历史。一个仓库可以包含多个文件

Win10用户必看:最好用最稳定的版本在此,值得一试!

在Win10电脑操作中,用户可以根据的需要,下载安装不同的系统版本。现在,许多用户好奇Win10哪个版本最好用最稳定?接下来小编给大家推荐最好用最稳定的Win10版本,这些系统版本经过优化升级,相信会给大家带来最棒的操作体验感,且下载安装步骤非常简单。   推荐一:Windows10 22H2 X64 官方正式版   点击下载:https://www.xitongzhijia.net/wi

Yarn:引领JavaScript包管理新潮流

在浩瀚的JavaScript世界中,包管理工具如同一位精明的管家,帮助开发者管理着各式各样的代码包。而Yarn,这位新晋管家,以其高效、稳定和安全的特性,正逐渐成为开发者心中的新宠。本文将带您走进Yarn的世界,让您轻松掌握Yarn的强大特性和使用方法。 特性一:快速如闪电         想象一下,你是一位忙碌的图书馆管理员,每天需要整理成千上万的书籍。如果每本书的摆放都

【Qt6.3 基础教程 17】 Qt布局管理详解:创建直观和响应式UI界面

文章目录 前言布局管理的基础为什么需要布局管理器? 盒布局:水平和垂直排列小部件示例:创建水平盒布局 栅格布局:在网格中对齐小部件示例:创建栅格布局 表单布局:为表单创建标签和字段示例:创建表单布局 调整空间和伸缩性示例:增加弹性空间 总结 前言 当您开始使用Qt设计用户界面(UI)时,理解布局管理是至关重要的。布局管理不仅关系到UI的外观,更直接影响用户交互的体验。本篇博