危险的Alter User权限

本文介绍如何通过创建触发器来限制拥有ALTERUSER权限的用户,禁止他们修改SYSDBA用户的密码。通过具体实例演示了如何实现这一功能,并解释了触发器的作用和使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Alter user 是Oracle数据库系统中十分powerful的权限,可以修改一般用户的属性例如默认表空间、profile等,甚至于可以修改SYS用户的密码。所以该权限是十分危险的, 在赋权时要十分小心。 针对现有用户已经拥有ALTER USER权限的,又不能revoke回来的,可以考虑使用如下触发器的方法,禁止任何拥有Alter user权限的用户修改SYSDBA的密码:    

SQL> grant alter user to alteruser;

Grant succeeded.

SQL> select * from DBA_SYS_PRIVS where grantee like 'ALTER%USER%';

GRANTEE              PRIVILEGE                 ADMIN_
-------------------- ------------------------- ------
ALTERUSER            UNLIMITED TABLESPACE      NO
ALTERUSER            ALTER USER                NO

SQL> conn  / as sysdba
Connected.

SQL> CREATE or REPLACE TRIGGER prohibit_alter_SYSTEM_SYS_pass 
          BEFORE ALTER on ALTERUSER.schema
          BEGIN
               IF ora_sysevent='ALTER' and ora_dict_obj_type = 'USER' and
                  (ora_dict_obj_name = 'SYSTEM' or ora_dict_obj_name = 'SYS')
               THEN
                  RAISE_APPLICATION_ERROR(-20003,
                             'You are not allowed to alter SYSTEM/SYS user.');
               END IF;
          END;
          /

Trigger created.
    使用范例:    
SQL> conn alteruser/oracle
Connected.
SQL> alter user system identified by manager;
alter user system identified by manager
                                *
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 1
ORA-20003: You are not allowed to alter SYSTEM/SYS user.
ORA-06512: at line 5

SQL>  alter user sys identified by manager;
 alter user sys identified by manager
                              *
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 1
ORA-20003: You are not allowed to alter SYSTEM/SYS user.
ORA-06512: at line 5

SQL>
SQL>  alter user dbsnmp identified by dbsnmp;

User altered.
### 修改数据库上下文中用户的相关操作 在数据库环境中,`ALTER USER` 是用于修改现有用户的属性或特权的关键命令。以下是有关如何通过 `ALTER USER` 命令来调整用户权限或属性的具体说明: #### 语法结构 `ALTER USER` 的基本语法如下所示: ```sql ALTER USER username { IDENTIFIED BY new_password | DEFAULT TABLESPACE tablespace_name | QUOTA { size } ON tablespace_name | ACCOUNT { LOCK | UNLOCK } }; ``` - **IDENTIFIED BY**: 更改用户的密码[^1]。 - **DEFAULT TABLESPACE**: 设置默认表空间[^2]。 - **QUOTA**: 定义用户在一个特定表空间中的配额大小[^3]。 - **ACCOUNT LOCK/UNLOCK**: 锁定或解锁账户。 #### 示例代码 以下是一些常见的 `ALTER USER` 使用场景及其对应的 SQL 实现: ##### 场景一:更改用户密码 如果需要更新某个用户的登录凭证,则可以执行以下语句: ```sql ALTER USER hr IDENTIFIED BY NewPassword123; ``` ##### 场景二:设置默认表空间 当希望指定某位用户的默认存储区域时,可采用此方法: ```sql ALTER USER hr DEFAULT TABLESPACE users; ``` ##### 场景三:管理磁盘限额 为了控制每位成员在其专属分区内的资源消耗量级,可通过设定额度达成目的: ```sql ALTER USER hr QUOTA 50M ON users; ``` ##### 场景四:启用或禁用账号访问状态 对于不再活跃的服务角色或者临时冻结某些个人资料的需求而言,锁定机制非常实用;而重新激活只需解除先前施加的限制即可完成恢复工作流程。 ```sql -- 锁定账户 ALTER USER hr ACCOUNT LOCK; -- 解锁账户 ALTER USER hr ACCOUNT UNLOCK; ``` 以上每一步骤均需确保具备相应管理员级别权限才能顺利实施,并且建议每次变动前做好充分测试验证以保障业务连续性和数据安全性[^4]。 此外,在涉及多租户架构下的插件化数据库实例维护过程中(如 Oracle PDB),可能还需要额外注意启动与结束应用生命周期的操作规范,即利用 `ALTER PLUGGABLE DATABASE ... BEGIN` 和 `END` 来包裹整个过程以防意外中断带来的风险影响正常运行环境稳定度[^5]。 最后值得注意的是,虽然这里讨论的重点围绕关系型数据库管理系统(RDBMS),但对于 NoSQL 类型的数据平台比如 MySQL 初始化配置阶段同样存在类似的参数定义环节,只是表现形式有所区别而已[^6]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值