分享
 
 
 

讲解Informix安全特性保护数据的具体措施

王朝other·作者佚名  2008-07-26
窄屏简体版  字體: |||超大  

前言

保护数据需要权衡考虑安全性和访问能力。如何找到最合适的方法呢?

目前,公司和政府为数据的可审计性和控制制定了严格的标准,这使数据库安全性成为近来的热点。DBA 必须保证用户能够访问完成工作所需的数据,同时避免数据风险。

绝对保护数据的惟一方法是把服务器关闭,锁起来,不让人使用。但是,为了让数据库发挥作用,就必须允许访问数据。IDS 在数据库、表和列级都应用了安全措施。安全措施还可以应用于视图中的记录级。所有安全措施都基于用来连接数据库的用户名。

我将解释 Informix 安全特性如何帮助您保护数据,同时允许适当的用户访问数据。

安全建议

每个环境和数据库开发的每个阶段有不同的数据库安全性需求。开发环境必须让程序员能够快速创建和修改数据库对象。测试和生产环境需要稳定性,需要控制可以对数据库对象执行哪些操作。有效的数据库安全模型的一个关键部分是,定义和分配 DBA、数据库安全官(DSO)和对象所有者角色。

对于 DBA 角色,应该创建一个抽象的用户登录。DBA 本质上是数据库超级用户。建立一个单独的登录会减少用户意外删除数据库的风险。这条原则在生产环境中尤其重要。DBA 登录名应该是数据库和数据库中所有表的创建者。DBA 应该是对数据库中任何表有修改特权的惟一用户。作为数据库和数据库中所有表的创建者,DBA 可以把特权授予其他用户。

一些生产环境可能需要一个 DSO,这是 DBA 之外的一个单独职位,他负责数据安全。DSO 也应该是一个单独的抽象用户登录。为了能够有权在数据库中添加新用户,DSO 需要 DBA 数据库特权。DSO 还需要数据库中每个表的授予特权,以便把特权授予其他用户。

为了建立具有 DSO 特权的角色,必须给 DSO 分配用户对于数据库中每个表可能需要的所有特权。下面是使用带 grant option 的 grant 命令的 SQL 语法:

GRANT SELECT, INSERT, UPDATE, DELETE, INDEX ON table_name TO dso_login_name

WITH GRANT OPTION;

Public特权

Informix 使用关键字 public 表示应用于所有用户的特权。public 关键字是一个非常强大的工具,可以开放对数据的访问。同样,为了防止未经过授权的所有用户连接数据库和选择数据,可以完全撤消 public 特权。

对象所有者特权

创建数据库或数据库对象(表、索引、函数、过程等等)的用户就是这个对象的所有者,他控制这个对象的访问和特权。对象的所有者拥有所有表级特权,而且这些特权不能撤消。当系统从开发环境转移到生产环境时,或者表或数据库原来的所有者离开组织时,这个限制可能会造成问题。任何其他用户(即使是 DBA)都无法撤消所有者的特权。因此,必须谨慎地决定数据库或表的所有者。

表的所有者是可以向其他用户授予这个表的特权的惟一用户。一些应用程序也使用 owner.tablename 语法来访问表。在我的一个客户的数据库中,表在开发、接收测试和生产阶段有不同的所有者。一个表只能有一个所有者。当把应用程序代码从开发环境转移到测试环境,然后再转移到生产环境中时,必须改变表的所有者,这可能会造成问题。在不同的环境中,必须修改应用程序代码中的 owner.tablename,这会增加风险。

数据库特权

有三个数据库特权级别:DBA、Resource 和 Connect。Connect 特权允许用户访问数据库以及添加、修改和删除数据。Resource 特权授予用户所有 Connect 特权,还授予创建新的表、索引和过程的特权。DBA 特权包括 Connect 和 Resource 特权,还授予用户把 Resource、Connect 或 DBA 特权授予其他用户的权力。具有 DBA 特权的用户还可以删除数据库中的所有对象或完全删除数据库。

对于大多数数据库活动,Connect 特权就足够了。要创建新对象的程序员或开发人员可能需要 Resource 特权。DBA 特权就像是 Unix 操作系统的 “超级用户”。授予或撤消数据库特权的语法是:

grant [ dba | resource | connect ] to [ public | USERS ];

revoke [ dba | resource | connect ] from [ public | USERS ];

数据库特权存储在系统表 sysusers 中。可以用 select * from sysusers; 列出所有用户及其数据库特权,显示的信息包括:

◆username,连接数据库的用户的登录名

◆usertype,数据库特权类型;D 表示 DBA,R 表示 Resource,C 表示 Connect

◆priority,这一列没有正式使用,但它是系统表的一部分(通常,对于所有用户,这一列是 5;对于数据库所有者,是 9)

