如何在AWS Oracle RDS中为SYS对象权限授予GRANT OPTION
AWS RDS Oracle 授予SYS对象带GRANT OPTION权限的解决方法
报错根因
rdsadmin.rdsadmin_util.grant_sys_object 存储过程的第四个参数为布尔类型,不支持按参数位置直接传值,必须显式指定参数名才可以被PL/SQL正确解析,否则会触发PLS-00306参数不匹配报错。
正确授权语句
推荐使用PL/SQL块写法,可读性更高:
BEGIN rdsadmin.rdsadmin_util.grant_sys_object( p_obj_name => 'DBA_OBJECTS', p_grantee => 'MASTER_USER', p_privilege => 'SELECT', p_grant_option => TRUE ); END; /
也可以使用exec简写:exec rdsadmin.rdsadmin_util.grant_sys_object(p_obj_name=>'DBA_OBJECTS',p_grantee=>'MASTER_USER',p_privilege=>'SELECT',p_grant_option=>true);
有效性验证
授权完成后,使用被授权用户登录数据库,执行如下语句检查权限配置:
SELECT grantable FROM dba_tab_privs WHERE grantee = 'MASTER_USER' AND owner = 'SYS' AND table_name = 'DBA_OBJECTS' AND privilege = 'SELECT';
返回结果为YES即代表已成功授予带GRANT OPTION的权限。
注意事项
- 传入的对象名、用户名大小写敏感,Oracle默认存储的元数据为大写,需确保参数值与实际值大小写完全匹配
- 只有RDS主用户,或已经被授予
rdsadmin_util执行权限的用户可以运行上述存储过程 - RDS对部分SYS内部对象做了权限限制,此类对象无法通过该方法授权
内容的提问来源于stack exchange,提问作者Thomas Carlton
相关产品推荐
相关产品推荐

