【Oracle】DCL语言

article/2025/8/27 2:06:04

在这里插入图片描述

个人主页:Guiat
归属专栏:Oracle

在这里插入图片描述

文章目录

  • 1. DCL概述
    • 1.1 什么是DCL?
    • 1.2 DCL的核心功能
  • 2. 用户管理
    • 2.1 创建用户
    • 2.2 修改用户
    • 2.3 删除用户
    • 2.4 用户信息查询
  • 3. 权限管理
    • 3.1 系统权限
      • 3.1.1 授予系统权限
      • 3.1.2 撤销系统权限
    • 3.2 对象权限
      • 3.2.1 实际应用示例
    • 3.3 权限查询
  • 4. 角色管理
    • 4.1 角色的概念
    • 4.2 创建和管理角色
    • 4.3 角色分配和撤销
    • 4.4 实际角色设计案例
      • 4.4.1 企业人事管理系统角色设计
      • 4.4.2 电商系统角色设计
  • 5. 高级安全特性
    • 5.1 用户配置文件(Profile)
    • 5.2 审计功能
    • 5.3 虚拟私有数据库(VPD)
  • 6. 实际应用案例
    • 6.1 多租户SaaS应用权限设计
    • 6.2 金融系统权限控制
    • 6.3 医疗系统HIPAA合规权限设计
  • 7. 权限管理最佳实践
    • 7.1 权限设计原则
    • 7.2 权限清理和维护脚本
    • 7.3 安全配置检查清单

正文

DCL(Data Control Language)是Oracle数据库中负责数据安全和权限管理的语言,就像数据库的"门卫"和"管家",决定谁能进来、谁能做什么。如果说DDL是建房子的,DML是装修房子的,那DCL就是管理房子钥匙的!

1. DCL概述

1.1 什么是DCL?

DCL就像是数据库的"安保系统",它负责控制用户对数据库对象的访问权限。在Oracle这个数据库王国里,DCL确保每个用户都只能访问被授权的数据和功能,就像皇宫里的等级制度一样严格。

DCL数据控制语言
权限管理
角色管理
用户管理
安全控制
GRANT授权
REVOKE撤销
CREATE ROLE
DROP ROLE
CREATE USER
ALTER USER
DROP USER
审计控制
密码策略

1.2 DCL的核心功能

Oracle DCL的功能架构就像一个完整的权限管理体系:

Oracle DCL功能体系
用户身份管理
权限控制
角色管理
安全策略
用户创建和删除
密码管理
账户状态控制
系统权限
对象权限
权限传递
角色定义
角色分配
角色层次
审计策略
资源限制
安全配置

2. 用户管理

2.1 创建用户

在Oracle中创建用户就像注册一个新账户,需要指定各种属性:

-- 基本用户创建
CREATE USER hr_user
IDENTIFIED BY password123
DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp
QUOTA 100M ON users;-- 创建带详细配置的用户
CREATE USER sales_manager
IDENTIFIED BY SecurePass2024
DEFAULT TABLESPACE sales_data
TEMPORARY TABLESPACE temp
QUOTA 500M ON sales_data
QUOTA 50M ON indexes
PASSWORD EXPIRE
ACCOUNT UNLOCK;-- 使用外部认证创建用户
CREATE USER external_user
IDENTIFIED EXTERNALLY
DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp;-- 创建应用程序用户
CREATE USER app_user
IDENTIFIED BY app_password
DEFAULT TABLESPACE app_data
TEMPORARY TABLESPACE temp
QUOTA UNLIMITED ON app_data
PROFILE app_profile;

2.2 修改用户

用户创建后,就像人会成长变化一样,用户属性也需要调整:

-- 修改用户密码
ALTER USER hr_user IDENTIFIED BY new_password123;-- 修改用户的表空间配额
ALTER USER sales_manager QUOTA 1G ON sales_data;-- 锁定用户账户
ALTER USER problem_user ACCOUNT LOCK;-- 解锁用户账户
ALTER USER problem_user ACCOUNT UNLOCK;-- 强制密码过期
ALTER USER hr_user PASSWORD EXPIRE;-- 修改默认表空间
ALTER USER sales_manager DEFAULT TABLESPACE new_tablespace;-- 为用户分配配置文件
ALTER USER hr_user PROFILE strict_profile;-- 综合修改用户属性
ALTER USER app_userIDENTIFIED BY new_app_passwordDEFAULT TABLESPACE new_app_dataQUOTA 2G ON new_app_dataACCOUNT UNLOCKPASSWORD EXPIRE;

2.3 删除用户

删除用户要谨慎,就像注销账户一样不可逆:

-- 删除用户(用户不能拥有任何对象)
DROP USER simple_user;-- 级联删除用户及其所有对象
DROP USER old_user CASCADE;-- 删除前检查用户拥有的对象
SELECT object_name, object_type 
FROM dba_objects 
WHERE owner = 'OLD_USER';

