当前位置: 首页 > article >正文

【Oracle】DCL语言

在这里插入图片描述

个人主页: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的必备技能,也是每个数据库开发者都应该了解的重要知识。记住,权限管理永远是"宁可严格一点,也不要随意放松",因为数据安全无小事!

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

在这里插入图片描述

相关文章:

【Oracle】DCL语言

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. DCL概述1.1 什么是DCL&#xff1f;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…...

MySQL强化关键_017_索引

目 录 一、概述 二、索引 1.主键索引 2.唯一索引 3.查看索引 4.添加索引 &#xff08;1&#xff09;建表时添加 &#xff08;2&#xff09;建表后添加 5.删除索引 三、树 1.二叉树 2.红黑树 3.B树 4.B树 &#xff08;1&#xff09;为什么 MySQL 选择B树作为索引…...

stm32——SPI协议

stm32——SPI协议 STM32的SPI&#xff08;Serial Peripheral Interface&#xff0c;串行外设接口&#xff09;协议是一种高速、全双工、同步的串行通信协议&#xff0c;广泛评估微控制器与各种外设&#xff08;如传感器、器件、显示器、模块等&#xff09;之间的数据传输。STM3…...

Linux 下如何查看进程的资源限制信息?

简介 Linux 上的 cat /proc/$pid/limits 命令提供有关特定进程的资源限制的信息&#xff0c;其中 $pid 是相关进程的进程 ID &#xff08;pid&#xff09;。该文件是 /proc 文件系统的一部分&#xff0c;该文件系统是一个虚拟文件系统&#xff0c;提供有关进程和系统资源的信息…...

【备忘】php命令行异步执行超长时间任务

环境说明&#xff1a; 操作系统&#xff1a;windows10 IDE&#xff1a;phpstorm 开发语言&#xff1a;php7.4 框架&#xff1a;thinkphp5.1 测试环境&#xff1a;linuxwindows均测试通过。 初级方法&#xff1a; function longRunningTask() {$root_path Tools::get_ro…...

对于ARM开发各种手册的分类

手册名称全称主要内容适用范围是不是讲SysTick&#xff1f;Cortex-M3 Technical Reference Manual (TRM)Cortex-M3 Technical Reference Manual描述 Cortex-M3内核架构&#xff0c;如寄存器模型、总线接口、指令集、异常模型只适合 Cortex-M3 内核&#xff0c;不含外设❌ 没有C…...

java开发中#和$的区别

在Spring框架中&#xff0c;$ 和 # 是两种不同的表达式前缀&#xff0c;用于从不同的来源获取值或执行计算。下面详细解释它们的区别和用法&#xff1a; 一、$ 占位符&#xff08;Property Placeholder&#xff09; 1. 作用 从配置文件&#xff08;如 application.propertie…...

在 RK3588 上通过 VSCode 远程开发配置指南

在 RK3588 上通过 VSCode 远程开发配置指南 RK3588 设备本身不具备可视化编程环境&#xff0c;但可以通过 VSCode 的 Remote - SSH 插件 实现远程代码编写与调试。以下是完整的配置流程。 一、连接 RK3588 1. 安装 Debian 系统 先在 RK3588 上安装 Debian 操作系统。 2. 安…...

OpenHarmony标准系统-HDF框架之音频驱动开发

文章目录 引言OpenHarmony音频概述OpenHarmony音频框图HDF音频驱动框架概述HDF音频驱动框图HDF音频驱动框架分析之音频设备驱动HDF音频驱动框架分析之supportlibs实现HDF音频驱动框架分析之hdi-passthrough实现HDF音频驱动框架分析之hdi-bindev实现HDF音频驱动加载过程HDF音频驱…...

HTML Day03

Day03 0. 引言1. CSS1.1 CSS的3种使用方法1.2 内联样式1.3 内部样式表1.4 外部CSS文件 2. 图像3. 表格3.1单元格间距和单元格边框 4. 列表4.1 有序表格的不同类型4.2 不同类型的无序表格4.3 嵌套列表 5. 区块6. 布局6.1 div布局6.2 表格布局 0. 引言 HELLO ^ _ ^大家好&#xf…...

