DB2 - 角色
Db2 - 角色与权限
Section titled “Db2 - 角色与权限”在现代数据库管理中,角色是命名权限的集合。您不是将单个权限(如 SELECT、INSERT 等)授予每个用户,而是将它们授予角色。然后,您可以将角色授予用户,甚至授予其他角色。这种方法被称为基于角色的访问控制(RBAC),它是最小权限原则的基石,简化了安全管理并降低了错误风险。
关键概念与限制
Section titled “关键概念与限制”- 所有权:角色不能拥有表或视图等数据库对象。所有权始终分配给用户(授权 ID)。
- 静态 SQL 考量:当创建包含静态 SQL(例如视图、MQT、触发器或 SQL 例程)的对象时,Db2 会直接检查对象创建者的权限。通过角色授予的权限在创建这些特定对象时不会被考虑,除非正在使用可信上下文(一种高级安全功能)。
实践流程:创建和使用角色
Section titled “实践流程:创建和使用角色”让我们来看一个常见场景:为业务分析师设置一个只读角色。
步骤 1:创建新角色
Section titled “步骤 1:创建新角色”首先,具有 SECADM(安全管理员)权限的用户创建角色。
CREATE ROLE ANALYST_READONLY;示例:
db2 "CREATE ROLE ANALYST_READONLY"输出:
DB20000I The SQL command completed successfully.步骤 2:授予权限给角色
Section titled “步骤 2:授予权限给角色”接下来,数据所有者或具有 DBADM 权限的用户将特定对象上的必要权限授予新创建的角色。
GRANT SELECT ON TABLE <schema_name>.<table_name> TO ROLE <role_name>;示例:授予对 SALES.TRANSACTIONS 表的 SELECT 访问权限。
db2 "GRANT SELECT ON TABLE SALES.TRANSACTIONS TO ROLE ANALYST_READONLY"输出:
DB20000I The SQL command completed successfully.步骤 3:将角色授予用户
Section titled “步骤 3:将角色授予用户”最后,安全管理员将角色授予用户或组。该用户现在继承了分配给该角色的所有权限。
GRANT ROLE <role_name> TO USER <username>;示例:将 ANALYST_READONLY 角色授予用户 bpatel。
db2 "GRANT ROLE ANALYST_READONLY TO USER bpatel"输出:
DB20000I The SQL command completed successfully.角色可以被授予给其他角色,从而创建层级结构。这对于构建分层访问级别非常有用。一个角色会继承所有授予给它的角色的权限。
语法:
GRANT ROLE <child_role_name> TO ROLE <parent_role_name>;示例:让我们创建一个 MANAGER 角色,它包含所有分析师权限以及管理特定报告表的权限。
-- 首先,创建新角色 db2 "CREATE ROLE MANAGER"
-- 将现有的分析师角色授予经理角色 db2 "GRANT ROLE ANALYST_READONLY TO ROLE MANAGER"
-- 添加额外的经理特定权限 db2 "GRANT INSERT, UPDATE ON TABLE REPORTING.SUMMARY TO ROLE MANAGER"
-- 现在,将 MANAGER 角色授予用户 db2 "GRANT ROLE MANAGER TO USER sjones"最佳实践与深入学习
Section titled “最佳实践与深入学习”- 语义化命名:为角色使用清晰、描述性的名称(例如,
APP_SERVICE_ACCOUNT、FINANCE_AUDITOR、DEV_READ_WRITE)。 - 审计:使用系统目录视图(如
SYSCAT.ROLEAUTH和SYSCAT.TABAUTH)定期审计角色成员资格和分配给每个角色的权限。 - 可信上下文:对于复杂的应用程序安全模型,请探索 Db2 可信上下文(Trusted Contexts),它允许在特定、可信条件下创建静态 SQL 对象时使用角色中的权限。