Oracle创建监控账户

 

设计一套SAP监控系统

 

 

有很多Oracle服务器,需要天天查看TableSpace,比较麻烦了。
为了把事情变成简单化,我在多个Oracle数据上建立统一的检查数据库账户,并且账户只能访问特定的几个视图(需要查询的sql已生成视图),具体做法如下:


root>sqlplus / as sysdba

用DBA的权限进入数据库,需要创建一个账户
http://blog.youkuaiyun.com/bayaci/archive/2009/10/12/4659439.aspx


SQL>create user dbmonitor identified by "ty_sd_s";
给账户授权
SQL>grant connect,resource to dbmonitor;

 
此账户执行的脚本转换成视图
SQL>  drop view vstablespace;

 

SQL> create view  vstablespace as 
(
select
    a.tablespace_name "TABLESPACE",
     sum(a.bytes)/1024/1024 SUM ,
    sum(b.bytes)/1024/1024 FREE ,
    sum(b.bytes)/sum(a.bytes)*100  PRECENTFREE
from
    dba_data_files
    a,dba_free_space b
where
    a.file_id=b.file_id
group by a.tablespace_name
)
;


给用户赋予select试图的权限
SQL>grant select on vstablespace to dbmonitor ;


如此下来,这个用户只能查看此数图,不能改动其他的,就可以保证数据库的安全了


退出,再用新建的oracle账户登录
root>sqlplus dbmonitor/"ty_sd_s" as sysdba;

进入之后查看用户所赋予的权限
SQL>select * from user_tab_privs;


从这里看到只用新建视图的权限

SQL>select * from sys.vstablespace ;


<think>嗯,用户问的是如何在Oracle数据库创建只读用户账户。我需要根据之前提供的引用内容来整理步骤。首先,记得引用里有提到创建用户并设置密码,还有分配只读权限的部分。比如引用[1]详细说了创建用户和分配只读权限的步骤,可能这是关键。首先,应该分步骤来回答。第一步是创建用户,设置密码。这里要注意密码的复杂性要求,比如Oracle可能要求有大小写字母、数字和特殊字符,引用[1]提到了这点。所以需要给出创建用户的SQL语句,比如CREATE USER语句,然后设置密码。接下来是授予登录权限,用户至少要有CREATESESSION才能连接数据库。所以第二步应该是GRANT CREATESESSION给用户。然后是分配只读权限。这里可能需要两种方式:一种是直接授予SELECT权限在特定表上,另一种是创建角色来管理。引用[1]和引用[3]都有提到授予SELECT和创建同义词的部分。比如引用[3]提到了创建同义词的脚本,这可能是在用户需要访问其他模式下的表时需要的。所以步骤可能需要包括授予SELECT权限,可能需要使用角色,或者直接授权。 另外,如果用户需要访问其他模式的对象,可能需要同义词或者直接授权。比如,如果表属于另一个用户,比如SCOTT.EMP,那么需要先授予SCOTT用户给新用户SELECT权限,然后创建同义词,或者使用角色来集中管理。还需要注意权限的传递问题,比如WITHGRANTOPTION是否必要,但只读用户一般不需要这个。另外,密码的问题,比如特殊字符可能需要用双引号括起来,引用[1]和引用[4]提到了密码复杂性和处理特殊字符的问题。还有,可能出现的常见问题,比如用户无法登录,权限不足,或者同义词不存在等。需要检查权限是否正确授予,同义词是否创建,以及用户是否有权限访问那些对象。 总结一下,步骤应该是:创建用户、授予连接权限、授予SELECT权限(直接或通过角色)、处理同义词(如果需要)、测试权限。此外,注意事项包括密码复杂性、跨模式访问的处理,以及常见问题的解决方法。 可能用户还希望有一个具体的例子,比如用SCOTT.EMP表做示例,这样更清晰。同时,生成相关问题的时候,可以考虑权限管理、密码策略、权限回收等,这些都是相关的。现在需要确保回答结构清晰,分步骤,每个步骤有对应的SQL示例,并且注意事项部分涵盖常见问题。同时,引用对应的引用文献,比如步骤中的创建用户和分配权限参考引用[1],同义词部分参考引用[3],密码问题参考引用[1]和[4]。</think>### 逐步说明:在 Oracle 数据库创建只读用户账户 #### 1. **创建新用户并设置密码** ```sql CREATE USER readonly_user IDENTIFIED BY "Readonly_123#"; ``` - **注意**:密码需满足复杂度要求(包含大小写字母、数字和特殊符号)[^1]。若密码含特殊字符(如`@`),需用双引号包裹。 #### 2. **授予基本登录权限** ```sql GRANT CREATE SESSION TO readonly_user; ``` - 此权限允许用户连接到数据库实例[^1]。 #### 3. **分配只读权限(两种方法)** **方法一:直接授予特定表的 SELECT 权限** ```sql GRANT SELECT ON SCOTT.EMP TO readonly_user; ``` - 将`SCOTT.EMP`替换为目标表名,需先确保目标表的所有者(如`SCOTT`)已授权。 **方法二:通过角色集中管理** ```sql CREATE ROLE readonly_role; GRANT SELECT ON SCOTT.EMP TO readonly_role; GRANT readonly_role TO readonly_user; ``` - 通过角色可批量管理多个表的权限[^1]。 #### 4. **处理跨模式访问(可选)** - **创建同义词**(若用户需直接访问其他模式下的表): ```sql CREATE SYNONYM EMP FOR SCOTT.EMP; ``` - 需先授予`CREATE SYNONYM`权限[^3]。 - **授权原表所有者**: ```sql GRANT SELECT ON EMP TO readonly_user; ``` #### 5. **验证权限** ```sql CONNECT readonly_user/Readonly_123#; SELECT * FROM SCOTT.EMP; -- 或通过同义词访问 ``` --- ### 注意事项 1. **密码复杂性**:若报错`ORA-00988: invalid or missing password`,检查密码是否满足复杂度或含特殊字符需转义[^1][^4]。 2. **跨模式权限**:若用户无法查询表,检查是否遗漏`GRANT SELECT`或同义词未正确创建[^3]。 3. **权限回收**:使用`REVOKE SELECT ON SCOTT.EMP FROM readonly_user;`可撤销权限。 --- ### 相关问题 1. 如何批量授予多张表的只读权限? 2. Oracle 密码策略如何修改以适应简单密码? 3. 只读用户能否执行存储过程?如何控制? 4. 如何监控只读用户的查询操作? --- [^1]: 创建用户需遵循密码策略,权限需通过角色或直接授权实现。 [^3]: 跨模式访问需依赖同义词或显式授权。 [^4]: 特殊字符需用双引号包裹以避免语法错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值