2.4 用户信息查询

了解用户状态就像查看员工档案:

-- 查看所有用户基本信息
SELECT username, account_status, created, default_tablespace
FROM dba_users
ORDER BY created DESC;-- 查看用户的表空间配额
SELECT username, tablespace_name, bytes, max_bytes
FROM dba_ts_quotas
WHERE username = 'HR_USER';-- 查看用户会话信息
SELECT username, sid, serial#, status, program
FROM v$session
WHERE username IS NOT NULL;-- 查看用户的配置文件
SELECT username, profile, account_status, lock_date
FROM dba_users
WHERE username IN ('HR_USER', 'SALES_MANAGER');

3. 权限管理

3.1 系统权限

系统权限就像是数据库的"通行证",决定用户能在数据库中做什么:

Oracle系统权限分类
连接权限
DDL权限
DML权限
管理权限
CREATE SESSION
ALTER SESSION
CREATE TABLE
CREATE VIEW
CREATE PROCEDURE
CREATE SEQUENCE
SELECT ANY TABLE
INSERT ANY TABLE
UPDATE ANY TABLE
DELETE ANY TABLE
DBA权限
SYSDBA权限
SYSOPER权限

3.1.1 授予系统权限

-- 授予基本连接权限
GRANT CREATE SESSION TO hr_user;-- 授予创建表的权限
GRANT CREATE TABLE TO hr_user;-- 授予多个权限
GRANT CREATE TABLE, CREATE VIEW, CREATE PROCEDURE TO developer_user;-- 授予带管理员选项的权限(可以转授给其他用户)
GRANT CREATE USER TO hr_manager WITH ADMIN OPTION;-- 授予查询任意表的权限
GRANT SELECT ANY TABLE TO audit_user;-- 批量授予常用开发权限
GRANT CREATE SESSION,CREATE TABLE,CREATE VIEW,CREATE PROCEDURE,CREATE SEQUENCE,CREATE SYNONYM
TO developer_role;

3.1.2 撤销系统权限

-- 撤销特定权限
REVOKE CREATE TABLE FROM hr_user;-- 撤销多个权限
REVOKE CREATE VIEW, CREATE PROCEDURE FROM developer_user;-- 撤销管理员权限
REVOKE CREATE USER FROM hr_manager;

3.2 对象权限

对象权限更加精细,就像给每个房间分配不同的钥匙:

-- 授予表的查询权限
GRANT SELECT ON employees TO hr_user;-- 授予表的增删改查权限
GRANT SELECT, INSERT, UPDATE, DELETE ON departments TO hr_manager;-- 授予表的特定列更新权限
GRANT UPDATE (salary, commission_pct) ON employees TO payroll_user;-- 授予执行存储过程的权限
GRANT EXECUTE ON calculate_bonus TO hr_manager;-- 授予带授权选项的权限(可以转授给其他用户)
GRANT SELECT ON employees TO hr_manager WITH GRANT OPTION;-- 授予视图权限
GRANT SELECT ON employee_summary_view TO report_user;-- 授予序列权限
GRANT SELECT ON employee_seq TO hr_user;

3.2.1 实际应用示例

-- 为不同角色分配合适的权限
-- 1. 人事部门查询员工信息
GRANT SELECT ON employees TO hr_dept;
GRANT SELECT ON departments TO hr_dept;
GRANT SELECT ON jobs TO hr_dept;-- 2. 财务部门访问薪资相关数据
GRANT SELECT ON employees TO finance_dept;
GRANT UPDATE (salary) ON employees TO finance_manager;
GRANT SELECT ON payroll_history TO finance_dept;-- 3. 开发团队访问测试数据
GRANT SELECT, INSERT, UPDATE, DELETE ON test_employees TO dev_team;
GRANT CREATE TABLE TO dev_lead;
GRANT DROP ANY TABLE TO dev_lead;-- 4. 报表用户只读权限
GRANT SELECT ON employees TO report_user;
GRANT SELECT ON departments TO report_user;
GRANT SELECT ON sales_data TO report_user;

3.3 权限查询

了解权限分配情况就像查看通讯录:

-- 查看用户拥有的系统权限
SELECT grantee, privilege, admin_option
FROM dba_sys_privs
WHERE grantee = 'HR_USER'
ORDER BY privilege;-- 查看用户拥有的对象权限
SELECT grantee, owner, table_name, privilege, grantable
FROM dba_tab_privs
WHERE grantee = 'HR_USER'
ORDER BY owner, table_name;-- 查看当前用户的权限
SELECT * FROM user_sys_privs;
SELECT * FROM user_tab_privs;-- 查看角色包含的权限
SELECT role, privilege
FROM dba_role_privs
WHERE grantee = 'HR_ROLE';-- 查看谁有特定表的权限
SELECT grantee, privilege, grantable
FROM dba_tab_privs
WHERE owner = 'HR' AND table_name = 'EMPLOYEES';

