今天看到一个名词,数据库实例用户和实例隔离用户,那么什么是实例隔离用户呢,于是搜索以下,就涉及到了进程。
援引DB2中国上面的回答:
要理解DB2的fenced user, 需要先理解db2的fenced process.
DB2在V95之后从多进程模式改为多线程模式,也就是说绝大部分数据库核心程序都运行在db2sysc这个进程中。这种单进程多线程的架构改善了性能,但是同时增加了运行“不安全代码”带来的风险。因为大家都运行在一个进程里,任何一段不安全的代码出现问题会导致整个DB2引擎崩溃。
因此DB2增加了额外的进程专门来执行这些风险比较高的代码,ps -ef可以看到db2fmp这个进程。那些风险比较高的代码会被运行在db2fmp进程里,db2sysc会和这个进程通信。这样当这些不安全的代码出现问题是只会导致db2fmp崩溃,而db2核心进程不受影响。
fenced user就是db2fmp进程运行时的用户,因为某些用户可能不希望这些代码在具有相对较高权限的用户下运行,所以会指定一个不同于实例用户的fenced user。
这些不安全的代码主要是第三方的代码,比如说用户自己用c实现的store procedure和UDF. 或一些第三方的库文件,比如说federation server的wrapper去访问Oracle数据库时需要用到的Oracle的OCI库。
在fenced进程中运行不安全的代码通过隔离增加了db2核心进程的安全性,但同时也增加了因为进程间通信带来的额外性能开销。在某些情况下DB2允许用户自己决定是把“不安全的代码”运行在fenced process还是db2核心进程里,比如说在create wrapper的时候有一个Fenced的选项,用户可以指定yes或no。(2011-09-21)
在本地虚拟机上用 ps -ef | grep db2
查看进程,结果