◆password,这一列没有使用,但它是系统表的一部分

数据库特权

应该避免把 DBA 特权授予 public。我见过一些第三方应用程序把 DBA 特权授予 public,仅仅是因为这样做非常省事。如果把 DBA 特权授予 public,那么任何用户都能够删除数据库、撤消所有其他用户的所有特权和创建新的数据库用户。如果把 Resource 特权授予 public,那么就允许任何用户在数据库中创建对象(表或视图)。

撤消用户的 DBA 或 Resource 特权会使特权转换为 Connect。如果希望从数据库中完全删除一个用户,还需要撤消 Connect 特权。

在授予数据库特权时,采用以下原则可以减少很多麻烦:

◆DBA 特权应该只授予一两个登录名,这些登录名不供常规用户使用。这些登录名应该只用于数据库管理(DBA 和 DSO)。

◆Resource 特权应该只授予开发环境中的程序员,以及必须通过运行过程创建索引的用户。

◆Connect 特权应该只授予需要访问数据库的用户。

表特权

有七种表特权:

◆Select(查看表中的数据)

◆Insert(在表中添加新的数据行)

◆Update(修改现有行)

◆Delete(删除数据行)

◆Index(在表中添加索引)

◆Alter(修改表结构)

◆Reference(在引用约束中引用列)

用户必须具有 Resource 数据库特权和相关的表特权,才能创建索引、修改表结构或引用持久表。

创建表的用户是所有者,他拥有所有表特权,这些特权无法撤消。with grant option 允许用户把特权授予其他用户;应该谨慎地使用这个选项,因为它把控制表特权的过程委托给了其他用户。使用 as GRANTOR 选项以另一个用户的身份授予特权。只有 DBA 或具有授予权限的用户可以使用这个选项。只有授予一个特权的用户能够撤消这个特权。

授予和撤消表特权的语法如下:

grant [ all | [ select | insert | update | delete | index | alter | reference ]

on [ TABLE | VIEW | SYNONYM ] to [ public | USERS ]

[ with grant option ][ as GRANTOR ];

revoke [ all | [ select | insert | update | delete | index | alter| reference ]

on [ TABLE | VIEW | SYNONYM ] from [ public | USERS ];

表特权存储在系统表systabauth中,这个表包含四列:

◆grantor,授予这个特权的用户

◆grantee,获得这个特权的用户

◆tabid,这个表在系统表中的编号

◆tabauth,表特权

使用下面的 SQL 语句列出表和具有表特权的用户:

select systables.tabname, systabauth.*from systables, systabauth

where systables.tabid = systabauth.tabid and systables.tabid > 99 order by tabname;

这个语句联结 systabauth 和 systables,从 systables 中获取表名并显示用户。tabauth 列包含特权,需要根据这个列中的位置进行解码(见图 1)。

图 1. tabauth 列包含的特权

tabauth 中的字符表示对于一个表有哪些表级特权。表 1 给出列中的位置与其表示的表和列级特权之间的对应关系。

表1. 表和列级特权之间的对应关系

大写字母表示用户可以把这个特权授予其他用户;- 表示用户不拥有这个特权。所以在图 1 中,Sarah 只有 customer 表的 select 特权,而 Robert 有 select、insert、update 和 delete 特权;没有列级特权。

与数据库特权一样,应该谨慎地使用 public。可以撤消一个用户的所有表特权,但是这个用户仍然拥有分配给 public 的特权。在默认情况下,每个表在创建时都有 public 特权,所以需要检查 public 特权,考虑是否需要修改默认的 public 特权。

在数据仓库系统中,用户只需要 select 特权。在 OLTP 数据库中,应该根据需求把特权限制在 select、update、insert 和 delete。

列特权

两个列级特权是 select 和 update。具有列级特权的用户不应该拥有表级的 select 或 update 特权。用户的表级 select 或 update 特权将覆盖列级特权。列级特权存储在 syscolauth 表中,它们限制用户是否可以查看或修改表中记录的指定列。

授予列级特权的语法如下:

grant [ select (COLUMN) | update (COLUMN) | reference ( COLUMN ) ]

on [ TABLE | VIEW | SYNONYM ] to [ public | USERS ][ with grant option ][ as GRANTOR ] ;

除非在表级撤消 select 和 update 特权,否则列级特权不起作用。当存在列级特权时,systabauth 表的 tabauth 列的第三个位置上会显示一个星号(见表 1)。

列级特权在控制对机密信息(比如工资或 SSN)的访问方面非常有用。

权衡考虑控制和访问

安全性是 DBA 的一项重要责任。既要保护组织的数据,又要满足适当的使用需求,这是个难题。关键是分配适当的特权级别。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有