4. 角色管理

4.1 角色的概念

角色就像是职位头衔,把相关的权限打包在一起,方便管理:

Oracle角色管理
预定义角色
自定义角色
角色层次
CONNECT
RESOURCE
DBA
SELECT_CATALOG_ROLE
业务角色
功能角色
部门角色
角色嵌套
角色继承
权限传递

4.2 创建和管理角色

-- 创建基本角色
CREATE ROLE hr_role;-- 创建带密码的角色
CREATE ROLE secure_role IDENTIFIED BY role_password;-- 创建不能被启用的角色(需要密码)
CREATE ROLE admin_role NOT IDENTIFIED;-- 为角色分配权限
GRANT CREATE SESSION TO hr_role;
GRANT SELECT ON employees TO hr_role;
GRANT SELECT ON departments TO hr_role;-- 创建复杂的业务角色
CREATE ROLE employee_manager;
GRANT CREATE SESSION TO employee_manager;
GRANT SELECT, INSERT, UPDATE ON employees TO employee_manager;
GRANT SELECT ON departments TO employee_manager;
GRANT EXECUTE ON hr_procedures TO employee_manager;-- 创建角色层次
CREATE ROLE junior_developer;
CREATE ROLE senior_developer;
CREATE ROLE lead_developer;-- 基础开发权限
GRANT CREATE SESSION TO junior_developer;
GRANT CREATE TABLE TO junior_developer;
GRANT CREATE VIEW TO junior_developer;-- 高级开发权限(包含基础权限)
GRANT junior_developer TO senior_developer;
GRANT CREATE PROCEDURE TO senior_developer;
GRANT CREATE PACKAGE TO senior_developer;-- 领导权限(包含高级权限)
GRANT senior_developer TO lead_developer;
GRANT DROP ANY TABLE TO lead_developer;
GRANT CREATE USER TO lead_developer;

4.3 角色分配和撤销

-- 将角色分配给用户
GRANT hr_role TO hr_user;
GRANT employee_manager TO hr_manager;-- 将角色分配给其他角色
GRANT junior_developer TO development_team;-- 分配默认角色
ALTER USER hr_user DEFAULT ROLE hr_role;-- 分配所有角色作为默认
ALTER USER developer DEFAULT ROLE ALL;-- 撤销角色
REVOKE hr_role FROM hr_user;
REVOKE employee_manager FROM hr_manager;-- 删除角色
DROP ROLE old_role;

4.4 实际角色设计案例

4.4.1 企业人事管理系统角色设计

-- 1. 创建基础角色
CREATE ROLE app_user;
GRANT CREATE SESSION TO app_user;-- 2. 创建部门角色
CREATE ROLE hr_department;
CREATE ROLE finance_department;
CREATE ROLE it_department;-- 继承基础权限
GRANT app_user TO hr_department;
GRANT app_user TO finance_department;
GRANT app_user TO it_department;-- 3. 人事部门权限
GRANT SELECT, INSERT, UPDATE ON employees TO hr_department;
GRANT SELECT, INSERT, UPDATE ON departments TO hr_department;
GRANT SELECT ON salary_grades TO hr_department;
GRANT EXECUTE ON hr_pkg TO hr_department;-- 4. 财务部门权限
GRANT SELECT ON employees TO finance_department;
GRANT UPDATE (salary, bonus) ON employees TO finance_department;
GRANT SELECT, INSERT, UPDATE ON payroll TO finance_department;
GRANT EXECUTE ON finance_pkg TO finance_department;-- 5. IT部门权限
GRANT SELECT ON all_users TO it_department;
GRANT SELECT ON dba_objects TO it_department;
GRANT CREATE TABLE TO it_department;
GRANT CREATE PROCEDURE TO it_department;-- 6. 创建管理角色
CREATE ROLE hr_manager;
CREATE ROLE finance_manager;
CREATE ROLE it_manager;GRANT hr_department TO hr_manager;
GRANT finance_department TO finance_manager;
GRANT it_department TO it_manager;-- 管理员额外权限
GRANT DELETE ON employees TO hr_manager;
GRANT CREATE USER TO hr_manager;
GRANT ALTER USER TO finance_manager;
GRANT DROP ANY TABLE TO it_manager;

4.4.2 电商系统角色设计

