| |
我的测试机上安装了ms的axapta,4.1版本,应用帐号采用os authentication。默认采用前缀ops$。运行一段时间后,由于用户要求需要改一个帐号名。
解决方法:
1.为了保证原有的信息不丢失,决定采用新建一个schema,然后用exp/imp的方式将原帐号数据导入到新的schema.
2.在新建schema时,还要考虑到原有帐号的权限问题。问题如下:
在原有帐号中,可以看到有以下权限:
create user "ops$aaaaxdvp"
identified externally
default tablespace axtab
temporary tablespace axtmp
profile default
account unlock;
grant resource to "ops$bbbaxdvp";
grant connect to "ops$bbbaxdvp";
alter user "ops$avonapaxdvp" default role all;
begin
sys.dbms_rule_adm.grant_system_privilege(
privilege => sys.dbms_rule_adm.alter_any_rule_set,
grantee => 'ops$bbbaxdvp',
grant_option => true);
end;
/
grant execute any library to ops$avonapaxdvp;
|
如果照此权限直接执行,会报如下错误:
sys.dbms_rule_adm.grant_system_privilege(
*
error at line 2:
ora-00911: invalid character
ora-24000: invalid value ops$bbbaxdvp, user/role should be of the form
[schema.]name
ora-00911: invalid character
ora-06512: at "sys.dbms_rule_adm", line 289
ora-06512: at line 2
|
root cause:
由于外部验证用户中,如'ops$bbbaxdvp',带有一个''。直接执行时oracle会报错。可以这样解决:
给用户名加单引号:
--grantee => '"ops$bbbaxdvp"',
--grant execute any library to 'ops$avonapaxdvp'
|
|
|