1. 数据库安全概述
Oracle数据库安全管理是数据库管理的重要组成部分,它涉及到用户管理、角色管理、权限管理、审计管理、密码策略和数据加密等多个方面。有效的安全管理可以保护数据库免受未授权访问和恶意攻击,确保数据的完整性和机密性。更多学习教程www.fgedu.net.cn
2. 用户管理
用户管理是数据库安全的基础,包括创建用户、修改用户属性、锁定和解锁用户等操作。
CREATE USER test_user IDENTIFIED BY “TestPassword123”;User created.
— 修改用户密码
ALTER USER test_user IDENTIFIED BY “NewPassword456”;User altered.
— 锁定用户
ALTER USER test_user ACCOUNT LOCK;User altered.
— 解锁用户
ALTER USER test_user ACCOUNT UNLOCK;User altered.
— 删除用户
DROP USER test_user CASCADE;User dropped.
— 查看用户信息
SELECT username, account_status, created, lock_date
FROM dba_users
WHERE username = ‘TEST_USER’;USERNAME ACCOUNT_STATUS CREATED LOCK_DATE
———- ——————————– ———– ———–
TEST_USER OPEN 26-JAN-26
3. 角色管理
角色是一组权限的集合,使用角色可以更方便地管理用户权限。Oracle提供了许多预定义角色,同时也允许创建自定义角色。
CREATE ROLE sales_role;Role created.
— 为角色授予权限
GRANT SELECT, INSERT, UPDATE ON employees TO sales_role;GRANT SELECT ON departments TO sales_role;Grant succeeded.
Grant succeeded.
— 将角色授予用户
GRANT sales_role TO test_user;Grant succeeded.
— 查看角色权限
SELECT grantee, table_name, privilege
FROM dba_tab_privs
WHERE grantee = ‘SALES_ROLE’;GRANTEE TABLE_NAME PRIVILEGE
———- —————————— ———-
SALES_ROLE DEPARTMENTS SELECT
SALES_ROLE EMPLOYEES INSERT
SALES_ROLE EMPLOYEES SELECT
SALES_ROLE EMPLOYEES UPDATE
— 查看用户拥有的角色
SELECT grantee, granted_role, admin_option
FROM dba_role_privs
WHERE grantee = ‘TEST_USER’;GRANTEE GRANTED_ROLE ADM
———- —————————— —
TEST_USER SALES_ROLE NO
— 删除角色
DROP ROLE sales_role;Role dropped.
4. 权限管理
权限管理是数据库安全的核心,包括系统权限和对象权限的管理。系统权限允许用户执行特定的系统级操作,对象权限允许用户访问特定的数据库对象。
GRANT CREATE SESSION TO test_user;GRANT CREATE TABLE TO test_user;Grant succeeded.
Grant succeeded.
— 授予对象权限
GRANT SELECT, INSERT, UPDATE, DELETE ON employees TO test_user;Grant succeeded.
— 查看用户的系统权限
SELECT grantee, privilege
FROM dba_sys_privs
WHERE grantee = ‘TEST_USER’;GRANTEE PRIVILEGE
———- ——————–
TEST_USER CREATE TABLE
TEST_USER CREATE SESSION
— 查看用户的对象权限
SELECT grantee, owner, table_name, privilege
FROM dba_tab_privs
WHERE grantee = ‘TEST_USER’;GRANTEE OWNER TABLE_NAME PRIVILEGE
———- ———- —————————— ———-
TEST_USER HR EMPLOYEES DELETE
TEST_USER HR EMPLOYEES INSERT
TEST_USER HR EMPLOYEES SELECT
TEST_USER HR EMPLOYEES UPDATE
— 撤销权限
REVOKE DELETE ON employees FROM test_user;Revoke succeeded.
5. 审计管理
审计管理用于跟踪和记录数据库活动,包括用户登录、权限变更、数据访问等操作。通过审计,可以发现潜在的安全问题和异常行为。
ALTER SYSTEM SET audit_trail = ‘DB’ SCOPE=SPFILE;System altered.
— 重启数据库使审计设置生效
SHUTDOWN IMMEDIATE;STARTUP;– 审计用户登录和注销
AUDIT SESSION;Audit succeeded.
— 审计表的访问
AUDIT SELECT, INSERT, UPDATE, DELETE ON employees;Audit succeeded.
— 查看审计记录
SELECT username, action_name, obj_name, timestamp
FROM dba_audit_trail
WHERE obj_name = ‘EMPLOYEES’
ORDER BY timestamp DESC;USERNAME ACTION_NAME OBJ_NAME TIMESTAMP
———- ——————– —————————- ———–
TEST_USER SELECT EMPLOYEES 26-JAN-26
TEST_USER INSERT EMPLOYEES 26-JAN-26
— 停止审计
NOAUDIT SESSION;NOAUDIT SELECT, INSERT, UPDATE, DELETE ON employees;Noaudit succeeded.
Noaudit succeeded.
6. 密码策略
密码策略用于确保用户密码的安全性,包括密码复杂度要求、密码过期时间、密码重用限制等。
SELECT profile, resource_name, limit
FROM dba_profiles
WHERE resource_type = ‘PASSWORD’;PROFILE RESOURCE_NAME LIMIT
—————————— ——————————– ——————–
DEFAULT PASSWORD_LIFE_TIME UNLIMITED
DEFAULT PASSWORD_GRACE_TIME 7
DEFAULT PASSWORD_REUSE_TIME UNLIMITED
DEFAULT PASSWORD_REUSE_MAX UNLIMITED
DEFAULT PASSWORD_VERIFY_FUNCTION NULL
DEFAULT PASSWORD_LOCK_TIME 1
DEFAULT PASSWORD_FAILED_LOGIN_ATTEMPTS 10
— 创建密码验证函数
CREATE OR REPLACE FUNCTION verify_password(
username VARCHAR2,
password VARCHAR2,
old_password VARCHAR2
) RETURN BOOLEAN AS
len NUMBER;digits NUMBER;letters NUMBER;specials NUMBER;BEGIN
— 密码长度至少8位
len := LENGTH(password);IF len < 8 THEN
RETURN FALSE;END IF;-- 至少包含一个数字
digits := REGEXP_COUNT(password, '[0-9]');IF digits < 1 THEN
RETURN FALSE;END IF;-- 至少包含一个字母
letters := REGEXP_COUNT(password, '[A-Za-z]');IF letters < 1 THEN
RETURN FALSE;END IF;-- 至少包含一个特殊字符
specials := REGEXP_COUNT(password, '[^A-Za-z0-9]');IF specials < 1 THEN
RETURN FALSE;END IF;RETURN TRUE;END;/Function created.
-- 修改密码策略
ALTER PROFILE DEFAULT LIMIT
PASSWORD_LIFE_TIME 90
PASSWORD_GRACE_TIME 7
PASSWORD_REUSE_TIME 365
PASSWORD_REUSE_MAX 5
PASSWORD_VERIFY_FUNCTION verify_password
PASSWORD_LOCK_TIME 1
PASSWORD_FAILED_LOGIN_ATTEMPTS 5;Profile altered.
-- 测试密码策略
ALTER USER test_user IDENTIFIED BY "weak";-- 会报错:ORA-28003: password verification for the specified password failed
ALTER USER test_user IDENTIFIED BY "StrongPassword123!";-- 成功
User altered.
7. 数据加密
数据加密用于保护敏感数据,防止数据在存储和传输过程中被窃取。Oracle提供了透明数据加密(TDE)和网络加密等功能。
— 1. 创建加密钱包
ALTER SYSTEM SET encryption_key = ‘password’ SCOPE=SPFILE;System altered.
— 2. 重启数据库
SHUTDOWN IMMEDIATE;STARTUP;– 3. 创建加密表空间
CREATE TABLESPACE encrypted_ts
DATAFILE ‘/u01/app/oracle/oradata/ORCL/encrypted_ts01.dbf’
SIZE 100M
ENCRYPTION USING ‘AES256’ DEFAULT STORAGE (ENCRYPT);Tablespace created.
— 4. 在加密表空间中创建表
CREATE TABLE sensitive_data (
id NUMBER(6),
name VARCHAR2(50),
credit_card VARCHAR2(16)
)
TABLESPACE encrypted_ts;Table created.
— 5. 插入数据
INSERT INTO sensitive_data VALUES (1, ‘John Doe’, ‘1234567890123456’);COMMIT;– 6. 查看数据(数据在存储时已加密,但查询时自动解密)
SELECT * FROM sensitive_data;ID NAME CREDIT_CARD
———- ———- —————-
1 John Doe 1234567890123456
— 启用网络加密
ALTER SYSTEM SET sqlnet.encryption_client = ‘required’ SCOPE=SPFILE;ALTER SYSTEM SET sqlnet.encryption_types_client = ‘(AES256)’ SCOPE=SPFILE;ALTER SYSTEM SET sqlnet.crypto_checksum_client = ‘required’ SCOPE=SPFILE;System altered.
System altered.
System altered.
— 重启数据库
SHUTDOWN IMMEDIATE;STARTUP;
8. 最佳实践
1. 遵循最小权限原则,只授予用户必要的权限
2. 定期审查用户权限,及时撤销不必要的权限
3. 使用角色管理权限,简化权限管理
4. 实施强密码策略,确保密码安全性
5. 启用审计功能,跟踪数据库活动
6. 使用透明数据加密保护敏感数据
7. 启用网络加密,保护数据传输安全
8. 定期备份数据库,确保数据可恢复性
9. 定期更新Oracle数据库补丁,修复安全漏洞
10. 制定数据库安全策略,定期进行安全审计
更多视频教程www.fgedu.net.cn
学习交流加群风哥微信: itpux-com
学习交流加群风哥QQ113257174
更多学习教程公众号风哥教程itpux_com
from oracle:www.itpux.com
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