-- 电商系统角色架构
CREATE ROLE customer_service;
CREATE ROLE order_manager;
CREATE ROLE inventory_manager;
CREATE ROLE sales_analyst;
CREATE ROLE system_admin;-- 客服角色权限
GRANT CREATE SESSION TO customer_service;
GRANT SELECT ON customers TO customer_service;
GRANT SELECT ON orders TO customer_service;
GRANT UPDATE (status) ON orders TO customer_service;
GRANT SELECT ON products TO customer_service;-- 订单管理角色权限
GRANT customer_service TO order_manager;
GRANT INSERT, UPDATE, DELETE ON orders TO order_manager;
GRANT INSERT, UPDATE ON order_items TO order_manager;
GRANT EXECUTE ON order_processing_pkg TO order_manager;-- 库存管理角色权限
GRANT CREATE SESSION TO inventory_manager;
GRANT SELECT, INSERT, UPDATE ON products TO inventory_manager;
GRANT SELECT, INSERT, UPDATE ON inventory TO inventory_manager;
GRANT EXECUTE ON inventory_pkg TO inventory_manager;-- 销售分析角色权限
GRANT CREATE SESSION TO sales_analyst;
GRANT SELECT ON orders TO sales_analyst;
GRANT SELECT ON order_items TO sales_analyst;
GRANT SELECT ON products TO sales_analyst;
GRANT SELECT ON customers TO sales_analyst;
GRANT CREATE TABLE TO sales_analyst; -- 创建临时分析表

5. 高级安全特性

5.1 用户配置文件(Profile)

Profile就像是用户的"行为规范",限制用户的资源使用:

-- 创建严格的密码策略配置文件
CREATE PROFILE strict_security_profile LIMITSESSIONS_PER_USER 2                    -- 最多2个并发会话CPU_PER_SESSION 3000                   -- 每会话CPU限制(百分之一秒)CPU_PER_CALL 1000                      -- 每次调用CPU限制CONNECT_TIME 120                       -- 连接时间限制(分钟)IDLE_TIME 15                           -- 空闲时间限制(分钟)LOGICAL_READS_PER_SESSION 10000        -- 每会话逻辑读限制LOGICAL_READS_PER_CALL 1000            -- 每次调用逻辑读限制PRIVATE_SGA 100K                       -- 私有SGA限制COMPOSITE_LIMIT 5000000;               -- 综合资源限制-- 创建密码策略配置文件
CREATE PROFILE password_policy LIMITFAILED_LOGIN_ATTEMPTS 3                -- 登录失败次数限制PASSWORD_LIFE_TIME 90                  -- 密码有效期(天)PASSWORD_REUSE_TIME 365                -- 密码重用时间间隔PASSWORD_REUSE_MAX 12                  -- 密码重用次数限制PASSWORD_LOCK_TIME 1/24                -- 账户锁定时间(1小时)PASSWORD_GRACE_TIME 7;                 -- 密码到期宽限期-- 应用配置文件到用户
ALTER USER hr_user PROFILE strict_security_profile;
ALTER USER sales_user PROFILE password_policy;

5.2 审计功能

审计就像是数据库的"监控摄像头",记录所有重要操作:

-- 启用数据库审计
ALTER SYSTEM SET audit_trail=DB SCOPE=SPFILE;-- 审计特定操作
AUDIT SELECT TABLE, INSERT TABLE, UPDATE TABLE, DELETE TABLE;-- 审计特定用户的操作
AUDIT ALL BY hr_user;-- 审计特定对象的访问
AUDIT SELECT ON employees BY ACCESS;-- 审计系统权限的使用
AUDIT CREATE TABLE, DROP TABLE;-- 审计登录和登出
AUDIT SESSION;-- 查看审计记录
SELECT username, action_name, object_name, timestamp
FROM dba_audit_trail
WHERE username = 'HR_USER'
ORDER BY timestamp DESC;-- 细粒度审计(FGA)
BEGINDBMS_FGA.ADD_POLICY(object_schema   => 'HR',object_name     => 'EMPLOYEES',policy_name     => 'salary_access_audit',audit_condition => 'SALARY > 10000',audit_column    => 'SALARY',handler_schema  => 'SECURITY',handler_module  => 'AUDIT_HANDLER',enable          => TRUE);
END;
/

5.3 虚拟私有数据库(VPD)

VPD就像是数据的"隐形眼镜",让用户只能看到被授权的数据:

-- 创建安全策略函数
CREATE OR REPLACE FUNCTION dept_security_policy(schema_var IN VARCHAR2,table_var IN VARCHAR2
) RETURN VARCHAR2 ASpredicate VARCHAR2(400);
BEGIN-- 根据当前用户限制可见的部门数据IF USER = 'HR_USER' THENpredicate := 'DEPARTMENT_ID IN (10, 20)';ELSIF USER = 'SALES_USER' THENpredicate := 'DEPARTMENT_ID = 30';ELSEpredicate := '1=2'; -- 默认不允许访问END IF;RETURN predicate;
END;
/-- 应用安全策略
BEGINDBMS_RLS.ADD_POLICY(object_schema   => 'HR',object_name     => 'EMPLOYEES',policy_name     => 'dept_security_policy',function_schema => 'SECURITY',policy_function => 'dept_security_policy',statement_types => 'SELECT,INSERT,UPDATE,DELETE');
END;
/

