我想知道如何授予一个特定用户对另一个用户有权访问的所有数据库对象的权限。
举例来说,oracle数据库中有四个用户:a、b、c和d。
用户A不拥有任何对象,但可以访问B和C中的某些对象。
用户b和c拥有一些对象,但也可以访问b、c和d中的其他数据库对象。
现在我希望用户a拥有用户b和c所拥有的所有特权(其中一些a已经拥有了)。
正确的方法是什么?我应该使用查询还是过程?此过程是否应始终与数据库对象所有者的登录一起运行?例如,B可以访问D中的某个对象,B可以将D的对象的权限授予A吗?
最佳答案
可以使用角色对系统和对象权限进行分组,然后将这些角色分配给用户和其他角色。这样,您可以将角色包含的权限集体授予用户,从而简化了安全管理(请参见数据库概念中的"Privilege and Role Authorization")。
例如,B可以访问D中的某个对象,B可以将D的对象的权限授予A吗?
用户SCOTT
可以将对象权限、系统权限或角色授予另一个用户或角色(如果已授予此权限或角色WITH ADMIN OPTION
或WITH GRANT OPTION
)。例如,角色select_hr
有权查询用户HR
拥有的某些表:
create role select_hr;
grant select on hr.employees to select_hr;
grant select on hr.departments to select_hr;
现在您可以通过以下方式将此角色分配给
SCOTT
:grant select_hr to scott with admin option;
SCOTT
现在可以将此角色分配给具有或不具有管理选项的其他数据库用户:grant select_hr to bob;
请参阅《数据库安全指南》中的"Granting a User Privileges and Roles"。