informix 访问mysql_Informix 11.7 使用非系统用户访问数据库
Informix 11.7 使用非系统用户访问数据库
苏翔, 孙国荣, 和 谭永贻
2012 年 11 月 22 日发布
1. 概述
Informix11.7 提供了非操作系统用户访问数据库的机制。在 Informix 之前的版本,所有访问数据库的用户必须是一个拥有相应权限的系统用户。从 11.7 开始,Informix 允许用户通过内部授权服务(比如 Kerberos 或者 Microsoft Active Directory) 来连接 Informix 数据库而无需系统用户。这种方法使系统可以通过映射系统中已存在的除 Informix 和 root 外的其他用户,来访问数据库。这种机制将会减少为了使用数据库而创建的大量系统用户。减少 DBA 的工作量,增加系统的安全系数。
2. Informix 的授权机制
Informix 从 Informix 11.7 版本开始提供除了通过操作系统用户鉴权方式,还提供了非操作系统用户 NON-OS user 鉴权方式。如下介绍这 2 种鉴权方式的机制和差异性。
2.1 Informix 操作系统用户鉴权机制
Informix 传统的操作系统用户认证方式就是使用一个操作系统用户,并通过一个用户 ID 和密码来判定用户的合法性。这是一种最常见也是最简单的认证方式。下面是一个 Informix 授权机制的示意图。
图 1. Informix 传统验证机制示意图
如图 1 所示,传统的认证方式需要访问数据库的用户同时也是一个系统用户,即如要创建一个 Informix 数据库用户,需要先创建一个操作系统用户,然后对该用户进行授权访问数据库。当有需要创建大量的数据库用户时,就造成了会产生大量的系统用户,需要较大的系统管理工作,同时对系统安全存在一些隐患。
2.2 Informix11.7 非系统用户验证机制
Informix 自 11.7 版本开始增加了非系统用户映射系统用户来操作数据库的方法,该方法可以使多个非系统用户映射到一个系统用户。如下所示是 Informix 非系统用户访问数据库示意图:
图 2. Informix 非系统用户验证机制示意图
从上面的图中可以看出,非系统用户通过映射系统用户来完成 Informix 的完全认证,非系统用户将使用被映射的操作系统用户的 UserID 和 GroupID 等信息。Informix 的 onconfig 文件中的 USERMAPPING 参数用于控制映射功能的启用和禁用。默认情况下,只要启用了映射功能,任何非系统用户都可以通过被映射的系统用户来连接数据库。当然,也可以通过命令控制用户是否可以接入。
3. 非系统用户的设置和使用
使用非系统用户访问数据库的设置包括创建系统用户,映射用户,创建及维护数据库服务器用户和用户权限管理四部分。其中创建系统用户和映射用户为准备过程,创建数据库服务器用户和用户权限管理如下图所示为整个过程的示意图:
图 3. Informix 非系统用户访问数据库设置方法示意图
由图 3 所示,创建和使用非系统用户一般按照下面的步骤:1. 创建新系统用户。2. 映射用户。3. 创建数据库用户。4. 权限管理
下面详细介绍非系统用户设置和使用每一步的具体步骤。
3.1 创建系统用户
非系统用户访问数据库必须通过映射到一个系统的数据库用户上才能进行,所以必须首先创建一个系统用户,用于非系统用户的映射。创建系统用户可以使用常用的命令 useradd。在此以创建系统用户 user1 为例。useradd user1
3.2 映射用户(Mapped Users)
数据库系统管理员(DBSA)能够通过设置数据库来允许内部用户连接数据库。外部用户通过 Kerberos,PAM 或者内部授权来连接数据库的可以通过映射到一个操作系统级的配置文件来处理连接请求。Informix 11.7 开始提供了映射用户的机制来允许非系统的用户访问数据库。
3.2.1 编辑 allowed. surrogates 文件
可以通过编辑 /etc/informix/allowed.surrogates 文件来确定使用哪一个系统用户和组来做为非系统用户的映射用户。如下面例子中将使用 user1 用户来作为非系统用户的映射用户。USER:user1
3.2.2 将修改的内容加载到共享内存
allowed. surrogate 文件中提供了用作映射的操作系统用户名,但对该文件修改后,要使修改结果生效则需要运行如下命令:onmode -cache surrogates
该命令会导致数据库服务器重新读取 allowed.surrogate 文件,并将其中的用户名,用户 ID 等信息存储到共享内存的缓存中。如果该过程失败,之前存储在缓存中的用于映射的用户的信息也会被清掉。则将会直接导致映射用户被禁止。
任何对 /etc/informix/allowed.surrogates 文件修改后,必须执行 onmode -cache surrogates 才能生效,否则则会在上述步骤 5 中报如下错误:26729: The user user1
is not in the /etc/informix/allowed.surrogates file or in the cache.
3.2.3 设置 USERMAPPING 参数
Informix 的 onconfig 文件中的 USERMAPPING 参数可以控制允许或禁止非系统用户访问数据库该参数可以设置为 OFF, BASIC 和 ADMIN 三种状态,其含义和区别见下表:可设置的参数含义OFF只允许操作系统的用户访问数据库,不允许非系统用户访问数据库。
BASIC允许非系统用户访问数据库,但不允许执行对数据库系统的授权用户操作,如 DBSA, DBSSO, AAO 等。即使被映射的用户具有上述权限。
ADMIN允许非系统用户访问数据库。且如果被映射的用户为授权用户,则非系统用户也被允许执行授权用户操作。
可以通过修改 Informix 的 onconfig 文件或者使用 onmode 命令来动态更改该参数的值。下面的代码可以动态的修改 USERMAPPING 参数的值,所有会话都将被影响。onmode – wf USERMAPPING= ’ BASIC'
也可使用下面的代码,此时则只有执行该代码的会话会受到影响。onmode – wm USERMAPPING= ’ BASIC ’
3.3 创建及维护数据库服务器用户
拥有数据库系统管理员权限的用户,在 USERMAPPING 参数设置为 BASIC 或者 ADMIN 时,可以创建与操作系统无关的数据库用户。可以使用如下所示的命令来创建用户:CREATE USER username WITH PASSWORD password
如果要创建一个非系统的 Informix 用户,则必须有一个系统的 Informix 用户,使非系统用户可以映射到该用户。以创建非系统用户 sue 为例,可使用如下所示命令:Create user user1 with password ‘ informix ’ ;
-- 创建一个系统的 Informix 用户
Create user sue with password 'informix' PROPERTIES user "user1";
-- 创建非系统的 Informix 用户,映射到 user1
可以使用创建一个默认用户的方法使以后创建的非系统的 Informix 用户都映射到默认用户,默认用户须是系统用户。如下面代码所示:CREATE DEFAULT USER WITH PROPERTIES USER 'user1'; -- 创建默认用户
Create user sue with password 'informix'
-- 创建非系统的 Informix 用户,该用户映射到默认用户 user1 上
另外,Informix 提供了封锁账户的机制来锁住某个账户,被锁住的账户将无法连接数据库,使用 ACCOUNT LOCK 选项来创建一个被锁住的账户,如下面代码所示:CREATE USER sue WITH PASSWORD "informix" ACCOUNT LOCK;
-- 创建一个被锁住的账户,该账户以默认账户作为映射
此时,如使用新创建被锁定用户 sue 来连接数据库,则会报如下所示的错误:-26702
User sue cannot connect to the database server because the user account is locked.
要解锁一个被锁住的账户,则可以用如下所示的代码:Alter user sue account unlock
解锁以后,该账户便可以正常使用了。
同样,DBSA 可以通过使用 Alter, drop, Rename 等命令来管理数据库用户,如下所示为将 DBSA 权限赋给用户 user1:ALTER USER user1 ADD AUTHORIZATION (dbsa);
需要注意的是,以上命令都是具有 DBSA 权限的用户才可以进行的操作。其他用户如要完成类似修改密码的操作则需使用类似如下所示的命令:SET USER PASSWORD old 'informix1' new 'informix'
另外,在创建用户和管理用户的时候,有如下注意事项:
1. 若已有默认用户(default user),则重新创建新的默认用户前需先删除掉之前的默认用户。
2. 创建非系统账户时可以不使用默认用户来创建,也可使用 informix 用户创建。
非系统用户通过映射成系统用户来登陆数据库服务器,它利用了系统用户的用户 ID,组 ID 等信息。创建了非系统用户后,需要允许非系统用户接入(access)才能连接数据库。默认情况下,只要将 USERMAPPING 的值设置为 BASIC 或者 ADMIN,则已经允许所有用户(PUBLIC)接入。我们可以使用如下命令允许和禁止某非系统用户接入数据库。GRANT ACCESS TO sue PROPERTIES USER user1
Revoke ACCESS from sue;
该命令可以允许非系统用户映射到指定系统用户。但应注意不能映射成 informix 或者 root 用户。如上述设置步骤 5 中如果将 sue 用户映射到 informix 或 root 用户则会报错如下:26108: You cannot grant root or informix user privilege to the user.
3.4 用户权限管理
对非系统用户的权限管理与系统用户的相同,Informix 的权限管理从级别上来包括数据库级和表级两个级别的系统管理,现在分别介绍这两种不同级别的权限管理。
3.4.1 数据库权限管理
Informix 的系统权限包括连接(connect)、资源(resource)和数据库管理员(DBA)三个权限,通过映射接入的非系统用户对任何数据库都没有任何权限,此时 DBA 可以通过使用 grant 命令有选择的将不同数据库的不同权限赋给非系统用户。如下所示将 testdb 数据库的连接权限赋给非系统用户 sue1。Dbaccess testdb
grant connect to sue1
此时,非系统用户 sue1 就具有了连接数据库 testdb 的权限。当然也可以将资源或 DBA 的权限赋予 sue1。如下面代码所示。grant resource to sue1
grant dba to sue1
同样也可以使用 revoke 命令将赋予非系统用户的权限收回。如下面代码所示:Revoke connect from sue1
在这里需要强调的是,非系统用户通过映射系统用户的组 ID、用户 ID 等信息接入数据库,但它并不具有系统用户所具有的数据库操作权限。假如系统用户对数据库具有 DBA 的权限,但通过映射接入数据库的非系统用户则并不具有任何对相应数据库的权限。反之亦然。
3.4.2 数据库表权限管理
数据库表的权限是用户连接到某个数据库后对该数据库中相应表权限的管理,数据库表的权限包括插入、删除、查询等权限,下面的表中给出了表的不同权限及该权限的作用。权限作用插入(insert)允许插入数据
删除(delete)允许删除数据
查询(select)允许通过 select 语句访问相应列
更新(update)允许通过 update 语句访问相应列
索引(index)允许创建永久索引。但要使用索引则用户必须有 resource 权限。
更改(alter)允许对表的结构进行修改,包括添加列、删除列等,但必须拥有 resource 权限。
4. 相关系统表
在系统中,与非系统用户访问相关的数据库是 SYSUSER。该数据库中包含与非系统用户映射相关的所有信息。其中,起主要作用的表是 sysintauthusers 和 sysusermap。下面分别介绍这两个表的表结构及主要作用。
4.1 Sysusermap 表
该表包含 username 和 surrogate_id 两列。其中,username 列用于存储映射用户的名字。Surrogate_id 为映射用户的 ID 号,该号码是独一无二的。其表结构如下所示:ColumnTypeDescriptionusernamechar(32)PUBLIC 或者是映射用户的名字
surrogate_idINT映射用户的 ID 号,该号码在运行 grant access to 命令后产生
4.2 Sysintauthusers 表
在一个非 Informix 的用户连接数据库前,数据库服务器必须要验证该用户在 sysintauthusers 表中的信用信息。包括系统的和非系统的用户信息都会存储在内。如下所示是该表的表结构:ColumnTypeDescriptionusernameNCHAR(32)用户名
saltBIGINT一个 64 位的 salt。在数据库服务器加密密码前,将密码转换为一个其他值
Hashed_passwordVARCHAR(128)一个 sha-256 哈希算法和 base-64 加密的密码。
Hash_typeCHAR(16)哈希算法类型,目前使用的是 SHA-256
updatedDATETIME YEAR TO SECONDN/A
flagsINTEGER用于存储账户信息(比如 account lock)的标志位
min_changeINTERVAL DAY(7) TO SECONDN/A
max_changeINTERVAL DAY(7) TO SECONDN/A
inactiveINTERVAL DAY(7) TO SECONDN/A
ac_expireDATETIME YEAR TO SECONDN/A
5. 非系统用户创建和使用示例
可以按照下面的步骤创建一个非系统用户并使用该用户访问数据库。
1. 新创建一个系统用户,如 user1useradd user1
2. 以 root 用户修改文件 /etc/informix/allowed.surrogates。并在文件末尾加入 USER :user1。
3. 运行下面的命令使修改的内容生效。onmode -cache surrogates
4. 修改 Informix ONCONFIG 文件,将其中的 USERMAPPING 参数修改为 BASIC 或者 ADMIN,可通过直接修改 onconfig 文件中该参数的值再重启或使用命令onmode -wf USERMAPPING='ADMIN' or ’ BASIC ’。
5. 创建默认账户:以 informix 用户连接数据库后,将 user1 创建为默认账户dbaccess sysuser
CREATE DEFAULT USER WITH PROPERTIES USER 'user1';
到此为止,准备设置已经完成,以下步骤开始创建非系统用户。
6. 创建非系统账户:以 informix 用户登录并创建 4 个非系统账户:
sue1,sue2,sue3 和 sue4。dbaccess sysuser
CREATE USER sue1 WITH PASSWORD "p_sue1";
CREATE USER sue2 WITH PASSWORD "p_sue2";
CREATE USER sue3 WITH PASSWORD "p_sue3";
CREATE USER sue4 WITH PASSWORD "p_sue4";
7. 为新建用户赋权 :dbaccess testdb
grant connect to sue1;
grant connect to sue2
grant connect to sue3
grant connect to sue4
之后,四个非系统用户 sue1 到 sue4 就都可以对 testdb 数据库进行访问了。
6. 结束语
Informix 从 11.7 版本开始增加的非系统用户访问数据库的机制,解决了之前 Informix 用户必须是操作系统账户的问题。此机制减少了操作系统的维护工作,降低了系统的风险,提高了系统的灵活性。方便了数据库管理员对数据库的管理工作。对于需要多个用户访问及使用的场景,该机制极大降低了管理和维护的复杂度,提高了效率。
相关主题IBM Informix 11.70 信息中心:深入了解 Informix 的最新版本和技术细节。
在 developerWorks 中国网站 Information Management 专区,获取提高您 IBM Information Management 产品技能所需的资源。
随时关注 developerWorks 技术活动 和 网络广播,包括各种 IBM 产品和 IT 行业主题。
以最适合您的方式 IBM 产品评估试用版软件:下载产品试用版、在线试用产品、在云环境中使用产品,或者在 IBM SOA 人员沙箱 中花几小时。
informix 访问mysql_Informix 11.7 使用非系统用户访问数据库相关推荐
- win10系统用户访问ftp服务器被拒绝,关于windows2003下ftp用户名无法访问FTP服务器的问题...
关于windows 2003下建设FTP的步骤我不再详解,主要说两个我们经常出错的两个小问题,这两个小问题往往我们很容易忽视,使我们无法访问自己建立的FTP服务器. 问题1: 当我们建立一个FTP服务 ...
- linux libusb应用实例,在Linux中使用libusb-1.0作为非root用户访问USB设备
我试图在RHEL5上作为非root用户与USB设备连接.该设备是一个GPIO接口(其文档可在 http://www.xdimax.com/sub20/sub20.html找到),它使用libusb-1 ...
- 远程关闭计算机提示拒绝访问权限,shutdown远程关机win10系统拒绝访问最佳解决方法...
win10系统功能强大,能够实现很多让用户看起来很不可思议的操作,其中就包括通过shutdown命令进行win10系统的远程使用,但是近日有用户想要通过shutdown进行远程关机win10系统时却被 ...
- w10系统无法访问xp计算机名,解决winxp系统无法访问win10系统共享资源的方法
如今我们的电脑win7和win10可以正常互访共享资源,win10也可以直接访问winxp共享的资源,但是winxp系统却无法直接进访问win10系统共享的资源下面是学习啦小编为大家整理的关于解决wi ...
- xp访问不了win10计算机,xp系统无法访问win10共享文件怎么办?xp系统和win10局域网共享设置教程...
xp系统无法访问win10共享怎么办?在一个局域网中有着各种各样操作系统的计算机,当我们在局域网中将win10系统中的一些文件夹进行共享,使用xp系统进行访问的时候遇到了无法访问的现象,该怎么办呢?如 ...
- linux普通用户libusb访问usb,linux – 使用libusb-1.0作为非root用户访问USB设备
我试图在RHEL5上作为非root用户与USB设备连接.该设备是一个GPIO接口(其文档可在 http://www.xdimax.com/sub20/sub20.html找到),它使用libusb-1 ...
- linux ssh禁止用户访问任何目录,怎么限制远程ssh用户访问特定的文件
比如我要实现以下目标,通过配置linux限制SSH用户指定目录 user 1 只可以访问 /Media, /Documents以及它的家目录 User 2 只可以访问/Folder21, 以及它的家目 ...
- 禁止访问 共享计算机,win7如何禁止局域网用户访问电脑
为了方便共享资源,很多人都会设置网络共享文件夹,但是有些用户觉得在局域网内共享资源是件不安全的事情,那么win7如何禁止局域网用户访问电脑?这里小编就给大家分享一下win7旗舰版32位系统设置用户禁止 ...
- 访问不同服务器文件共享,windows共享不同用户访问不同文件夹不同权限
需求:为方便教学管理,3名老师,张老师.李老师.陈老师通过教学机访问服务器对应文件夹下的课件资源,而3名老师各自间无法访问对方的课件资源,另有一台管理员机,可以访问3位老师所有的课件资源. 服务器:w ...
- oracle 登录非系统用户,非Oracle用户使用操作系统验证登陆(/ as sysdba)
之前写过一篇blog<新用户使用sqlplus / as sysdba登录报错>http://blog.csdn.net/bisal/article/details/9285087 今天碰 ...
最新文章
- C语言 游戏远程call调用,C++远程调用类操作支持CallbackInterface(1)
- 介绍一个JSONP 跨域访问代理API-yahooapis
- 【机器学习算法-python实现】采样算法的简单实现
- [云炬商业计划书阅读分享]
- STM32技术文档里面的I / O Level FT具体含义
- PhotoZoom专业版-图像无损放大工具
- Makefile 中的规则
- Jmeter的Throughput有误差与分布式测试时的坑
- 角色 RESOURCE、CONNECT、DBA具有的权限
- linux下epoll网络编程模型,C++ - 网络编程模型 - Linux EPOLL
- paip.程序设计--扫号器跑号器结果分类设计
- 一个很好的网址,Visio 使用教程
- C++ 原子操作与无锁编程
- 东芝打印机共享怎么设置_东芝2051C打印机怎么连接并扫描文件到电脑?
- deepfacelab SAE 模型训练参数详解
- SpingCloud获取当前服务ip地址
- Export file created by EXPORT:V10.01.00 via conventional path
- 电源选项这样设置最好-睡眠模式和休眠模式的区别
- 使用Selenium IDE进行自动化测试
- 推荐几个比较骚的技术公众号【文末福利】