根据《循序渐进DB2》(牛新庄)第13章内容整理
DB2中有3种主要的安全机制,可以帮助DBA实现数据库安全计划:
- 身份认证(authentication)
- 权限(authorization)
- 特权(privilege)
提出问题
就目前接触过的数据库来说,大多是在数据库中添加用户,比方Oracle的tiger账户,MySQL的user表,SQL Server我记得也是数据库添加账户的,那Postgresql是在pg_hba.conf中设置访问权限,在数据库中Create user的,但是DB2有很大的不同哦。
然后就是哪个用户可以访问哪些表,grant这些操作在DB2中又是如何定义的呢?用户、用户权限如何查看呢?
远程登录怎么设置?怎么登录?
带着这些问题来往下看:
身份认证(authentication)
身份认证是用户在尝试访问DB2实例或数据库时遇到的第一道安全闸门。身份认证就是使用安全机制验证所提供用户ID和口令的过程。用户和密码身份认证由DB2外部的设施管理,比如操作系统、域控制器或者Kerberos安全系统。这和其他数据库管理系统是不同的,如Oracle、Infomix、Sybase和SQL Server,后者既可以在数据库本身定义和验证用户账户,也可以在操作系统中完成(安装podtgresql是创建的postgres用户既是操作系统账户也是数据库账户)。外部安全性服务对希望访问DB2服务器的用户进行身份认证,DB2外部的安全性软件负责处理身份认证。当成功校验了用户ID和口令后,内部DB2进程将接管控制,并确保用户有权执行所请求的操作。
DB2是没有用户的,DB2所有的用户都是操作系统用户,这是由于历史原因造成的。
一旦用户ID和口令作为实例附件或数据库 连接请求的一部分明确的提供给DB2,DB2就会尝试使用该外部安全设施验证用户ID和口令。
实际的认证位置由DB2实例参数AUTHENTICATION的值决定。有不同的身份认证方案,包括:
- 让用户早DB2服务器上认证(使用服务器的安全设施)
- 在客户机上认证(允许“单点登录”访问)
- 使用Kerbose安全设施认证
- 使用用户定义的通用安全服务(Generic Security Service,GSS)插件认证
其他的身份认证选项还包括:当用户名和口令以及数据在客户机和服务器之间的网络上传递时进行加密。为AUTHENTICATION参数选择的值依赖于具体环境和本地安全策略。
[db2inst1@db22 ~]$ db2 get dbm cfg | grep -i auth
GSS Plugin for Local Authorization (LOCAL_GSSPLUGIN) =
Server Connection Authentication (SRVCON_AUTH) = NOT_SPECIFIED
Database manager authentication (AUTHENTICATION) = SERVER --使用服务器的安全设施
Alternate authentication (ALTERNATE_AUTH_ENC) = NOT_SPECIFIED
Cataloging allowed without authority (CATALOG_NOAUTH) = NO
Trusted client authentication (TRUST_CLNTAUTH) = CLIENT
Bypass federated authentication (FED_NOAUTH) = NO
权限(authorization)
权限涉及将DB2角色赋予用户和/或组。每一种角色具有一定级别的权限,对特定数据库和和/或其中的对象执行某些命令。DB2中包括以下7种不同角色或权限:
- SYSADM
- SYSCTRL
- SYSMAINT
- SYSMON
- DBADM
- SECADM
- LOAD
width: 100px;
}
权限级别 | 说明和用途 |
---|---|
SYSADM | DB2 UDB 中最高的管理权限级别,具有SYSADM权限的用户可以运行实例程序,发出数据库和数据库管理器命令,以及访问这个数据库管理器实例中任何数据库中任何数据表中的数据。 提供控制这个数据库实例中所有数据库对象的能力,包括数据库、表、视图、索引、包、模式、服务器、别名、数据类型、函数、过程、触发器、表空间、数据库分区组、缓冲池和事件监视器 该权限需要对使用程序和数据的完全访问权的DB2 UDB管理员使用 我们安装实例时使用的账户db2inst1是系统管理员,拥有最高管理权限级别SYSADM |
SYSCTRL | 最高的系统控制权限级别。提供对数据库管理器实例机器数据库执行维护和管理操作的能力 不允许直接访问数据库中的数据。具有连接数据库的隐式特权,并可以执行具有SYSMAINT和SYSMON权限的用户能够执行的功能。该权限供管理一个包含敏感数据的数据库管理器实例的用户使用 |
SYSMAINT | 次高的系统控制权限级别。提供对数据库管理器实例机器数据库执行维护和管理操作的能力 不允许直接访问数据库中的数据。具有连接数据库的隐式特权,并可以执行具SYSMON权限的用户能够执行的功能。该权限供维护一个包含敏感数据的数据库管理器实例的用户使用 |
SYSMON 系统监视 |
提供获得数据库管理器实例及其数据库的快照的能力。如果一个数据库管理器实例中的数据库包含敏感数据,而管理用户只需要通过快照监控数据来进行问题判断,这时候就可以给用户授予SYSMON权限。该权限不允许改变系统资源的使用 |
DBADM | 对于一个实例中的一个特定数据库的次高管理权限级别。允许 用户允许某些实用程序,发出数据库命令以及访问数据库中的任何表中的数据。该权限供需要完全访问数据库对象和数据,但是不需要完整的维护权限的管理员使用 |
LOAD | 允许用户调用LOAD实用程序。根据LOAD操作的模式,用户还需要LOAD操作目标上的insert和update特权。该权限供只想批量装载一组新数据的用户使用 |
特权(privilege)
就是具体表上的insert、update以及create db的权限了
安全层次
当一个用户在客户端发出一条“select * from tb1”SQL语句时,首先要连接数据库,在连接数据库时需要提供用户名和密码。用户名和密码是在数据库之外认证的,这需要用到操作系统或外部安全插件。例如在AIX上是使用/etc/password 验证用户名,使用/etc/security/passwd 来验证密码。这是操作系统层次。
操作系统之下是实例级别的权限,实例之下是数据库级别的权限,用户要访问表tb1,也必须在tb1上有特定的select特权。这个就是整个DB2的安全机制实现方式。