风哥教程参考DB2官方文档Authorization、Roles等内容,详细介绍角色管理、权限分配、权限审计等。更多视频教程www.fgedu.net.cn
目录大纲
Part01-角色权限体系
1.1 权限类型
DB2权限类型:
- 实例级权限:SYSADM、SYSCTRL、SYSMAINT、SYSMON
- 数据库级权限:DBADM、SECADM、ACCESSCTRL、DATAACCESS
- 对象级权限:SELECT、INSERT、UPDATE、DELETE、CONTROL
- 角色:自定义权限集合
1.2 角色优势
- 简化权限管理
- 统一权限分配
- 便于权限审计
- 支持权限继承
Part02-角色管理
2.1 创建角色
CREATE ROLE ORDER_READONLY;
CREATE ROLE ORDER_OPERATOR;
CREATE ROLE ORDER_ADMIN;
CREATE ROLE REPORT_USER;
CREATE ROLE DEVELOPER;
# 创建部门角色
CREATE ROLE DEPT_SALES;
CREATE ROLE DEPT_FINANCE;
CREATE ROLE DEPT_HR;
# 创建功能角色
CREATE ROLE DATA_IMPORT;
CREATE ROLE DATA_EXPORT;
CREATE ROLE DATA_ANALYST;
# 查看所有角色
SELECT
ROLENAME,
ROLEID,
CREATE_TIME
FROM SYSCAT.ROLES
ORDER BY ROLENAME;
# 删除角色
DROP ROLE DEVELOPER;
2.2 角色继承
# 基础角色
GRANT SELECT ON TABLE ORDERS TO ORDER_READONLY;
GRANT SELECT ON TABLE CUSTOMER TO ORDER_READONLY;
# 继承基础角色
GRANT ORDER_READONLY TO ORDER_OPERATOR;
GRANT INSERT, UPDATE ON TABLE ORDERS TO ORDER_OPERATOR;
# 管理角色继承
GRANT ORDER_OPERATOR TO ORDER_ADMIN;
GRANT DELETE ON TABLE ORDERS TO ORDER_ADMIN;
GRANT CONTROL ON TABLE ORDERS TO ORDER_ADMIN;
# 查看角色继承关系
SELECT
ROLENAME,
GRANTEETYPE,
GRANTEE
FROM SYSCAT.ROLEAUTH
WHERE GRANTEETYPE = ‘R’
ORDER BY ROLENAME;
# 查看角色权限
SELECT
ROLENAME,
OBJECTTYPE,
OBJECTNAME,
PRIVILEGE
FROM SYSCAT.ROLEOBJECTAUTH
WHERE ROLENAME = ‘ORDER_OPERATOR’;
Part03-权限分配
3.1 表级权限
GRANT SELECT ON TABLE ORDERS TO ORDER_READONLY;
GRANT SELECT, INSERT, UPDATE ON TABLE ORDERS TO ORDER_OPERATOR;
GRANT ALL ON TABLE ORDERS TO ORDER_ADMIN;
# 授予列级权限
GRANT SELECT (ORDER_ID, CUSTOMER_ID, TOTAL_AMOUNT)
ON TABLE ORDERS TO ORDER_READONLY;
# 授予视图权限
GRANT SELECT ON VIEW V_ORDER_SUMMARY TO REPORT_USER;
# 授予存储过程执行权限
GRANT EXECUTE ON PROCEDURE SP_PROCESS_ORDER TO ORDER_OPERATOR;
# 授予包执行权限
GRANT EXECUTE ON PACKAGE PKG_ORDER_PROCESS TO ORDER_OPERATOR;
# 查看表权限
SELECT
GRANTEE,
GRANTEETYPE,
TABSCHEMA,
TABNAME,
SELECTAUTH,
INSERTAUTH,
UPDATEAUTH,
DELETEAUTH,
CONTROLAUTH
FROM SYSCAT.TABAUTH
WHERE TABNAME = ‘ORDERS’
ORDER BY GRANTEE;
3.2 数据库级权限
GRANT DBADM ON DATABASE TO db_admin_user;
GRANT SECADM ON DATABASE TO security_admin;
GRANT ACCESSCTRL ON DATABASE TO access_admin;
GRANT DATAACCESS ON DATABASE TO data_admin;
# 授予创建权限
GRANT CREATETAB ON DATABASE TO developer_user;
GRANT CREATEIN ON SCHEMA FGEDB TO developer_user;
# 授予模式权限
GRANT CREATEIN ON SCHEMA FGEDB TO developer_user;
GRANT ALTERIN ON SCHEMA FGEDB TO developer_user;
GRANT DROPIN ON SCHEMA FGEDB TO developer_user;
# 授予表空间权限
GRANT USE OF TABLESPACE USERSPACE1 TO developer_user;
# 查看数据库权限
SELECT
GRANTOR,
GRANTEE,
GRANTEETYPE,
DBADMAUTH,
CREATETABAUTH
FROM SYSCAT.DBAUTH
ORDER BY GRANTEE;
# 查看模式权限
SELECT
GRANTEE,
GRANTEETYPE,
SCHEMANAME,
CREATEINAUTH,
ALTERINAUTH,
DROPINAUTH
FROM SYSCAT.SCHEMAAUTH
ORDER BY SCHEMANAME;
Part04-权限审计
4.1 权限审查
SELECT
‘TABLE’ AS OBJECT_TYPE,
GRANTEE AS USER_NAME,
TABSCHEMA || ‘.’ || TABNAME AS OBJECT_NAME,
SELECTAUTH,
INSERTAUTH,
UPDATEAUTH,
DELETEAUTH
FROM SYSCAT.TABAUTH
WHERE GRANTEE = ‘APP_USER’
UNION ALL
SELECT
‘SCHEMA’ AS OBJECT_TYPE,
GRANTEE AS USER_NAME,
SCHEMANAME AS OBJECT_NAME,
CREATEINAUTH,
ALTERINAUTH,
DROPINAUTH,
NULL
FROM SYSCAT.SCHEMAAUTH
WHERE GRANTEE = ‘APP_USER’
ORDER BY OBJECT_TYPE, OBJECT_NAME;
# 审查角色权限
SELECT
ROLENAME,
OBJECTTYPE,
OBJECTNAME,
PRIVILEGE
FROM SYSCAT.ROLEOBJECTAUTH
WHERE ROLENAME IN (‘ORDER_READONLY’, ‘ORDER_OPERATOR’)
ORDER BY ROLENAME, OBJECTNAME;
# 审查权限继承
SELECT
ROLENAME,
GRANTEE,
GRANTEETYPE
FROM SYSCAT.ROLEAUTH
WHERE GRANTEETYPE = ‘R’
ORDER BY ROLENAME;
# 查找过度授权
SELECT
GRANTEE,
COUNT(*) AS PRIVILEGE_COUNT
FROM SYSCAT.TABAUTH
GROUP BY GRANTEE
HAVING COUNT(*) > 50
ORDER BY PRIVILEGE_COUNT DESC;
4.2 权限回收
REVOKE SELECT ON TABLE ORDERS FROM USER app_user;
REVOKE INSERT, UPDATE ON TABLE ORDERS FROM USER app_user;
# 回收角色
REVOKE ORDER_READONLY FROM USER app_user;
# 回收数据库权限
REVOKE DBADM ON DATABASE FROM USER db_admin_user;
# 回收模式权限
REVOKE CREATEIN ON SCHEMA FGEDB FROM USER developer_user;
# 批量回收权限
CREATE OR REPLACE PROCEDURE SP_REVOKE_ALL_PRIVILEGES(
IN p_user_name VARCHAR(128)
)
LANGUAGE SQL
BEGIN
DECLARE v_sql VARCHAR(1000);
FOR tab AS cur CURSOR FOR
SELECT TABSCHEMA, TABNAME
FROM SYSCAT.TABAUTH
WHERE GRANTEE = UPPER(p_user_name)
DO
SET v_sql = ‘REVOKE ALL ON TABLE ‘ || tab.TABSCHEMA || ‘.’ || tab.TABNAME ||
‘ FROM USER ‘ || p_user_name;
EXECUTE IMMEDIATE v_sql;
END FOR;
END;
# 调用存储过程
CALL SP_REVOKE_ALL_PRIVILEGES(‘app_user’);
Part05-风哥经验总结与分享
5.1 角色权限管理要点
- 使用角色管理权限
- 遵循最小权限原则
- 定期审查权限
- 及时回收不必要的权限
- 建立权限审批流程
- 记录权限变更日志
5.2 管理建议
| 角色类型 | 权限范围 | 适用对象 |
|---|---|---|
| 只读角色 | SELECT权限 | 报表用户、分析人员 |
| 操作角色 | SELECT、INSERT、UPDATE | 业务操作人员 |
| 管理角色 | ALL权限 | 系统管理员 |
5.3 运维要点
- 定期审查用户权限
- 定期审查角色权限
- 监控权限变更
- 建立权限审批流程
- 记录权限变更日志
- 定期权限审计报告
学习交流加群风哥微信: itpux-com
风哥Oracle/MySQL/PostgreSQL/Greenplum/DB2/Redis等数据库培训课程,10年一线实战经验,企业级培训,真正掌握数据库核心技术!
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
