`
changhui_liang
  • 浏览: 16318 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论
阅读更多
有关数据库的权限
  存储在数据库中的数据对于一个商务活动来说是非常重要的。不仅要通过备份和制作日志来保证数据的不丢失,还要通过设置不同的访问权限来防止来自用户的善意的或恶意的破坏。一个公司不可能总是使用一个完全独立的数据库系统来保存雇员的工资信息。工资信息可能是与是保存在通常的数据库中,这样你就不需要两台机器和两个数据库服务软件包。即使你在一台服务中使用了两个完全独立的数据库,针对每个用户确定其访问数据库、数据表以及数据字段的权限还是很必要的。
  
  而目前众多的数据库管理系统总是更习惯于将用户权限的管理完全交给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权
分享到:
评论

相关推荐

    Linux下informix安装Linux下informix安装

    Linux 下 Informix 安装 Linux 下 Informix 安装是一个复杂的过程,需要按照一定的步骤进行。以下是 Informix 11.5 for Linux as4 u2 的安装过程: 一、软件包下载 首先需要在 IBM 官方网站上注册并下载安装包 iif...

    informix学习使用手册

    《Informix学习使用手册》是一本专为Informix学习者设计的全面教程,它涵盖了从基础概念到高级特性的各种主题,旨在帮助初学者、使用者和开发者深入理解并熟练运用Informix数据库系统。这本书详细解释了Informix的...

    informix jdbc jar包

    标题 "informix jdbc jar包" 指的是用于Java应用程序连接Informix数据库的JDBC驱动程序集合。在Java开发中,JDBC(Java Database Connectivity)是标准接口,允许Java程序与各种类型的数据库进行交互。Informix JDBC...

    linux下informix自启动设置

    在Linux操作系统中,Informix数据库管理系统是广泛应用的关系型数据库系统,尤其在企业级环境中,确保其在系统启动时自动运行是非常关键的。本教程将详细解释如何在Linux下配置Informix自启动设置,以实现数据库服务...

    informix for windows数据库安装配置

    Informix for Windows 数据库安装配置详解 Informix 是 IBM 公司开发的一款关系数据库管理系统,提供了强大且灵活的数据存储和管理功能。在本文中,我们将详细介绍 Informix for Windows 数据库的安装配置过程,...

    informix jdbc 驱动包

    Informix JDBC驱动包是连接Java应用程序与Informix数据库的关键组件,它遵循Java Database Connectivity (JDBC) API标准,使得Java开发者能够通过编写Java代码来访问和操作Informix数据库。本篇将详细介绍Informix ...

    informix 12.1官方指南(中文)

    《Informix 12.1官方指南》是Informix数据库管理系统的一个重要参考资料,它为用户提供了详尽的、深入的了解和操作Informix 12.1版本的途径。Informix是一款高性能、可扩展的数据库解决方案,广泛应用于企业级数据...

    Informix11.5认证教程

    《Informix 11.5 认证教程》是一份全面深入的学习资料,旨在帮助用户掌握 Informix 数据库系统的安装、调试与管理等关键技能,从而顺利通过 Informix 11.5 的专业认证考试。Informix 是 IBM 公司推出的一款高性能、...

    informix数据库连接驱动jar包

    Informix数据库连接驱动jar包是Java应用程序与Informix关系型数据库管理系统进行交互的重要组件。这些jar文件包含了必要的类和资源,使得Java程序能够利用JDBC(Java Database Connectivity)API来执行SQL语句、管理...

    Informix 11.70 数据库的名称和端口

    Informix 11.70 数据库的名称和端口 Informix 11.70 数据库的名称和端口是 Windows 系统下 Informix 数据库的重要组件。在本文中,我们将详细介绍如何获取 Informix 11.70 数据库的名称和端口,并且使用第三方工具...

    安装INFORMIX客户端软件以及使用

    INFORMIX 客户端软件安装和使用指南 INFORMIX 客户端软件是 IBM 公司开发的一款数据库管理系统客户端软件,能够帮助用户远程连接和管理 INFORMIX 数据库。下面是安装 INFORMIX 客户端软件的详细步骤和使用方法。 ...

    informix 在linux 下的命令

    在IT领域,数据库管理系统是核心组件之一,Informix便是其中之一,尤其在企业级应用中有着广泛的应用。在Linux操作系统环境下,熟悉Informix相关的命令对于数据库管理员和开发人员来说至关重要。本篇文章将基于提供...

    informix远程连接(客户端配置).

    Informix 远程连接客户端配置 Informix 远程连接客户端配置是指在客户端计算机上配置 Informix 客户端,以便连接到远程 Informix 服务器。在本文中,我们将介绍 Informix 远程连接客户端配置的详细步骤。 一、查看...

    informix-jdbc各版本驱动包合集.zip

    《Informix JDBC驱动详解及其版本对比》 Informix是一款高效且功能强大的关系型数据库管理系统,广泛应用于企业级数据存储和管理。与Java编程语言的交互是通过Java Database Connectivity(JDBC)驱动程序实现的。...

    Informix Client SDK 4.10 For Windows

    《Informix Client SDK 4.10 for Windows:构建高效数据库解决方案》 Informix Client SDK 4.10是IBM Informix数据库系统的一个关键组件,专为Windows 32位平台设计,它提供了全面的开发工具和接口,使得开发者能够...

    Informix数据库驱动(亲测)

    标题中的“Informix数据库驱动(亲测)”指的是用于连接Informix数据库的Java驱动程序,它允许Java应用程序通过JDBC(Java Database Connectivity)接口与Informix数据库进行交互。这个驱动已经由发布者亲自测试并确认...

    informix-4gl经典教程

    《Informix-4GL经典教程》是一本专为学习Informix-4GL编程语言而编写的详尽指南。Informix-4GL,全称为“Informix第四代语言”,是一种高级编程语言,主要用于开发数据库应用程序。这门语言以其简洁、高效和数据库...

    informix JDBC驱动jar

    Informix JDBC驱动jar是连接Java应用程序到Informix数据库的关键组件。Informix是一个高效能的关系型数据库管理系统(RDBMS),广泛应用于企业级的数据存储和管理。JDBC(Java Database Connectivity)是Java平台上...

    informix下建立只读用户

    Informix 下建立只读用户的实现方法 Informix 是一个强大且功能丰富的关系数据库管理系统,它提供了许多有用的功能和工具来帮助开发者和管理员更好地管理数据库。其中,建立只读用户是 Informix 中一个非常重要的...

    informix的jdbc驱动.zip

    标题 "informix的jdbc驱动.zip" 提供的信息表明,这个压缩包包含的是Informix数据库的Java Database Connectivity (JDBC) 驱动程序。JDBC是Java编程语言中用于与各种数据库进行交互的一种标准接口,它允许Java应用...

Global site tag (gtag.js) - Google Analytics