1,获取会话号
DBA : 获取数据库系统中所有会话id,V$SESSION
视图包含了当前数据库中所有会话的信息
SELECT SID, SERIAL#, USERNAME, STATUS
FROM V$SESSION;
普通用户:获取本用户当前会话id
SELECT SYS_CONTEXT('USERENV', 'SID') AS SESSION_ID
FROM DUAL;
2,关闭会话号
这是关闭会话的方式,需要两个属性会话id和会话序列号
ALTER SYSTEM KILL SESSION 'session_ID,serial#';
普通用户只能获取当前会话id,无法获取会话序列号,会话序列号是一个内部标识符,对普通用户不可见,所以应该只有DBA可以关闭会话。
3,oracle中sys创建两个DBA用户 B1和B2,两个用户可以相互回收DBA权限吗?
实验测试表明两个DBA用户可以相互回收DBA权限,如下图:
但当多次测试grant,revoke操作后,系统会发生崩溃,B2用户登录会失败,出现稳定性问题。
4,在数据库系统中,创建两个普通用户A,B拥有基本权限,创建一个角色R,将角色R的权限授予给A, A创建一个存储过程,把并把执行权给角色R, 紧接着把R的授予给B, 看B能不能执行A创建的存储过程。
实验结果表明: B不能执行A创建的存储过程,报以下错误。
但如果不通过角色授权,用户A直接将存储过程的查询权限授予B,此时B可以执行。
5,创建一个死循环的存储过程
返回buffer overflow
6,创建两个存储过程互相无限次调用
结果:不会死循环,查询表user_procedures可以发现系统会自动把创建好的两个存储过程删除。