NHibernate & oracle: ORA-01045

原有的一个CRM系统,使用的是 oracle, NHibernate 在链接数据库时,采用了 oracle 的该应用的DBA作为链接用户,这对系统的安全非常非常的不好。

作为调整,为该应用创建了一个新的客户端用户,使其拥有最小权限。在这种复合权限的应用中,会产生很多的问题。在这里我们逐一列举。

ORACLE版本: 11g1

NHibernate: 2.1.2.4

.Net: 2.x/3.x/4.x

1. 创建应用用户角色

create role app_user_role not identified;

///对象的权限列表很长,此处简写了

grant select/delete/insert on app_dba.tables/sequence/function/procedure to app_user_role;

///

grant connect to app_user_role;

grant create session to app_user_role;


2. 创建应用用户,并附角色

create user app_user identified by 'app user password here'

default tablespace XXXX
temporary tablespace XXXXXX
profile default
account unlock;

grant app_user_role to app_user;


3. 尝试 app_user 登录

C:\Users\Administrator>sqlplus app_user@appdb

SQL*Plus: Release 11.1.0.6.0 - Production on 星期五 9月 2 12:18:48 2011

Copyright (c) 1982, 2007, Oracle.  All rights reserved.


输入口令:
ERROR:
ORA-01045: user APP_USER lacks CREATE SESSION privilege; logon denied

[说明]

上面的错误说明,connect, create session 被付给了角色 app_user_role, 而 app_user并没能从角色中获得这两个权限,所以我们需要重新设定权限:

revoke connect from app_user_role;
grant create session to app_user;

从命令行上,app_user 现在已经可以成功登录了.

为什么把权限 create session 赋给 app_user_role,然后把app_user_role再赋给app_user,却不起作用呢?这个问题可以参考 4. 启动应用程序.... ,他们是属于同一类型的问题:app_user_role必须作为用户的默认角色。

4. 启动应用程序,却得到了 ORA-00942: 表或视图不存在 的错误

可以在 sqlplus 中重现此问题:

SQL> connect app_user@appdb

SQL> select table_name from all_tables where owner='APP_ADMIN';

TABLE_NAME
------------------------------

SQL>

我们看到,app_user 确实看不到 app_admin 的表,这是怎么回事呢? 问题在 app_user_role 付给 app_user 后,还缺少一步:

alter user app_user default role app_user_role;
让 app_user 的默认权限角色是 app_user_role 很关键

我并不记得oracle8/9中是否必须这样设置了(那是很久以前的事了)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值