DB2(LUW)等效于Oracle“drop user cascade”

此问题与为在LUW上运行数据库的应用程序创建和初始化测试和开发数据库有关(linux-unix-windows)

在oracle,我们有

>一个名为oracle的os用户(在linux上),
>一个名为sys或system的admin oracle用户
>作为应用程序对象的固定预定义oracle用户
老板,让我们称之为appowner
>作为应用程序用户的oracle用户,即有限制
对appowner拥有的对象的优先权,我们称之为
APPUSER

无论何时需要初始化数据库,即从头开始,我们首先使用sys或system oracle用户连接到oracle,然后发出以下命令:

DROP USER appowner CASCADE;

然后我们开始重新创建用户及其从头开始拥有的对象.我们还向appuser授予了appowner创建的对象的一些优先权

除非要对数据库执行任何管理任务,否则应用程序始终以appuser而不是appowner身份登录.

现在我们将这个应用程序移植到db2,这就是我们陷入困境的地方.

对于初学者,db2创建这些os用户,这也是db2用户:

dasusr1
db2inst1
db2fenc1

这三个用户如何映射到sys / system,appowner和appuser?

我相信dasusr1是sys / system的粗略等价物,
db2inst1粗略等同于appowner,和
db2fenc1是appuser的粗略等价物

(如果我错了,请纠正我,我完全理解映射不完全正确)

既然如此,如果我必须删除db2inst1拥有的所有对象,我是否以dasusr1身份登录并删除用户db2inst1?

oracle用户和db2用户之间并没有真正的一对一映射,因为

> db2inst1可以创建多个数据库,而appuser映射到oracle中的一个数据库
>在db2数据库中,可以有多个模式,而在oracle中,一个用户映射到一个模式

所以这有点令人困惑.如果有从oracle到db2移植应用程序经验的人可以对db2和oracle用户之间的等效性有所了解,这将有助于最终导致找到oracle drop user cascade的db2等价物.

解决方法:

@Chris Aldrich给出了一个很好的解释.我将在这里添加一些内容.

1)DB2中没有“数据库用户”的概念.所有身份验证都发生在操作系统中的数据库或实例之外.此外,与Oracle不同,用户ID和架构名称之间没有直接关系.在DB2中,模式只是对象的逻辑分组,它没有任何特殊的安全功能.任何用户都可以创建任何架构.例如,当以mustaccio身份登录时,我运行语句create table foo(id int …),并创建一个模式MUSTACCIO(如果它还没有),并在其中创建一个表.如您所见,架构名称解析默认为我的授权ID.但是,我不妨运行语句create table alok.foo(id char(3)…),在这种情况下创建一个模式ALOK及其中的表. mustaccio将是两个表的所有者.

2)关于用户ID映射,我可能会说DAS所有者dasusr1和受防护用户db2fenc1不映射到Oracle数据库中的任何内容.实例所有者db2inst1映射到oracle用户标识.创建数据库的人(例如,可能是db2inst1或其他授权通过SYSADM组中的成员身份执行此操作的用户)在该数据库中获取DBADM和SECADM权限,这有点类似于系统和/或sys(我是不确定Oracle数据库中两者之间的区别是什么.如果您需要拥有数据库对象的功能ID,则可以在操作系统中创建应用程序,为其授予适当的权限,并在创建对象时连接到该用户.同样,您在操作系统中创建appuser,授予对象访问权限,并让您的应用程序以该用户身份进行连接.

3)由于DB2中没有数据库用户,因此您无法删除用户.要删除特定模式中的对象,可以使用ADMIN_DROP_SCHEMA() procedure.

上一篇:Windows10 64位安装DB2数据库


下一篇:db2数据库别名未通过列表数据库目录列出,但仍无法创建该数据库