6. 实际应用案例

6.1 多租户SaaS应用权限设计

-- SaaS应用的多租户权限架构
-- 1. 创建租户隔离策略
CREATE OR REPLACE FUNCTION tenant_isolation_policy(schema_var IN VARCHAR2,table_var IN VARCHAR2
) RETURN VARCHAR2 AStenant_id NUMBER;predicate VARCHAR2(400);
BEGIN-- 从应用上下文获取租户IDtenant_id := SYS_CONTEXT('TENANT_CTX', 'TENANT_ID');IF tenant_id IS NOT NULL THENpredicate := 'tenant_id = ' || tenant_id;ELSEpredicate := '1=2'; -- 没有租户ID则无法访问数据END IF;RETURN predicate;
END;
/-- 2. 创建应用上下文
CREATE OR REPLACE CONTEXT tenant_ctx USING tenant_pkg;-- 3. 创建设置租户上下文的包
CREATE OR REPLACE PACKAGE tenant_pkg ASPROCEDURE set_tenant_id(p_tenant_id NUMBER);
END;
/CREATE OR REPLACE PACKAGE BODY tenant_pkg ASPROCEDURE set_tenant_id(p_tenant_id NUMBER) ASBEGINDBMS_SESSION.SET_CONTEXT('TENANT_CTX', 'TENANT_ID', p_tenant_id);END;
END;
/-- 4. 应用到所有业务表
BEGINFOR rec IN (SELECT table_name FROM user_tables WHERE table_name LIKE '%_DATA') LOOPDBMS_RLS.ADD_POLICY(object_schema   => USER,object_name     => rec.table_name,policy_name     => 'tenant_isolation',function_schema => USER,policy_function => 'tenant_isolation_policy',statement_types => 'SELECT,INSERT,UPDATE,DELETE');END LOOP;
END;
/

6.2 金融系统权限控制

-- 金融系统的分级权限控制
-- 1. 创建职级角色
CREATE ROLE teller;          -- 柜员
CREATE ROLE supervisor;      -- 主管
CREATE ROLE manager;         -- 经理
CREATE ROLE auditor;         -- 审计员-- 2. 基础权限分配
GRANT CREATE SESSION TO teller;
GRANT teller TO supervisor;
GRANT supervisor TO manager;-- 3. 柜员权限(基础操作)
GRANT SELECT ON customers TO teller;
GRANT SELECT ON accounts TO teller;
GRANT INSERT ON transactions TO teller;
GRANT UPDATE (balance) ON accounts TO teller;-- 4. 主管权限(包含柜员权限+审批权限)
GRANT UPDATE (status) ON transactions TO supervisor;
GRANT SELECT ON transaction_logs TO supervisor;-- 5. 经理权限(包含主管权限+管理权限)
GRANT INSERT, UPDATE, DELETE ON customers TO manager;
GRANT CREATE TABLE TO manager;
GRANT EXECUTE ON admin_procedures TO manager;-- 6. 审计员权限(只读+特殊审计权限)
GRANT SELECT ON ALL_TABLES TO auditor;
GRANT SELECT ON audit_trail TO auditor;
GRANT EXECUTE ON audit_reports TO auditor;-- 7. 创建金额限制策略
CREATE OR REPLACE FUNCTION transaction_limit_policy(schema_var IN VARCHAR2,table_var IN VARCHAR2
) RETURN VARCHAR2 ASuser_role VARCHAR2(30);predicate VARCHAR2(400);
BEGIN-- 获取用户角色SELECT granted_role INTO user_roleFROM user_role_privs WHERE granted_role IN ('TELLER', 'SUPERVISOR', 'MANAGER')AND rownum = 1;CASE user_roleWHEN 'TELLER' THENpredicate := 'amount <= 10000';WHEN 'SUPERVISOR' THENpredicate := 'amount <= 50000';WHEN 'MANAGER' THENpredicate := 'amount <= 1000000';ELSEpredicate := '1=2';END CASE;RETURN predicate;
EXCEPTIONWHEN NO_DATA_FOUND THENRETURN '1=2';
END;
/

6.3 医疗系统HIPAA合规权限设计

