首页 > 数据库 > Oracle > 实操Oracle 23C中认证和访问控制
认证增强:为特权用户启用多因素认证(密码+OTP)。
访问控制:
通过角色分离限制用户权限(如
HR_ROLE、
FIN_ROLE)。
使用行级安全策略(RLS)实现数据隔离(例如,员工仅能查看本部门数据)。
-- 创建特权用户`admin_mfa`并启用MFA CREATE USER admin_mfa IDENTIFIED BY "StrongPass123#" DEFAULT TABLESPACE users QUOTA UNLIMITED ON users; -- 配置OTP认证(需Oracle Advanced Security选件支持) BEGIN DBMS_MFA.ENABLE_OTP( username => 'ADMIN_MFA', issuer => 'CorporateDB' ); END; /
-- 连接示例(需在客户端支持OTP输入): CONNECT admin_mfa/StrongPass123#@db23c:1521/ORCL TOTP=654321
步骤 2:创建角色与用户,实施最小权限原则
-- 创建HR角色(仅允许访问员工表) CREATE ROLE hr_role; GRANT SELECT, UPDATE ON hr.employees TO hr_role; -- 创建财务角色(仅允许访问薪资表) CREATE ROLE fin_role; GRANT SELECT ON hr.salaries TO fin_role; -- 创建部门经理角色(允许查看本部门员工) CREATE ROLE dept_mgr_role; GRANT hr_role TO dept_mgr_role;
-- 创建HR用户 CREATE USER hr_analyst IDENTIFIED BY "Hr@Secure2023#" DEFAULT TABLESPACE users; GRANT CONNECT, hr_role TO hr_analyst; -- 创建财务用户 CREATE USER fin_clerk IDENTIFIED BY "Fin@Secure2023#" DEFAULT TABLESPACE users; GRANT CONNECT, fin_role TO fin_clerk; -- 创建部门经理用户(部门ID=100) CREATE USER mgr_100 IDENTIFIED BY "Mgr@Secure2023#" DEFAULT TABLESPACE users; GRANT CONNECT, dept_mgr_role TO mgr_100;
-- 创建策略函数
CREATE OR REPLACE FUNCTION hr.dept_access_policy(
schema_name IN VARCHAR2,
table_name IN VARCHAR2
) RETURN VARCHAR2 AS
user_dept_id NUMBER;
BEGIN
-- 获取用户的部门ID(假设存储在`user_dept_mapping`表中)
SELECT dept_id INTO user_dept_id
FROM user_dept_mapping
WHERE username = SYS_CONTEXT('USERENV', 'SESSION_USER');
-- 返回WHERE条件(限制`department_id`等于用户部门ID)
RETURN 'department_id = ' || user_dept_id;
END;
/
employees表BEGIN DBMS_RLS.ADD_POLICY( object_schema => 'hr', object_name => 'employees', policy_name => 'dept_policy', function_schema => 'hr', policy_function => 'dept_access_policy', statement_types => 'SELECT, UPDATE', update_check => TRUE ); END; /
-- 创建映射表
CREATE TABLE user_dept_mapping (
username VARCHAR2(30) PRIMARY KEY,
dept_id NUMBER
);
-- 插入部门经理的部门信息
INSERT INTO user_dept_mapping VALUES ('MGR_100', 100);
COMMIT;
hr_analyst查询所有员工
CONNECT hr_analyst/Hr@Secure2023# SELECT * FROM hr.employees; -- 成功(具有HR_ROLE权限) 4.2 部门经理mgr_100仅能访问本部门数据 CONNECT mgr_100/Mgr@Secure2023# SELECT * FROM hr.employees; -- 仅返回`department_id=100`的员工(RLS策略生效) 4.3 财务用户fin_clerk尝试访问员工表 CONNECT fin_clerk/Fin@Secure2023# SELECT * FROM hr.employees; -- 失败(ORA-00942: 表或视图不存在,因未授予权限)
-- 启用密码复杂性函数 ALTER PROFILE DEFAULT LIMIT PASSWORD_VERIFY_FUNCTION ora12c_strong_verify_function; -- 密码策略规则(示例): -- 最小长度12,包含大小写字母、数字、特殊字符
-- 创建审计策略(审计角色分配) CREATE AUDIT POLICY audit_role_grants ACTIONS GRANT, REVOKE; AUDIT POLICY audit_role_grants;
多因素认证(MFA):
防止密码泄露导致的未授权访问。
需依赖Oracle Advanced Security选件及OTP服务(如RADIUS、Google Authenticator)。
行级安全(RLS):
动态过滤数据,实现“数据隔离”(如按部门、地区)。
策略函数可根据用户属性(如部门、角色)动态生成过滤条件。
角色分离:
HR_ROLE和
FIN_ROLE实现职责分离(SoD)。
用户仅拥有完成工作所需的最小权限。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31547506/viewspace-3079191/ ,如需转载,请注明出处,否则将追究法律责任。