暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Db2 for z/OS:SEPARATE_SECURITY 参数与 SECADM 权限

原创 肯肯在学习 2022-10-12
833

在名为 DSNZPARM(简称 ZPARM)的 db2 for z/OS 模块中(简称 ZPARM),其中有一个名为 SEPARATE_SECURITY 的参数。此 ZPARM 是随 Db2 10 一起引入的,其目的是使 Db2 for z/OS 使用组织能够在 Db2 环境中将安全性管理与系统管理分开(这里我说的是 Db2 内部安全性,它关注的是用户或进程在成功连接到 Db2 子系统后可以执行的操作)。SEPARATE_SECURITY 缺省值为 NO,这是最多 Db2 for z/OS 站点有效的设置。当 Db2 团队被告知这是 Db2 系统的要求时,他们通常会使用 SEPARATE_SECURITY=YES。最近向一个站点的 Db2 人员介绍了此指令,并要求我提供有关实现更改的一些指导。我与这个团队中的人员进行的来回交流包括我认为更大的 Db2 for z/OS 社区可能感兴趣的信息,因此我将其打包到此博客文章中。

简而言之,SEPARATE_SECURITY=YES 使称为 SECADM 的 Db2 授权级别变得非常重要这是否意味着在SEPARATE_SECURITY=NO的环境中不存在 SECADM 权限之类的东西? 不,这不是它的意思。当 SEPARATE_SECURITY=NO 时,具有 SYSADM 权限的 ID 具有隐式 SECADM 权限(但有一个例外:执行 SQL 语句“转移所有权”的能力需要显式的 SECADM 权限,除非该语句是由数据库对象的所有权转移出去的 ID 发出的)。为什么当SEPARATE_SECURITY设置为 YES 时,SECADM 权限非常重要?因为在这种情况下,有一些重要的安全相关的事情只能由具有SECADM权限的人来完成;例如:

  • 创建、更改、激活或停用列掩码或行权限。
  • 授予特权(除非 ID 拥有有问题的“使用授予选项”的特权,或拥有授予特权的对象)。
  • 撤消创建SECURE_OBJECT权限。

关于SECADM权限,有个特别的地方需要注意:它不能被授予。那么,这种权力是如何授予的呢?它通过两个 ZPARM 参数(二元组)和“二元组”参数授予。 既然如此,关于这些 ZPARM 的值的决定应该深思熟虑。当然,一种选择是为 SECADM1 和 SECADM2 提供两个用户 ID,但这将是非常严格的。另一种选择是将 SECADM1 或 SECADM2 设置为 RACF 组标识(如果您使用的是其他 z/OS 安全管理子系统,则为 RACF 等效标识)。在典型的 Db2 环境中,如果用户标识 ABC 连接到 RACF 组标识 XYZ,那么 XYZ 将是 ABC 的 Db2 辅助授权标识。这意味着授予 RACF 组 ID 的权限可供身份验证 ID 连接到组 ID 的用户使用(在某些情况下,成功执行 SQL 语句或命令需要关联进程的 SQL ID 持有特权,并且可能需要发出 SET CURRENT SQLID 语句才能将一个人的 SQL ID 从主身份验证 ID 更改为辅助身份验证 ID)。将 SECADM1 或 SECADM2 设置为 RACF 组标识提供了一定的灵活性,因为这样,就可以将随后在 Db2 环境中负有安全管理责任的人员的用户标识连接到与 ZPARM 参数关联的 RACF 组标识。

当 SEPARATE_SECURITY=YES 生效时,为 Db2 安全性管理提供灵活性的另一种方法是为 SECADM1 或 SECADM2 指定 Db2 角色。这很好或很有趣,因为它是对 Db2 角色的使用,与我的经验中更常见的情况不同:利用角色(以及相关的可信上下文)来帮助防止滥用使用 Db2 DDF 的应用程序的 ID 和密码(几年前,我在博客上写了关于角色和可信上下文的更常见用法)。一些背景知识:角色可以由 Db2 DBA 创建,并且可以向该角色授予一个或多个特权,并且可信上下文(也由 DBA 创建)指定了可以使用授予该角色的特权的条件。当使用该角色来帮助防止滥用 DDF 应用程序的 ID 和密码时,关联的可信上下文可能会指定角色的特权(DDF 应用程序执行其面向 Db2 的 SQL 语句所需的特权)可由使用身份验证 ID ABC(应用程序的身份验证 ID)连接到 Db2 的应用程序使用,这些 IP 地址(位于应用程序运行)。如果该角色旨在使特定组人员能够执行 Db2 安全性管理任务,同时了解这些管理员将在本地连接到 Db2 系统(即,不通过分布式数据工具访系统),该怎么办?