篇章六 数据结构——链表(二)

目录 1. LinkedList的模拟实现 1.1 双向链表结构图​编辑 1.2 三个简单方法的实现 1.3 头插法 1.4 尾插法 1.5 中间插入 1.6 删除 key 1.7 删除所有key 1.8 clear 2.LinkedList的使用 2.1 什么是LinkedList 5.2 LinkedList的使用 1.LinkedList的构造 2. LinkedList的…...

Python60日基础学习打卡Day39

昨天我们介绍了图像数据的格式以及模型定义的过程&#xff0c;发现和之前结构化数据的略有不同&#xff0c;主要差异体现在2处 模型定义的时候需要展平图像由于数据过大&#xff0c;需要将数据集进行分批次处理&#xff0c;这往往涉及到了dataset和dataloader来规范代码的组织…...

吴恩达MCP课程(3):mcp_chatbot

原课程代码是用Anthropic写的&#xff0c;下面代码是用OpenAI改写的&#xff0c;模型则用阿里巴巴的模型做测试 .env 文件为&#xff1a; OPENAI_API_KEYsk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx OPENAI_API_BASEhttps://dashscope.aliyuncs.com/compatible-mode…...

MySQL访问控制与账号管理:原理、技术与最佳实践

MySQL的安全体系建立在精细的访问控制和账号管理机制上。本文基于MySQL 9.3官方文档&#xff0c;深入解析其核心原理、关键技术、实用技巧和行业最佳实践。 一、访问控制核心原理&#xff1a;双重验证机制 连接验证 (Connection Verification) 客户端发起连接时&#xff0c;MyS…...

AWS 创建VPC 并且添加权限控制

AWS 创建VPC 并且添加权限控制 以下是完整的从0到1在AWS中创建VPC并配置权限的步骤&#xff08;包含网络配置、安全组权限和实例访问&#xff09;&#xff1a; 1. 创建VPC 步骤&#xff1a; 登录AWS控制台 访问 AWS VPC控制台&#xff0c;点击 创建VPC。 配置基础信息 名称…...

langchain学习 01

dotenv库&#xff1a;可以从.env文件中加载配置信息。 from dotenv import load_dotenv # 加载函数&#xff0c;之后调用这个函数&#xff0c;即可获取配置环境.env里面的内容&#xff1a; deep_seek_api_key<api_key>getpass库&#xff1a;从终端输入password性质的内…...

【清晰教程】查看和修改Git配置情况

目录 查看安装版本 查看特定配置 查看全局配置 查看本地仓库配置 设置或修改配置 查看安装版本 打开命令行工具&#xff0c;通过version命令检查Git版本号。 git --version 如果显示出 Git 的版本号&#xff0c;说明 Git 已经成功安装。 查看特定配置 如果想要查看特定…...

JAVA 常用 API 正则表达式

1 正则表达式作用 作用一&#xff1a;校验字符串是否满足规则作用二&#xff1a;在一段文本中查找满足要求的内容 2 正则表达式规则 2.1 字符类 package com.bjpowernode.test14;public class RegexDemo1 {public static void main(String[] args) {//public boolean matche…...

光电设计大赛智能车激光对抗方案分享:低成本高效备赛攻略

一、赛题核心难点与备赛痛点解析 全国大学生光电设计竞赛的 “智能车激光对抗” 赛题&#xff0c;要求参赛队伍设计具备激光对抗功能的智能小车&#xff0c;需实现光电避障、目标识别、轨迹规划及激光精准打击等核心功能。从历年参赛情况看&#xff0c;选手普遍面临三大挑战&a…...

Python实现P-PSO优化算法优化BP神经网络回归模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档&#xff09;&#xff0c;如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在当今数据驱动的时代&#xff0c;回归分析作为预测和建模的重要工具&#xff0c;在科学研究和工业应用中占据着重要…...

Microsoft的在word中选择文档中的所有表格进行字体和格式的调整时的解决方案