-- 医疗系统的HIPAA合规权限设计
-- 1. 创建医疗角色层次
CREATE ROLE medical_staff;
CREATE ROLE nurse;
CREATE ROLE doctor;
CREATE ROLE admin_staff;
CREATE ROLE privacy_officer;-- 2. 基础医疗人员权限
GRANT CREATE SESSION TO medical_staff;
GRANT SELECT ON patients TO medical_staff;
GRANT SELECT ON appointments TO medical_staff;-- 3. 护士权限
GRANT medical_staff TO nurse;
GRANT UPDATE (vital_signs, notes) ON patient_records TO nurse;
GRANT INSERT ON nursing_notes TO nurse;-- 4. 医生权限
GRANT nurse TO doctor;
GRANT INSERT, UPDATE ON patient_records TO doctor;
GRANT INSERT ON prescriptions TO doctor;
GRANT SELECT ON medical_history TO doctor;-- 5. 创建患者访问控制策略
CREATE OR REPLACE FUNCTION patient_access_policy(schema_var IN VARCHAR2,table_var IN VARCHAR2
) RETURN VARCHAR2 ASstaff_id NUMBER;predicate VARCHAR2(2000);
BEGIN-- 获取当前医护人员IDSELECT employee_id INTO staff_idFROM medical_staff_mappingWHERE username = USER;-- 只能访问分配给自己的患者predicate := 'patient_id IN (SELECT patient_id FROM patient_assignments WHERE staff_id = ' || staff_id || ' AND assignment_date <= SYSDATE AND (end_date IS NULL OR end_date >= SYSDATE))';RETURN predicate;
EXCEPTIONWHEN NO_DATA_FOUND THENRETURN '1=2';
END;
/-- 6. 创建审计日志记录
CREATE OR REPLACE TRIGGER patient_access_auditAFTER SELECT ON patient_recordsFOR EACH STATEMENT
BEGININSERT INTO hipaa_audit_log (username,access_time,table_accessed,action_type,ip_address) VALUES (USER,SYSTIMESTAMP,'PATIENT_RECORDS','SELECT',SYS_CONTEXT('USERENV', 'IP_ADDRESS'));
END;
/

7. 权限管理最佳实践

7.1 权限设计原则

权限管理最佳实践
最小权限原则
职责分离
定期审查
监控审计
只授予必需权限
避免过度授权
及时回收权限
开发/测试/生产分离
不同角色权限分离
敏感操作双人确认
定期权限清理
用户权限审查
角色权限验证
敏感操作审计
异常访问告警
合规性报告

7.2 权限清理和维护脚本

-- 权限维护和清理脚本-- 1. 查找长期未使用的用户
SELECT username, created, last_login
FROM (SELECT u.username, u.created,MAX(s.logon_time) as last_loginFROM dba_users uLEFT JOIN dba_audit_session s ON u.username = s.usernameWHERE u.account_status = 'OPEN'GROUP BY u.username, u.created
)
WHERE last_login < SYSDATE - 90OR last_login IS NULL;-- 2. 查找拥有过多权限的用户
SELECT grantee, COUNT(*) as privilege_count
FROM (SELECT grantee FROM dba_sys_privsUNION ALLSELECT grantee FROM dba_tab_privsUNION ALLSELECT grantee FROM dba_role_privs
)
GROUP BY grantee
HAVING COUNT(*) > 50
ORDER BY privilege_count DESC;-- 3. 查找直接授予用户的权限(应该通过角色授予)
SELECT grantee, privilege, 'SYSTEM' as privilege_type
FROM dba_sys_privs
WHERE grantee NOT IN (SELECT role FROM dba_roles)
UNION ALL
SELECT grantee, privilege, 'OBJECT' as privilege_type
FROM dba_tab_privs
WHERE grantee NOT IN (SELECT role FROM dba_roles);-- 4. 权限回收脚本生成
SELECT 'REVOKE ' || privilege || ' FROM ' || grantee || ';' as revoke_sql
FROM dba_sys_privs
WHERE grantee = 'OLD_USER';-- 5. 创建权限备份
CREATE TABLE user_privileges_backup AS
SELECT 'GRANT ' || privilege || ' TO ' || grantee || CASE WHEN admin_option = 'YES' THEN ' WITH ADMIN OPTION' END ||';' as grant_sql,grantee, privilege, SYSDATE as backup_date
FROM dba_sys_privs
WHERE grantee = 'BACKUP_USER';

7.3 安全配置检查清单

-- 安全配置检查脚本-- 1. 检查默认密码用户
SELECT username, account_status
FROM dba_users
WHERE username IN ('SCOTT', 'HR', 'OE', 'SH', 'PM')AND account_status != 'LOCKED';-- 2. 检查具有DBA权限的用户
SELECT grantee
FROM dba_role_privs
WHERE granted_role = 'DBA'AND grantee != 'SYS';-- 3. 检查密码策略配置
SELECT profile, resource_name, limit
FROM dba_profiles
WHERE resource_type = 'PASSWORD'AND profile = 'DEFAULT'
ORDER BY resource_name;-- 4. 检查审计配置状态
SELECT name, value
FROM v$parameter
WHERE name LIKE '%audit%';-- 5. 检查用户会话限制
SELECT username, sessions_per_user, cpu_per_session
FROM dba_users u, dba_profiles p
WHERE u.profile = p.profileAND p.resource_name IN ('SESSIONS_PER_USER', 'CPU_PER_SESSION')AND p.limit != 'UNLIMITED';

