同事说IBM的optim程序在11g上执行grant操作时成功,但在10g上失败,出现的错误为:
ORA-01749: you may not GRANT/REVOKE privileges to/from yourself
开始时,我告诉他应该不会是由于10g和11g的grant差异造成的. (因为建立的表,不需要授予什么权限给自身, 这种操作没有必要, 10g,11g处理都应该这样).
可能是由于其他原因造成的.例如软件检测到数据库是10g时,执行了grant给自身的操作,但在检测到数据库是11g时,使用了其他操作,
从而造成这样的差异. 但我想了想,觉得还是试验一下.于是选择11.2.0.3和10.2.0.3试验.
11.2.0.3下使用system登陆数据库试验:
10.2.0.3下使用system登陆数据库试验:
真是惊奇, 11g上对grant给自身竟然是成功的. 11g/10g在grant语句的实现代码上竟然有如此不同.
但从我的角度,赞同10g的处理方式, 毕竟授予操作权限给对象的持有者, 是没有必要的.
我更倾向于11g实现代码中疏忽了被授权的人是否是自身的检查, 类似于某种bug.