先回答这个问题,然后回答上面别的问题。 新增一个user,首选connect角色和create session权限是不一样的, connect角色包括create session/create view/create table/alter session/create cluster/ create synonym/create sequence/create database link这些权限的(具体可以通过 select * from role_sys_privs where role='CONNECT';)。 总结:connect角色包含create session权限。至于上面说的connect、session、process差异。 个人感觉: connect和session是一对多的关系,session和process是一对多的关系; 因此connect和process是一对多的关系。 楼主比较纠结的是connect和session为啥是一对多的关系,如何体现,这个证明不难的。 楼主应该用过全局临时表和plsql developer吧? 当建立一个基于session的全局临时表时候,新的session登入时候查询这个临时表,肯定为空, 那么就可以做实验了。 用plsql登陆,打开一个窗口创建基于session的全局临时表,在这个窗口向全局临时表插入数据,然后查询 ,肯定有结果,然后新建一个sql窗口,查询肯定没有结果。 那么证明这次登陆就是一个connect,而每一个新的sql窗口对应不同的session。 具体测试结果就不截图,附上建表神马的代码: create global temporary table tt2(t number) on commit preserve rows; insert into tt2 values(1); insert into tt2 values(2); select * from tt2; --(查询出结果) --新建sql窗口 select * from tt2; --(未未未查询出结果)
connect 是可以登录, session 是创建session。
您好: 謝謝 arlen1990 解說,但有些問題想請教 我是用具有SYSDBA 權限的 USER_A來做: 1.我查到的CONNECT 預設只有 CREATE SESSION ,您說的其他權限 是否後面加上去的? SELECT * FROM dba_sys_privs WHERE grantee IN ('RESOURCE', 'CONNECT') ORDER BY 1;--要在SQL PLUS 中,用/AS SYSDBA 查 select * from role_sys_privs where role LIKE '%CONNECT%'; --只有CREATE SESSION select * from role_sys_privs where role LIKE '%RESOURCE%';--在SQL DEVELOPER 中無法用 /AS SYSDBA2.因為我是用ORACLE SQL DEVELOPER 來做,非PLSQL ; 所以當我 SQL視窗_A: 建立,新增資料後, 當然查出結果 但 SQL視窗_A:查詢-->依然有結果.所以,我就一直測不出 .
不好意思,可否再幫忙確認一下,只剩下1小步! SQL DEVELOPER 有辦法測嗎? 謝謝!
1.第一个是我记得之前是那样子,难道是改动了,昨天是没有做测试的。你既然查到结果是这样, select * from role_sys_privs where role LIKE '%CONNECT%'; --只有CREATE SESSION 那就说明create session和connect角色一样。 2.sqldevelopper我这边用不了,没办法给你测试。 这个connect可以对应多个session,这个只是个结论,工作生产用不到, 估计只有考试题里面会用到了。这个session也是oracle自己定义的一个 名词。不理解也没什么的。我列举的例子只是帮助你明白,这个问题无需深究啊。 下面给你提供plsql developer里面测试截图吧。 同一用户登录下的plsql,这是用我上面说的代码在窗口A创建的基于session的全局临时表,可以 查到数据。这里解释下基于session的全局临时表,也就是只有当前session可以看到当前session 插入的数据,各不同session之间是完全独立的。然后,不切换用户情况下,也就相当于同一connect下,新建另外一个窗口B,相当于不同session B, 查询表,是没有数据的。 综上,我是利用基于session的全局临时表特性来从侧面证明(或者说帮你理解)一个connect包含 多个session。 ***********************OVER
這一篇完章我之前有看過,但就是概念很模糊
一个数据库的Connect可以有一个或多个session,同时connect也可以有一个或多个process.
在专业服务器连接方式中,一个session对应一个process,在共享服务器方式中,一个process可以为多个session。
一个session也可以存在若干个process中,并行同样是一个session对应一个process,主session是coordinator session,每个parallel process同样会对应数据库里一个单独的session。
1.若SQL PLUS:
CONNECT连接时确认用户名和密码,通过后形成SESSION?
是指 我開啟一個 SQL PLUS 視窗,輸入帳號密碼,成功連線,算1個 CONNECT ,然後又有1個SESSION嗎?
若是1個CONNECT 有多個 SESSION,那又該如何認定?2.若是SQL DEVELOPER:
我新增「連線」(有帳號/密碼),這算1個CONNECT 嗎?
那此時 SESSION 在哪邊?
同理 若是1個CONNECT 有多個 SESSION,那又該如何作業?謝謝!
新增一个user,首选connect角色和create session权限是不一样的,
connect角色包括create session/create view/create table/alter session/create cluster/
create synonym/create sequence/create database link这些权限的(具体可以通过
select * from role_sys_privs where role='CONNECT';)。
总结:connect角色包含create session权限。至于上面说的connect、session、process差异。
个人感觉:
connect和session是一对多的关系,session和process是一对多的关系;
因此connect和process是一对多的关系。
楼主比较纠结的是connect和session为啥是一对多的关系,如何体现,这个证明不难的。
楼主应该用过全局临时表和plsql developer吧?
当建立一个基于session的全局临时表时候,新的session登入时候查询这个临时表,肯定为空,
那么就可以做实验了。
用plsql登陆,打开一个窗口创建基于session的全局临时表,在这个窗口向全局临时表插入数据,然后查询
,肯定有结果,然后新建一个sql窗口,查询肯定没有结果。
那么证明这次登陆就是一个connect,而每一个新的sql窗口对应不同的session。
具体测试结果就不截图,附上建表神马的代码:
create global temporary table tt2(t number)
on commit preserve rows;
insert into tt2 values(1);
insert into tt2 values(2);
select * from tt2; --(查询出结果)
--新建sql窗口
select * from tt2; --(未未未查询出结果)
session 是创建session。
謝謝 arlen1990 解說,但有些問題想請教
我是用具有SYSDBA 權限的 USER_A來做:
1.我查到的CONNECT 預設只有 CREATE SESSION ,您說的其他權限 是否後面加上去的?
SELECT * FROM dba_sys_privs WHERE grantee IN ('RESOURCE', 'CONNECT') ORDER BY 1;--要在SQL PLUS 中,用/AS SYSDBA 查
select * from role_sys_privs where role LIKE '%CONNECT%'; --只有CREATE SESSION
select * from role_sys_privs where role LIKE '%RESOURCE%';--在SQL DEVELOPER 中無法用 /AS SYSDBA2.因為我是用ORACLE SQL DEVELOPER 來做,非PLSQL ;
所以當我
SQL視窗_A: 建立,新增資料後, 當然查出結果
但
SQL視窗_A:查詢-->依然有結果.所以,我就一直測不出 .
SQL DEVELOPER 有辦法測嗎?
謝謝!
select * from role_sys_privs where role LIKE '%CONNECT%'; --只有CREATE SESSION
那就说明create session和connect角色一样。
2.sqldevelopper我这边用不了,没办法给你测试。
这个connect可以对应多个session,这个只是个结论,工作生产用不到,
估计只有考试题里面会用到了。这个session也是oracle自己定义的一个
名词。不理解也没什么的。我列举的例子只是帮助你明白,这个问题无需深究啊。
下面给你提供plsql developer里面测试截图吧。
同一用户登录下的plsql,这是用我上面说的代码在窗口A创建的基于session的全局临时表,可以
查到数据。这里解释下基于session的全局临时表,也就是只有当前session可以看到当前session
插入的数据,各不同session之间是完全独立的。然后,不切换用户情况下,也就相当于同一connect下,新建另外一个窗口B,相当于不同session B,
查询表,是没有数据的。
综上,我是利用基于session的全局临时表特性来从侧面证明(或者说帮你理解)一个connect包含
多个session。
***********************OVER
謝謝您的回覆。那 process 也是DB 後端的事嗎?,需要了解嗎?
数据库运行在服务器上,当然后要产生进程。
process就是对应操作系统里面的进程啊,正常情况下一个session产生一个后台的
进程,不过也有有可能是一对多、多对一的关系。这个就是你建立一个session,然后
后台产生一个进程或者多个进程,同时一个进程又有可能对应多个session的。了