Oracle的DCL就像是数据库世界的"宪法",它确保每个用户都在自己的权限范围内活动,既保证了数据安全,又维护了系统秩序。掌握DCL不仅是DBA的必备技能,也是每个数据库开发者都应该了解的重要知识。记住,权限管理永远是"宁可严格一点,也不要随意放松",因为数据安全无小事!

结语
感谢您的阅读!期待您的一键三连!欢迎指正!

在这里插入图片描述


http://www.hkcw.cn/article/WeMGYeAXCc.shtml

相关文章

使用Redisson实现分布式锁发现的【订阅超时】Subscribe timeout: (7500ms)

背景 使用 redisson 实现分布式锁&#xff0c;出现的异常&#xff1a; org.redisson.client.RedisTimeoutException: Subscribe timeout: (7500ms). Increase ‘subscriptionsPerConnection’ and/or ‘subscriptionConnectionPoolSize’ parameters 从异常信息读的出来一些东…

异步上传石墨文件进度条前端展示记录(采用Redis中String数据结构实现-苏东坡版本)

昔者&#xff0c;有客临门&#xff0c;亟需自石墨文库中撷取卷帙若干。此等文册&#xff0c;非止一卷&#xff0c;乃累牍连篇&#xff0c;亟需批量转置。然吾辈虑及用户体验&#xff0c;当效东坡"腹有诗书气自华"之雅意&#xff0c;使操作如行云流水&#xff0c;遂定…

数据可视化--使用matplotlib绘制高级图表

目录 一、绘制等高线图 contour() 二、绘制矢量场流线图 streamplot() 三、绘制棉棒图 stem() 四、绘制哑铃图 五、绘制甘特图 六、绘制人口金字塔图 barh() 七、绘制漏斗图 简易版漏斗图 八、绘制桑基图 Sankey()---创建桑基图 add()---添加桑基图的选项 finish()…

[Windows] 摸鱼小工具:隐藏软件(重制版)

由吾爱大神写的摸鱼工具&#xff1a; 数据存放路径为C:\Users\用户名\AppData\Local\HideSoft&#xff0c;如果不想用时&#xff0c;删除软件及此路径下的HideSoft文件夹。如添加了开机启动&#xff0c;删除启动菜单文件夹的快捷方式即可&#xff0c;或者删除前在软件中取消设置…

模块化集成建筑(MiC建筑):颠覆传统的未来建造革命

传统建筑行业长期面临"高污染、高能耗、低效率"的困境。施工现场粉尘飞扬、建材浪费严重、人工依赖度高&#xff0c;这些痛点制约着行业现代化进程。而MiC技术通过将建筑分解为标准化模块&#xff0c;彻底颠覆了传统建造模式。 在海南海口刚刚落幕的第二十一届国际绿…

【文献阅读】Hierarchical Reinforcement Learning: A ComprehensiveSurvey

Acm Computing Surveys (csur) 1区 2021年 分层强化学习&#xff1a;全面综述 分层强化学习&#xff08;HRL&#xff09;能够将具有挑战性的长时决策任务自主分解为更简单的子任务。在过去几年里&#xff0c;HRL 研究领域取得了显著发展&#xff0c;产生了大量方法。为了系…

鸿蒙网络数据传输案例实战

一、案例效果截图 二、案例运用到的知识点 核心知识点 网络连接管理&#xff1a;connection模块HTTP数据请求&#xff1a;http模块RPC数据请求&#xff1a;rcp模块文件管理能力&#xff1a;fileIo模块、fileUri模块 其他知识点 ArkTS 语言基础V2版状态管理&#xff1a;Comp…

linux有效裁剪视频的方式(基于ffmpeg,不改变分辨率,帧率,视频质量,不需要三方软件)

就是在Linux上使用OBS Studio录制一个讲座或者其他视频&#xff0c;可能总有些时候会多录制一段时间&#xff0c;但是如果使用剪映或者PR这样的工具在导出的时候总需要烦恼导出的格式和参数&#xff0c;比如剪映就不支持mkv格式的导出&#xff0c;导出成mp4格式的视频就会变得很…

Python 电脑桌面——牛马工作量监控大屏

开源地址&#xff1a;https://gitee.com/beautiful_corridors/niuma Python 工作量监控大屏 基于 Python PySide6 开发的实时工作量监控桌面应用&#xff0c;提供美观的大屏显示界面。 功能特性 &#x1f4ca; 实时监控 键盘输入统计: 实时统计按键次数&#xff0c;显示平…

