前言
保护数据需要权衡考虑安全性和访问能力。如何找到最合适的方法呢?
目前,公司和政府为数据的可审计性和控制制定了严格的标准,这使数据库安全性成为近来的热点。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,这会增加风险。