找到宏 创建 并粘贴 使用 Sub 全选所有表格() Dim t As Table an MsgBox("即将选择选区内所有表格&#xff0c;若无选区&#xff0c;则选择全文表格。", vbYesNo, "reboot提醒您!") If an - 6 Then Exit Sub Set rg IIf(Selection.Type wdSelectionIP, …...

C++23:关键特性与最新进展深度解析

文章目录 范围的新功能与增强元组的优化与新特性字符与字符串的转义表示优化std::thread::id的改进与扩展栈踪迹的格式化支持结论 C23作为C标准的最新版本&#xff0c;带来了许多令人瞩目的改进和新特性。从新的范围和元组功能到对字符和字符串转义表示的优化&#xff0c;再到 …...

Rust并发编程实践指南

Rust并发编程实践指南 一、Rust并发编程哲学 mindmaproot((Rust并发))Ownership System▶ 移动语义▶ 借用规则Type Safety▶ Send Trait▶ Sync TraitZero-Cost Abstraction▶ 无运行时开销▶ 编译期检查Fearless Concurrency▶ 数据竞争预防▶ 死锁检测工具二、核心并发模型…...

Kubernetes资源申请沾满但是实际的资源占用并不多,是怎么回事?

Kubernetes资源申请沾满但是实际的资源占用并不多是Kubernetes资源管理中的一个常见误解。 K8s资源管理机制 资源请求(Requests) vs 实际使用量 从你的截图可以看到&#xff1a; K8s节点资源状态&#xff08;第一张图&#xff09;&#xff1a; CPU请求量&#xff1a;13795…...

鲲鹏Arm+麒麟V10 K8s 离线部署教程

针对鲲鹏 CPU 麒麟 V10 的离线环境&#xff0c;手把手教你从环境准备到应用上线&#xff0c;所有依赖包提前打包好&#xff0c;步骤写成傻瓜式操作指南。 一、环境规划# 准备至少两台机器。 架构OS作用Arm64任意&#xff0c;Mac 也可以下载离线包Arm64麒麟 V10单机部署 K8s…...

PGSQL结合linux cron定期执行vacuum_full_analyze命令

‌VACUUM FULL ANALYZE 详解‌ 一、核心功能 ‌空间回收与重组‌ 完全重写表数据文件&#xff0c;将碎片化的存储空间合并并返还操作系统&#xff08;普通 VACUUM 仅标记空间可重用&#xff09;。彻底清理死元组&#xff08;已删除或更新的旧数据行&#xff09;&#xff0c;解…...

php 中使用MQTT

MQTT 是一种基于发布/订阅模式的 轻量级物联网消息传输协议 &#xff0c;可以用极少的代码和带宽为联网设备提供实时可靠的消息服务&#xff0c;它广泛应用于物联网、移动互联网、智能硬件、车联网、电力能源等行业。 本文主要介绍如何在 PHP项目中使用composer require php-m…...

C#定时器深度对比:System.Timers.Timer vs System.Threading.Timer性能实测与选型指南

本文通过真实基准测试揭秘两种常用定时器的性能差异&#xff0c;助你做出最佳选择 一、C#定时器全景概览 在C#生态中&#xff0c;不同定时器适用于不同场景。以下是主流定时器的核心特性对比&#xff1a; 定时器类型命名空间适用场景触发线程精度内存开销依赖框架System.Wind…...

go的select多路复用

传统的方法在遍历管道时&#xff0c;如果不关闭会阻塞而导致 deadlock &#xff0c;在实际开发中&#xff0c;可能我们不好确定什么关闭该管道。使用select来获取channel里面的数据的时候不需要关闭channel 你也许会写出如下代码使用遍历的方式来实现&#xff1a; for { //…...

深度理解与剖析:前端声明式组件系统

好的&#xff0c;我将根据您的要求&#xff0c;首先进行深度理解与多维思考&#xff0c;然后形成一个全面且有深度的综合性总结&#xff0c;其中包含针对初学者的简洁解释。 1. 核心概念解析&#xff1a;声明式与命令式编程 在深入理解前端的声明式组件系统之前&#xff0c;我…...