界面开发框架DevExpress XAF实践:集成.NET Aspire后如何实现自定义遥测?

DevExpress XAF是一款强大的现代应用程序框架&#xff0c;允许同时开发ASP.NET和WinForms。DevExpress XAF采用模块化设计&#xff0c;开发人员可以选择内建模块&#xff0c;也可以自行创建&#xff0c;从而以更快的速度和比开发人员当前更强有力的方式创建应用程序。 .NET As…

t009-线上代驾管理系统

项目演示地址 摘 要 使用旧方法对线上代驾管理系统的信息进行系统化管理已经不再让人们信赖了&#xff0c;把现在的网络信息技术运用在线上代驾管理系统的管理上面可以解决许多信息管理上面的难题&#xff0c;比如处理数据时间很长&#xff0c;数据存在错误不能及时纠正等问题…

测试Bug篇

本节概要&#xff1a; 软件测试的生命周期 bug的概念 buh要素 bug等级 bug生命周期 对于bug的定级与开发发生冲突如何解决 一、 软件测试的⽣命周期 软件测试贯穿于软件的整个生命周期&#xff0c;针对这句话我们⼀起来看⼀下软件测试是如何贯穿软件的整个生命周期。 软…

实验设计与分析(第6版,Montgomery)第5章析因设计引导5.7节思考题5.2 R语言解题

本文是实验设计与分析&#xff08;第6版&#xff0c;Montgomery著&#xff0c;傅珏生译) 第5章析因设计引导5.7节思考题5.2 R语言解题。主要涉及方差分析&#xff0c;正态假设检验&#xff0c;残差分析&#xff0c;交互作用。 dataframe<-data.frame( Surfacec(74,64,60,92…

无人机报警器探测模块技术解析!

一、运行方式 1. 频谱监测与信号识别 全频段扫描&#xff1a;模块实时扫描900MHz、1.5GHz、2.4GHz、5.8GHz等无人机常用频段&#xff0c;覆盖遥控、图传及GPS导航信号。 多路分集技术&#xff1a;采用多传感器阵列&#xff0c;通过信号加权合并提升信噪比&#xff0c;…

从本地到云端:Code App+SSH协议在iPad开发中的性能优化实战

文章目录 前言1. 在iPad下载Code APP2.安装cpolar内网穿透2.1 cpolar 安装2.2 创建TCP隧道 3. iPad远程vscode4. 配置固定TCP端口地址4.1 保留固定TCP地址4.2 配置固定的TCP端口地址4.3 使用固定TCP地址远程vscode 前言 在春日的公园长椅上&#xff0c;当编程灵感突然闪现时&a…

【QQ音乐】sign签名| data参数加密 | AES-GCM加密 | webpack实战 (下)

1.目标 网址&#xff1a;https://y.qq.com/n/ryqq/toplist/26 我们知道了 sign P(n.data)&#xff0c;其中n.data是明文的请求参数 2.webpack生成data加密参数 那么 L(n.data)就是密文的请求参数。返回一个Promise {<pending>}&#xff0c;所以L(n.data) 是一个异步函数…

2025年05月29日Github流行趋势

项目名称&#xff1a;agenticSeek 项目地址url&#xff1a;https://github.com/Fosowl/agenticSeek项目语言&#xff1a;Python历史star数&#xff1a;11898今日star数&#xff1a;2379项目维护者&#xff1a;Fosowl, steveh8758, klimentij, ganeshnikhil, apps/copilot-pull-…

Python自动化之selenium语句——打开、关闭浏览器和网页

目录 一、打开谷歌浏览器 1.双击桌面的Pycharm工具 2.新建Python文件&#xff0c;输入文件名 3.新建的Python文件如下 4.安装selenium库 5.导入包 二、打开网页、关闭网页、关闭浏览器 1.导入增加一个时间包 2.使用函数打包之前写的浏览器的配置 3.调用 4.打开百度网…

实时操作系统在脑机接口中的技术平衡:满足实时性与 AI 算力需求

在当今医疗科技蓬勃发展的时代&#xff0c;实时操作系统&#xff08;RTOS&#xff09;正逐渐成为医疗设备领域中不可或缺的关键技术。随着脑机接口等前沿技术的飞速发展&#xff0c;对实时性和算力的双重需求达到了前所未有的高度&#xff0c;而 RTOS 在其中扮演着至关重要的角…

循环神经网络(RNN)模型

一、概述 循环神经网络&#xff08;Recurrent Neural Network, RNN&#xff09;是一种专门设计用于处理序列数据&#xff08;如文本、语音、时间序列等&#xff09;的神经网络模型。其核心思想是通过引入时间上的循环连接&#xff0c;使网络能够保留历史信息并影响当前输出。 …