解决方案 »
- 关于数据库数据重复的问题
- 含CLOB字段的表的备份与恢复
- 再线等 PL/SQL
- 请问orcale层次查询中or条件如何优化?
- 如何获取某表的指定字段最大的那条(或那几条)记录
- oracle9刻的盘能用吗?
- 我写的求按某个字段(CHAR型)的排序后的最大一条记录竟然如此麻烦,select * from (select * from tablename order by to_number(field1) d
- wgzhou2008 同学,此处是哥哥姐姐们谈工作的地方,不许胡闹!
- 高分请教: MATERIALIZED VIEW 的使用 ...
- linux上安装oracle报错
- 请问这种查询用SQL语句可以实现么
- PL/SQL Developer和Oracle Developer 2000和Oracle Developer 10g Suite
进行一般操作不要as sysdba登录
要用Normal模式
楼主好像没有弄清楚表和用户之间的关系你用用户A建的表,就属于用于A,如果没有授权给用户B,用用户B是查询不到这个表的. 就会报表或视图不存在..一般在项目中,都会新建个用户,然后把所有的表建在这个用户下..
1.用system登陆的PLSql,创建了表tbTest,查询的时候 SELECT * FROM SYSTEM.TBTEST 可以顺利执行
但SELECT * FROM TBTEST 却报错“表或视图不存在”。为什么会这样? 可以用show user命令,看看当前用户的schema,如果你SYSTEM.TBTEST可以访问,但是TBTEST不能访问是shcmea不同的问题2.还是上面刚建的那个表TBTEST ,我在C#中连接oracle,用的system登陆,查询语句 不管查SYSTEM.TBTEST 还是TBTEST 又都ok了,不会报错,这里连接与上方连接PLSQL有何不同之处,为什么这里两种情况又都可以了?你用C#连接的时候,是用的system做用户名的,所以scheam是SYSTEM,所以都可以连接3.用system登陆的PLSql,新建了个用户yucca, 角色是dba,为何不能查询TBTEST 表?
grant select any table to yucca 之后yucca才有权限查询表 。那我以后每次需要一个新用户都需要这样grant一次吗?这样太麻烦了。 不需要,dba的权限过大,要查询表,可以用select any table的系统权限,或者针对于当个对象的对象权限比如select on SYSTEM.TBTEST, 一般的用户,我们都指定connect, resource这两个角色权限,比如grant connect, resource to newuser;4.用yucca登陆plSQL,creat 了表 tbYucca,在plSQL内查询select * from tbYucca 没问题,但在C#内使用yucca登陆Oracle,执行刚刚的查询语句也会报“表或视图不存在”,这是怎么回事? 还是schema的问题
5.在plSQL内看tbYucca的属性,owner居然是sys,这又是为什么?
你的tbYucca登录的时候,用的是as sysdba的方式,这种方式的schema是 SYS,既是用户SYS6.后来在C#内查询 select count(*) from sys.tbYucca 还是会报错“表或视图不存在 ”
sys的用户需要单独由SYS附对象权限才行。问题总结主要是schema的问题,要不通过shcmea.TBTEST这样的形式反问表,必须是scheam和当前schema一致的情况下,可以通过show user查看当前schema
就如这里为什么schema会不同呢?请高手详解
那用户yucca怎样登陆创建的表才属于他自己呢?
请高手解惑。多谢
总结了以下几点
1.使用自己创建的用户登录时,需要登陆模式为"标准"(nomal),这样创建的表的拥有者就是他自己了。
2.不管哪个用户只要是使用dba方式登录PL/sQL创建的表的拥有者都是sys
3.一般报错“表或视图不存在”,除非这个表或视图真不存在,问题一般是权限的问题。把用户的权限之类的理吧清楚了,就不会有这种问题了。再次感谢inthirties!
1.创建的表的拥有者本来就是创建者自己。只不过你以sysdba登录的时候,你登录的就是sys账户,拥有者和创建者都是sys
2.企业版在本机上默认有两种验证方式,当你以sysdba方式登录的话,是以os方式验证,登入sys。若你将这个验证方式去掉,则不会出现这种情况
3.你的表名和视图名之前不加用户名的话,查出来的是自己用户下的表和视图,提示表或视图不存在,就是在当前用户下不存在。若你在表名前加上一个用户名,而且该用户名下有这张表,那么如果出现该提示,可能是权限问题。
lz这里的总结和你说的并不矛盾。
1.使用自己创建的用户登录时,需要登陆模式为"标准"(nomal),这样创建的表的拥有者就是他自己了。确实,以normal的方式,就可以把表创建到自己的schema里,只要你不指定一个schema的话。sysdba和sysoper
这两个特殊身份,一般是用来管理和维护的。不要用他们来创建表和其他对象。2. 不管哪个用户只要是使用dba方式登录PL/sQL创建的表的拥有者都是sys
这个也是正确的,不过有错误的是,是使用sysdba,不是dba,dba和sysdba的区别可以看另外一个文章,用sysdba登录的schema就是sys叻,所以拥有者就是sys了。 这个和wildwave兄弟解答是说的sysdba认证方面的问题,描述也是正确的,不过和lz解答的是两码事。 3.般报错“表或视图不存在”,除非这个表或视图真不存在,问题一般是权限的问题。把用户的权限之类的理吧清楚了,就不会有这种问题了。
这里也是对的,wildwave兄弟说的不同schema的问题,其实属于表不存在的问题。确实别的schema的对象在你的schema里是没有的。 也有可能你加了schema,但是表名写的不对,还是报 不存在的错呀。