对于“本地用户”情况,设置如下。首先,为此目的创建一个 Db2 角色。我们称之为西克罗尔。然后,创建一个可信上下文来指定可以在哪些情况下使用角色持有的 Db2 特权(它将具有 SECADM 权限)。Db2 安全性管理操作将通过批处理作业执行,并且与 SECROLE 关联的可信上下文将引用该作业,如下所示(我将解释“创建可信上下文”语句中突出显示的颜色部分):

CREATE TRUSTED CONTEXT ADMIN_CTX BASED UPON CONNECTION USING SYSTEM AUTHID ADMNP01 ATTRIBUTES (JOBNAME 'PRDADMN') DEFAULT ROLE SECROLE WITH ROLE AS OBJECT OWNER AND QUALIFIER WITH USE FOR SALLY, FRED, DAVID ENABLE;

好的,以下是有关上述语句的颜色编码部分的一些注释:

  • ADMNP01 – 这是批处理作业的 JCL 中 JOB 语句的用户参数的值。

  • PRDADMN – 这是批处理作业的 JCL 中作业语句中的作业名称。

  • SECROLE – 当通过 PRDADMN 作业以 ADMNP01 作为用户的方式连接到 Db2 时,可以使用其特权的角色。

  • 使用角色作为对象所有者和限定符 – 考虑到角色 SECROLE 的目的,这一点很重要。该角色在 SEPARATE_SECURITY=YES 环境中将具有 SECADM 权限,因此需要该角色来发出动态 GRANT 语句,并且可能需要发布一些动态 DDL 语句(如 CREATE 和 ALTER)(特别是对于列掩码和行权限等安全对象)。这使得 SECROLE 与为使用 DDF 的应用程序创建的角色不同。在后一种情况下,期望 DDF 应用程序将发出动态 SQL DML 语句(如 SELECT 和 INSERT),对于此类动态语句,Db2 检查的特权集是应用程序身份验证 ID 所持有的特权(如果有)和(如果应用程序与 Db2 具有可信连接)与可信连接关联的角色的特权的联合。当要执行的 SQL 语句是动态 GRANT 或动态 DDL 语句时,正如将使用与ADMIN_CTX可信上下文相关联的批处理作业的安全管理员所期望的那样,检查的 Db2 特权将由进程的主身份验证 ID 持有,或者由与进程关联的角色持有。如果我们希望角色的特权生效(在这种情况下,我们确实希望如此),则需要将受信任的上下文定义为角色作为对象所有者(附加的 AND 限定符子句使角色名称成为执行批处理作业时当前架构特殊寄存器的默认值)。

  • 使用 SALLY、FRED、DAVID – 我们可以选择将与可信上下文关联的角色的使用限制为一组用户 ID。这在实际意义上意味着什么:在这种特殊情况下,名为 PRDADMN 的批处理作业将调用 Db2 DSN 命令处理器,并将执行程序 DSNTEP2(也可以是 DSNTEP4 程序),通过该程序将发出 SQL 语句(例如,GRANT、CREATE、ALTER)。已确定,仅当用户名为 ADMNP01 的 PRDADMN 作业由用户 ID 之一 SALLY、FRED 或 DAVID 执行时,角色 SECROLE 所持有的特权才会生效。萨莉(或弗雷德或大卫)可以在执行 PRDADMN 作业时,通过 DSN 命令的“华硕”选项提供她的用户 ID。以下是我正在谈论的一个例子:

//SYSTSIN DD * DSN SYSTEM(xxxx) ASUSER(SALLY) RUN PROGRAM(DSNTEP2) //SYSIN DD * ...

创建角色和可信上下文后,ZPARM 中 SECADM1(或 SECADM2)的值可以设置为“安全”(ZPARM 中SECADM1_TYPE(或SECADM2_TYPE)的值将设置为“角色”)。

如果将 SECADM1 或 SECADM2 设置为角色名称,并且希望在将角色及其受信任上下文更改为 YES 之前测试 SEPARATE_SECURITY角色的功能,请考虑通过受信任上下文中引用的批处理作业发出 SQL 语句“转移所有权”。仅当角色的权限有效时,该语句才应成功,因为只有 SECADM 有权执行“转移所有权”,即使SEPARATE_SECURITY设置为 NO(将数据库对象的所有权从 ID ABC 转移出去的“转移所有权”语句在 ID ABC 发出时将成功,因此不要在测试中使用该 ID)。

如果要转到SEPARATE_SECURITY=YES,请为 SECADM1 和 SECADM2 制定一个计划。将两个 SECADM 中的一个设置为授权标识(用户标识或 RACF(或等效)组标识)可能是一个好主意。另一个 SECADM 可以是不同的授权标识,也可以是角色。要点:考虑一下,在抛出SEPARATE_SECURITY=YES开关之前,“先把你的鸭子排成一排”。

最初发表在罗伯特的 Db2 博客上。

原文标题:Db2 for z/OS: SEPARATE_SECURITY and SECADM
原文作者:Robert Catterall
原文地址:https://planetmainframe.com/2022/09/db2-for-z-os-separate_security-and-secadm/

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论